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文檔
總結
以上是生活随笔為你收集整理的matlab subs eval,MATLAB里计算表达式的值:subs函数与eval、vpa、double等配合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue 组件化
- 下一篇: S32K144 EVB之FTM