matlab问题 - inline

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:39:47
解一个常微分方程组,常常写2个m文件,如下:

[t,x] = ode45('func',[0,30], [0 0 0.0000000001]);
plot(t,x);legend('x1','x2','x3')

-----------------------------------

function dx = func(t,x)
dx = zeros(3,1);
b=8/3; p=10; o=28;
dx(1) = -b * x(1) + x(2) * x(3);
dx(2) = -p * x(2) + p * x(3);
dx(3) = -x(1) * x(2) + o * x(2) - x(3);

请问是否可以用inline命令将之整合到一个m文件中?如何编写?
请问可以把参数用符号代替吗?

func=inline('[-8/3 * x(1) + x(2) * x(3) ; -10 * x(2) + 10 * x(3) ; -x(1) * x(2) + 28 * x(2) - x(3)]','t','x');
[t,x] = ode45(func,[0,30], [0 0 0.0000000001]);
plot(t,x);legend('x1','x2','x3')

楼上回答者: csg974 - 大魔法师 八级 回答正确~!

能把inline中的数字用符号代替就更完美了。

方法如下:先建立一个微分方程组的子函数:
function f=funx1_3(t,x)
f=zeros(3,1);
f(1)=sin(x(3))+cos(x(3))./sin(x(2));
x(2)=cos(x(3))-sin(x(3));
x(3)=1-(sin(x(3))+cos(x(3))).*cot(x(2));
return
再在主界面里调用:
[T,F] = ode45(@funx1_3,[0 12],[0 0 0]);
画图也很容易:
plot(T,F)
但是初值全是0的话解出来的是不是有问题就难说,给个非零数会不会好些,我提供了代码,你可以自己多尝试几组数据.