急!matlab最小二乘法。

来源:百度知道 编辑:UC知道 时间:2024/05/09 15:43:18
function xdot=feq(t,x)
a=0;b=0.00001;c=0;del=0.01;pf=15;
if x(3)>=pf&x(1)-x(2)>=0
xdot=[a*del*(x(1)-x(2));b*(x(3)-pf)+c*(x(3)-pf)*(del*(x(1)-x(2)));del*(x(1)-x(2))];
elseif x(3)>=pf&x(1)-x(2)<0
xdot=[0;-a*del*(x(1)-x(2))+b*(x(3)-pf)-c*(x(3)-pf)*(del*(x(1)-x(2)));del*(x(1)-x(2))];
elseif x(3)<pf&x(1)-x(2)>=0
xdot=[a*del*(x(1)-x(2))-b*(x(3)-pf)-c*(x(3)-pf)*del*(x(1)-x(2));0;del*(x(1)-x(2))];
else
xdot=[-b*(x(3)-pf)+c*(x(3)-pf)*del*(x(1)-x(2));-a*del*(x(1)-x(2));del*(x(1)-x(2))];
end
这里的a b c del pf是我自已乱赋的。因为我只会这们用ode45来解这个方程
这是一个微分方程组,要先解出来,再用最小二乘法求参数
一定要给出原程序,数据可以随便编,请不要怕麻烦

初值也是乱赋的。

function haha
[T,X]=ode45(@feq,[0,1],[0.1 0.2 0.3])
function xdot=feq(t,x)
a=0;b=0.00001;c=0;del=0.01;pf=15;
if x(3)>=pf&x(1)-x(2)>=0
xdot=[a*del*(x(1)-x(2));b*(x(3)-pf)+c*(x(3)-pf)*(del*(x(1)-x(2)));del*(x(1)-x(2))];
elseif x(3)>=pf&x(1)-x(2)<0
xdot=[0;-a*del*(x(1)-x(2))+b*(x(3)-pf)-c*(x(3)-pf)*(del*(x(1)-x(2)));del*(x(1)-x(2))];
elseif x(3)<pf&x(1)-x(2)>=0
xdot=[a*del*(x(1)-x(2))-b*(x(3)-pf)-c*(x(3)-pf)*del*(x(1)-x(2));0;del*(x(1)-x(2))];
else
xdot=[-b*(x(3)-pf)+c*(x(3)-pf)*del*(x(1)-x(2));-a*del*(x(1)-x(2));del*(x(1)-x(2))];
end

结果:
T =

0
0.0250
0.0500
0.0750
0.1000
0.1250
0.1500

X =

0.1000 0.2000 0.3000
0.1000 0.2000 0.3000
0.1000 0.2000 0.3000
0.1000 0.2000 0.2999