matlab如何給未知數及包含未知數的函式賦值

cabbage_hhh發表於2020-11-14

這其實是個簡單的不能再簡單的問題,但是我在網上很少能找出這個問題的答案,所以這裡幫各位掃個盲。

其實就是用matlab的eval函式,作用是將字串轉換為matlab可執行語句。

比如 首先我們定義九個未知量 syms u1 u2 u3 d1 d2 d3 h0 h1 h2;

然後我們通過一些中間計算得到Lgav_final =
 
(h0*(conj(h0) + conj(h1)*conj(u2) + conj(h2)*(conj(d2) + conj(u2)^2/4)))/(6*(conj(h1) + (conj(h2)*conj(u2))/2)) + (h2*(u2^2/4 + d2)*(conj(h0) + conj(h1)*conj(u2) + conj(h2)*(conj(d2) + conj(u2)^2/4)))/(6*(conj(h1) + (conj(h2)*conj(u2))/2)) + (h1*u2*(conj(h0) + conj(h1)*conj(u2) + conj(h2)*(conj(d2) + conj(u2)^2/4)))/(6*(conj(h1) + (conj(h2)*conj(u2))/2)) + (h0*(h1 + (h2*u2)/2)*(conj(h0) + conj(h1)*conj(u1) + conj(h2)*(conj(d1) + conj(u1)^2/4)))/(6*(h1 + (h2*u1)/2)*(conj(h1) + (conj(h2)*conj(u1))/2)) + (h0*(h1 + (h2*u2)/2)*(conj(h0) + conj(h1)*conj(u3) + conj(h2)*(conj(d3) + conj(u3)^2/4)))/(6*(h1 + (h2*u3)/2)*(conj(h1) + (conj(h2)*conj(u3))/2)) + (h1*u1*(h1 + (h2*u2)/2)*(conj(h0) + conj(h1)*conj(u1) + conj(h2)*(conj(d1) + conj(u1)^2/4)))/(6*(h1 + (h2*u1)/2)*(conj(h1) + (conj(h2)*conj(u1))/2)) + (h1*u3*(h1 + (h2*u2)/2)*(conj(h0) + conj(h1)*conj(u3) + conj(h2)*(conj(d3) + conj(u3)^2/4)))/(6*(h1 + (h2*u3)/2)*(conj(h1) + (conj(h2)*conj(u3))/2)) + (h2*(h1 + (h2*u2)/2)*(u1^2/4 + d1)*(conj(h0) + conj(h1)*conj(u1) + conj(h2)*(conj(d1) + conj(u1)^2/4)))/(6*(h1 + (h2*u1)/2)*(conj(h1) + (conj(h2)*conj(u1))/2)) + (h2*(h1 + (h2*u2)/2)*(u3^2/4 + d3)*(conj(h0) + conj(h1)*conj(u3) + conj(h2)*(conj(d3) + conj(u3)^2/4)))/(6*(h1 + (h2*u3)/2)*(conj(h1) + (conj(h2)*conj(u3))/2)) 這個超複雜的式子,此時,我們想求出某特殊點,即u1=-1;u2=0;u3=1;  d1=-1;d2=0;d3=1; 時這個式子關於(h0,h1,h2)的函式。

 

如果直接賦值 u1=-1;u2=0;u3=1;  d1=-1;d2=0;d3=1;  然後重新再列印 Lgav_final,依然會是 原本的式子

而這個時候如果,輸入eval(Lgav_final),就可以得到賦值前六個未知數,留存的關於(h0,h1,h2)的函式。而u1 u2 u3 d1 d2 d3等值依然可以作為未知量,依舊可以用Lgav_final的式子求六個未知量的導數,Jacobian等有用資訊。

相關文章