2013-06-21 442 views
1

我一直在修補MATLAB求解函數一段時間,但似乎看不出它如何確定它輸出符號變量的順序。MATLAB求解函數的輸出順序

具體來說,我有一個我想同時求解的方程組。

a = f(a, b, c, d) 
b = f(a, b, c, d) 
c = f(a, b, c, d) 
d = f(a, b, c, d) 

並且這些方程式是符號的並且具有其他符號變量(除了a,b,c和d)。 (所以解決方案的輸出不是數字,而是符號)。

例如,當我解決倒置彈簧擺的運動方程時,我有兩個方程都依賴於phiDDot和lenDDot。我用解決函數來求解phiDDot和lenDDot單獨使用該呼叫:

[eom2, eom1] = solve(Lag(1)==0, Lag(2)==0, ddphi, ddlen); 

爲ddphi該溶液對應於輸出的矩陣的第二項,而ddlen對應於矩陣中的第一項。我想知道是否有某種方法可以讓MATLAB先輸出ddphi,然後再輸出ddlen,或者至少確定它們輸出的順序。當我解決4個以上的變量時,不知道變量的順序變成了一個大問題,並試圖使用ode45來求解微分方程。

任何意見將有所幫助!

回答

1

我相信它是基於您的方程中變量名稱的ASCII值的字母。根據documentationsolve,在您不提供輸出變量名稱的情況下,sym/symvar用於解析方程。 sym/symvar的幫助表示它返回lexicographical order中的變量,即按字母順序(symvar也是如此,即使它沒有這樣說,通過撥打電話setdiff)。如果您查看solve.m的實際代碼(在命令窗口中鍵入edit solve)並檢查名爲assignOutputs(R2012b中的第190行)的子函數,您會看到它調用了sort,並且有一條評論字典順序。

在R2012b(可能更早)中,文檔與R2013a的不同之處似乎與您的問題相關。在R2013a,this sentence is added

如果明確指定獨立變量vars,那麼解算器使用相同的順序 返回的解決方案。

我還在運行R2012b,所以無法確認這種不同的行爲。