如何在Matlab中简化符号和数字混合表达式



我有一个符号和数字混合表达式:

(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]

最新更新