适合一个常微分方程(ODE)
这个例子展示了如何适应参数歌唱的数据在两个方面。第一个显示了一个简单的恒速循环路径洛伦兹系统的一个解决方案的一部分,一个著名的歌唱与敏感依赖初始参数。第二个洛伦兹系统的演示如何修改参数以适应恒速循环路径。您可以为您的应用程序使用适当的方法作为数据拟合微分方程模型。
洛伦兹系统:定义和数值解
洛伦兹系统是一个常微分方程组(见洛伦兹系统)。真正的常数 ,系统是
洛伦兹的价值观系统参数的敏感
。启动系统[x (0) (0)、z(0)) =(10年,20年,10)
和查看系统的进化从0到100。
σ= 10;β= 8/3;ρ= 28;f = @ (t)[σ*(1)+σ* (2);ρ* (1)- (2)- (1)* (3);β* (3)+ (1)* (2)];xt0 =(10年,20年,10);(tspan] =数值(f [0 100] xt0);%龙格-库塔第四或第五阶ODE求解器进行求解图plot3((: 1)、(:, 2),(:, 3))视图([-10.0 - -2.0])
进化相当复杂。但在一个小的时间间隔,它看起来有点像匀速圆周运动。解决方案在时间间隔的阴谋[0,1/10)
。
(tspan] =数值(f [0] 1/10 xt0);%龙格-库塔第四或第五阶ODE求解器进行求解图plot3((: 1)、(:, 2),(:, 3))视图(-70 [-30])
适合一个圆形路径ODE的解决方案
一个圆形的路径有几个参数的方程:
角 路径的x - y平面
角 飞机从一个沿着x轴倾斜
半径R
速度V
转变t0从时间0
三维空间的转变δ
这些参数,确定次圆形轨道的位置xdata
。
类型fitlorenzfn
函数f = fitlorenzfn (x, xdata)θ= x (1:2);R = x (3);V = x (4);t0 = x (5);δ= x (8);f = 0(长度(xdata), 3);f (: 3) = R * sin(θ(1))* sin (V * (xdata - t0)) +δ(3);f (: 1) = R * cos (V * (xdata (t0)) * cos(θ(2))…- R * sin (V * (xdata - t0)) * cos(θ(1))* sin(θ(2))+δ(1);f (: 2) = R * sin (V * (xdata (t0)) * cos(θ(1))* cos(θ(2))… - R*cos(V*(xdata - t0))*sin(theta(2)) + delta(2);
找到最佳拟合圆路径洛伦兹系统有时在ODE解决方案中,使用lsqcurvefit
。为了保持参数在合理的限度,把界限的各种参数。
磅=[-15年-π-π/ 2,5日,-π,-40,-40,-40];乌兰巴托=π/ 2,π,60岁,15日,π,40岁,40岁,40);theta0 = (0, 0);R0 = 20;= 1;t0 = 0;delta0 = 0 (3,1);x0 = [theta0; R0 V0; t0 delta0);[xb, resnorm残留]= lsqcurvefit (tspan @fitlorenzfn, x0,磅,乌兰巴托);
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
情节的拟合圆分次ODE解决方案与洛伦兹系统的解决方案。
溶液= a +残余;持有在plot3(溶液(:1)溶液(:,2),溶液(:,3),“r”)传说(“颂歌解决方案”,圆弧的)举行从
图plot3 ((: 1)、(:, 2), (:, 3),“b”。,“MarkerSize”,10)在plot3(溶液(:1)溶液(:,2),溶液(:,3),“处方”,“MarkerSize”10)传说(“颂歌解决方案”,圆弧的)举行从
适应歌唱圆弧
现在修改参数 最适合圆弧。为一个更好的健康,使初始点(10年,20年,10)的改变。
为此,写一个函数文件paramfun
,ODE合适的参数和计算时间的轨迹t
。
类型paramfun
函数pos = paramfun (x, tspan)σ= x (1);β= x (2);ρ= x (3);xt0 = x (6);f = @ (t)[σ*(1)+σ* (2);ρ* (1)- (2)- (1)* (3);β* (3)+ (1)* (2)];[~,pos] =数值(f tspan xt0);
找到最好的参数,使用lsqcurvefit
最小化之间的差异的新计算的颂歌和圆弧轨迹溶液
。
xt0 = 0 (1,6);xt0(1) =σ;xt0(2) =β;xt0(3) =ρ;xt0(6) =溶液(1:);[pb, presnorm presidual、exitflag、输出]= lsqcurvefit (@paramfun、xt0 tspan,溶液);
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
确定有多少这种优化改变了参数。
流(“新参数:% f % f % f 'pb (1:3))
新的参数:9.132446,2.854998,27.937986
流(的原始参数:% f % f % f '(σ,β,ρ))
原始参数:10.000000,2.666667,28.000000
的参数σ
和β
改变了约10%。
图修改后的解决方案。
图保存在odesl = presidual +溶液;plot3 (odesl (: 1) odesl (:, 2), odesl (:, 3),“b”)plot3(溶液(:1)溶液(:,2),溶液(:,3),“r”)传说(“颂歌解决方案”,圆弧的)视图(-70年[-30])从
拟合问题常微分方程
中描述的优化仿真或常微分方程,一个优化器可以有麻烦的固有噪声数值颂歌的解决方案。金宝搏官方网站如果你怀疑你的解决方案是不理想的,也许是因为退出消息或退出标志表明潜在的错误,然后试着改变有限差分。在这个例子中,使用一个较大的步长有限差分和中央有限的差异。
选择= optimoptions (“lsqcurvefit”,“FiniteDifferenceStepSize”1的军医,…“FiniteDifferenceType”,“中央”);[pbest2, presnorm2 presidual2、exitflag2 output2] =…lsqcurvefit (@paramfun xt0 tspan,溶液,[],[],选项);
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
在这种情况下,使用这些有限差分方案不完善的解决方案。
disp ([presnorm presnorm2])
20.0637 - 20.0637