【问题标题】:How to simplify a symbolic and numeric mixed expression in Matlab如何在Matlab中简化符号和数字混合表达式
【发布时间】:2014-03-09 02:02:54
【问题描述】:

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

(3145495418313256125*sin(11334310783410932061962315977/17437937757178560512000000000)*cos(theta))/85568392920039424

其中theta 是一个符号变量。我想简化这个表达式,使所有的数字和它们的数学运算结果都变成双倍。

【问题讨论】:

    标签: matlab numeric symbolic-math


    【解决方案1】:

    就数据类型而言,您不能混合使用浮点值和符号值。但是,您可以使用可变精度算术,以便以十进制形式表示值。使用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
    

    然后可以像调用任何函数一样调用anonymous function thetafun,例如thetafun(0.5)

    【讨论】:

      【解决方案2】:

      你可以利用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]
      

      【讨论】:

      • 我不确定这是否能回答 OP 的问题。 coeffs 用于多项式,但给出的方程不是多项式。此外,我不认为 OP 是在询问如何像使用系数那样提取符号值。
      • 想了想,嗯,我真的同意了。
      猜你喜欢
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      相关资源
      最近更新 更多