Info

此问题已关闭。 请重新打开它进行编辑或回答。

help to fix this numeric symbolic array

2 次查看(过去 30 天)
Lisa Lee
Lisa Lee 2017-8-9
关闭: MATLAB Answer Bot 2021-8-20
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 个评论
Lisa Lee
Lisa Lee 2017-8-12
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?

回答(1 个)

Karan Gill
Karan Gill 2017-8-12
编辑:Karan Gill 2017-10-17
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 个评论
Walter Roberson
Walter Roberson 2017-8-12
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 2017-8-13
Yes, I do not recommend using vpa(xScaled,2) to anyone who hasn't carefully read the vpa doc :) Too much potential for confusion.

此问题已关闭。

Community Treasure Hunt

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

Start Hunting!

Translated by