背景是我正在解决数值分析中的一个问题,我似乎已经解决了非线性系统的一半,现在到了我应该应用求解微分方程的部分。
https://math.stackexchange.com/questions/467164/how-to-proceed-solving-this-problem
到目前为止的代码是
z=[0:500:4000 5000:1000:12000];
data=[5050 4980 4930 4890 4870 4865 4860 4860 4865 4875 4885 4905 4920 4935 4950 4970 4990];
fun=@(p)(4800 + p(1))*ones(size(z)) +p(2)/1000*z+p(3)*exp(p(4)/1000*z)-data;
x0=[0 0 0 -1];
opt = optimset('MaxFunEvals',1000);
p=lsqnonlin(fun,x0,[],[],opt);
fitf=@(t)(4800 + p(1))*ones(size(t)) + p(2)/1000*t+ p(3)*exp(p(4)/1000*t);
tt=linspace(0,12000,1000);
plot(z,data,'r-',tt,fitf(tt),'b-');
方程组在数学问题中说明。现在我想我应该定义一个类似的函数
function f=fsys(x, z)
f= ...
但首先我想我必须将系统从二阶重写为一阶,这只是数学理论,对吧?所以我首先将系统重写为一阶,然后在 matlab 中定义函数,最后类似于
xend=...; z0=...
[X,Z]=ode45(@fsys,[0, xend],z0); zs=Z(end), plot(X,Z,'--')
你能帮我定义 fsys,告诉我如何继续,确认或拒绝我走在正确的路上吗?如果您不想帮助我,但提示如何学习 matlab 来解决这个“非常简单的数学”,有什么提示吗?
我想我可以用通常的方式改造系统:
u = z'
u' = z''
系统变成
u'=-q0*c'(z)/((c(z)^3)
由于 z 是 x 的函数,u 和 u' 也是 x 的函数,因此该系统直到成为一阶系统,但是如何在 matlab 中编程解决方案?如何使用 u=tan(b0)?
