matlab如何给未知数及包含未知数的函数赋值


这其实是个很简单的问题,但是我在网上很少能找出这个问题的答案,所以这里帮各位扫个盲。

其实就是用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,u2,u3,d1,d2,d3当成已知量。

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等有用信息。

你可能感兴趣的:(matlab如何给未知数及包含未知数的函数赋值)