Info

This question is closed. Reopen it to edit or answer.

help to fix this numeric symbolic array

2 views (last 30 days)
Lisa Lee
Lisa Lee on 9 Aug 2017
Closed: MATLAB Answer Bot on 20 Aug 2021
I need some help with the code below:
scaleFactors = [ 3.4, 2.3;
1.7, 1.9 ]
xMatSym = sym('X',[ 2, 2 ]);
xScaled = xMatSym./scaleFactors;
I am hoping to get the results shown below:
X1_1/3.4 X1_2/2.3
X2_1/1.7 X2_2/1.9
But, instead I am getting the results below instead:
(5*X1_1)/17 (10*X1_2)/23
(10*X2_1)/17 (10*X2_2)/19
I know the reasons it doesn't work. But I don't know how to fix this. Can someone help me?
Thank you so much!
  3 Comments
Lisa Lee
Lisa Lee on 12 Aug 2017
Hi, Jan, I am not sure what you mean about "{} code". I think that's for cell array. Mind to show what you mean to me with an example?

Answers (1)

Karan Gill
Karan Gill on 12 Aug 2017
Edited: Karan Gill on 17 Oct 2017
You can't have a "numeric symbolic" array because "numeric" and "symbolic" are different data types. For your options, see https://www.mathworks.com/help/symbolic/choose-symbolic-or-numeric-arithmetic.html.
Instead, try the vpa function on your result.
  2 Comments
Walter Roberson
Walter Roberson on 12 Aug 2017
Note that vpa(xScaled) will get you output such as
[ 0.29411764705882352941176470588235*X1_1, 0.43478260869565217391304347826087*X1_2]
[ 0.58823529411764705882352941176471*X2_1, 0.52631578947368421052631578947368*X2_2]
You can also
>> vpa(xScaled,2)
ans =
[ 0.29*X1_1, 0.43*X1_2]
[ 0.59*X2_1, 0.53*X2_2]
Notice these are multiplications, not divisions, and it does matter for precision purposes how many digits you truncate to.
>> 1000/1.7
ans =
588.235294117647
>> 1000*.59
ans =
590
Karan Gill
Karan Gill on 13 Aug 2017
Yes, I do not recommend using vpa(xScaled,2) to anyone who hasn't carefully read the vpa doc :) Too much potential for confusion.

This question is closed.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!