【问题标题】:evaluate numeric part of a "sym" variable评估“sym”变量的数字部分
【发布时间】:2014-07-23 21:08:00
【问题描述】:

我需要在 MATLAB 中评估“sym”变量的数值部分(类似于 maple 中的“evalf”函数),例如我有这个 sym 变量:

(12*(51*EE*II - 8*39^(1/2)*EE*II))/(AA*ll^4*ro)

maple 中的“evalf”给我 12.48019224*EE*II/(AA*ll^4*ro),在 MATLAB 中有没有办法做到这一点?

【问题讨论】:

    标签: matlab eval symbolic-math maple


    【解决方案1】:

    我认为您正在寻找vpa(可变精度算术)函数

    syms EE II AA ll ro
    y = (12*(51*EE*II - 8*39^(1/2)*EE*II))/(AA*ll^4*ro)
    vpa(y)
    

    返回

    ans =
    
    (12.48019215375377223869826038978*EE*II)/(AA*ll^4*ro)
    

    【讨论】:

    • 我不知道vpa 函数。似乎正是@Alexander1991 正在寻找的东西。
    【解决方案2】:

    MATLAB 有一个simplify 命令,但请记住,符号工具箱不喜欢计算以给出小数,它会尝试将所有内容保留为小数值,因为无论如何这更准确。

    syms('EE','AA','ll','II','ro')
    simplify((12*(51*EE*II - 8*39^(1/2)*EE*II))/(AA*ll^4*ro)))
    

    这将减少为以下内容

    -(12*EE*II*(8*39^(1/2) - 51))/(AA*ll^4*ro)
    

    这是否更符合您的喜好实际上取决于您,但我建议将内容保留为分数而不是小数。精度越高越好。

    eval 函数可能对您也有一些用处,但这也会使其保持小数。使用它会给你

    (13722116389931*EE*II)/(1099511627776*AA*ll^4*ro)
    

    【讨论】:

    • 您使用的是旧版本的 Matlab 吗? eval 似乎不再有这种行为。请注意,分数是超越函数的近似值,因此它们不一定比符号十进制表示更准确。两者都基于digits 的值。
    • @horchler 我正在使用 R2012b。他们可能已经删除了该功能。当然,它并不总是更准确。试想一下,虽然它确实减少到 1/3 或类似的东西,但显然这比 0.3333 或其他更准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多