syms w
A=[141432432 23432*w; 31432*w 3543566]
B=[13432*w^2 ; 3424324]
返回
A =
[ 141432432, 23432*w]
[ 31432*w, 3543566]
B =
13432*w^2
3424324
然后
C=A\B
c1=C(1)
simplify(c1)
返回
C =
-(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641))
(2*(6596791*w^3 - 7567351113687))/(23016082*w^2 - 15661723666641)
c1 =
-(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641))
ans =
-(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641))
我想将c1
简化为类似的内容,
c1 = -(w*(3*e^9*w-5.01*e^9))/......
我该怎么做?当我不使用syms
变量时,数字看起来很好。但是,如果我使用它,公式看起来很脏。
答案 0 :(得分:2)
看起来很脏,"但这是符号数学的重点 - 它对原始输入的完全精确度是准确的。如果您想要十进制格式的结果,您应该意识到它必然不太精确,除非这些值可以精确地表示为(足够短的)有限十进制扩展。在Matlab的符号数学工具箱中,您只需使用vpa
函数将结果转换为variable precision arithmetic:
syms w;
c1 = -(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641));
vpa(c1)
返回
-(1.0*w*(2974823657.0*w - 5014922498.0))/(46032164.0*w^2 - 31323447333282.0)
在这种情况下,这对你没什么帮助。如果你想要的精确度低得多,如你的问题所示,你可以使用digits
或vpa
的第二个参数:
syms w;
c1 = -(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641));
vpa(c1,3) % default value is 32
现在返回的精确度要低得多
-(1.0*w*(2.97e9*w - 5.01e9))/(4.6e7*w^2 - 3.13e13)
最后,您还可以使用遗憾名称matlabFunction
将符号表达式转换为浮点函数:
syms w;
c1 = -(w*(2974823657*w - 5014922498))/(2*(23016082*w^2 - 15661723666641));
c1_fun = matlabFunction(c1)
c1_fun =
@(w)-(w.*(w.*2.974823657e9-5.014922498e9))./(w.^2.*4.6032164e7-3.1323447333282e13)