2017-03-02 94 views
0

我在MATLAB定義:替代常數的公式MATLAB

syms k2 k3; 
k1 = k2/k3; 

k2k3symbolic variables。然後鍵入​​給出的輸出:

k1 = 

k2/k3 

k2k3分配常數值:

k2 = 1; k3 = 2; 

然後I型在MATLAB命令行:

>> k1 

k1 = 

k2/k3 

是否有其示出了任何命令結果k1 = 1/2 = 0.5沒有使用subs函數?在我的公式有很多變量的情況下,使用subs是不方便的。

+0

'subs(k1)'有什麼問題?如果已經設置了參數,則不需要提供額外的變量。 – horchler

+0

我很好奇爲什麼你接受我的答案,然後幾天後沒有接受,當沒有其他選擇,它的作品? – Wolfie

+0

對不起,我的錯! – greenworld

回答

2

你想用eval(k1)

syms k2 k3; 
k1 = k2/k3; 

eval(k1) % output k1 = k2/k3 

k2 = 1; 

eval(k1) % output k1 = 1/k3 

k3 = 2; 

eval(k1) % output ans = 0.5 

k1  % output k1 = k2/k3 

編輯: 它已經指出,在評論認爲,以同樣的方式subs作品(並且可能是優選的)。從subsdocumentation

潛艇(S)返回小號s中替換符號變量的副本與調用函數和MATLAB®工作區

所以,你可以在使用subs(k1)獲得它們的值與上面使用eval(k1)的方式相同。它給出前兩個例子的相同輸出,最後一個例子利用了結果的精確分數形式,如圖所示。

subs(k1) % ouput ans = 1/2 
+1

這是'eval'版本錯誤的文檔,它應該是'sym/eval'。但是,Matlab似乎不再爲'sym/eval'維護文檔(除了最小的幫助文件外)。這很可能是因爲應該使用'subs',而不是'subs(k1)'。 – horchler

+0

感謝您指出@horchler,我編輯了我的答案以反映您的意見。 – Wolfie

+0

在我有許多常量要替換的情況下,由於替換一個長陣列,subs可能不方便。所以我想找到一個解決方案,除'subs'外。 – greenworld