我有一个符号和数字混合表达式:
(3145495418313256125*sin(11334310783410932061962315977/17437937757178560512000000000)*cos(theta))/85568392920039424
,其中theta
是符号变量。我想简化这个表达式,这样所有的数字数字和他们的数学运算结果都改为double。
就数据类型而言,不能将浮点值和符号值混合使用。但是,您可以使用可变精度算术,以便以十进制形式表示值。使用vpa
:
syms theta
y1 = (3145495418313256125*sin(11334310783410932061962315977/17437937757178560512000000000)*cos(theta))/85568392920039424
y2 = vpa(y1)
返回
y2 =
22.24607614528243677915796931637*cos(theta)
y2
的数据类型(class
)仍然是sym
。参考digits
函数调整有效位数
如果你想在实际的浮点数中工作,你需要将你的符号表达式转换成一个函数。您可以通过使用名称令人困惑的matlabFunction
:
thetafun = matlabFunction(y1)
返回使用双精度变量的函数:
thetafun =
@(theta)cos(theta).*2.224607614528244e1
匿名函数thetafun
可以像其他函数一样被调用,例如thetafun(0.5)
您可以使用coeffs
命令来实现所需的:
f=2*cos(theta)/3+5*sin(theta)/19
c_f=coeffs(f);
fraction_c_f=double(c_f);
ans = [0.2632 0.6667]