1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab subs eval MATLAB里计算表达式的值:subs函数与eval vpa double等配合使用

matlab subs eval MATLAB里计算表达式的值:subs函数与eval vpa double等配合使用

时间:2022-11-06 21:33:46

相关推荐

matlab subs eval MATLAB里计算表达式的值:subs函数与eval vpa double等配合使用

MATLAB里 subs 函数与 vpa / double / eval 函数的配合使用

subs() 是MATLAB提供的一个函数,用于在包含变量的表达式中给变量赋值并求表达式的值。

“Symbolic substitution” Description:

subs(s,old,new) returns a copy of s, replacing all occurrences of old with new, and then evaluates s.

仅看定义,很容易误以为这个函数可以直接输出数值。然而吃一堑长一智的我发现事情并没有这么简单

例如,想把q向量的三个分量的值赋给变量q1 q2 q3,并求得 f 表达式的值:

syms q1 q2 q3;

f_expression=q1+2q2+3q3;

q=[1;2;3];

f=subs(f,[q1 q2 q3],[q(1) q(2) q(3)])

直接在命令行里执行,可以看到代入数值后算出的 f 表达式的值,但仔细看看就会发现变量区里 f 的类型是sym(符号),而不是数值!

也就是说,subs函数将变量赋值代入表达式计算后,并没有直接输出数值类型的结果。

查了半天,最后还是靠 MATLAB 的官方文档解决了问题:

Substitute parameter a with a floating-point number. The toolbox converts numbers to floating-point values, but it keeps intact the symbolic expressions, such as sym(pi), exp(sym(1)), and so on.

Approximate the result of substitution with floating-point values by using vpa on the result returned by subs.

概括:subs函数虽然可以给变量赋值,但仍然会保留完整的符号表达式。

如果想得到代入变量的表达式的浮点数结果,可以使用 vpa() 函数或 double() 函数(转为双精度浮点数)或 eval() 函数(执行表达式)等进行转换:

f=vpa(subs(f,[q1 q2 q3],[q(1) q(2) q(3)])); or

f=double(subs(f,[q1 q2 q3],[q(1) q(2) q(3)])); or

f=eval(subs(f,[q1 q2 q3],[q(1) q(2) q(3)]))

参考:MATLAB文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。