主要内容

拟合常微分方程(ODE)

这个例子展示了如何用两种方法使ODE的参数适合于数据。第一种方法直接拟合了一个等速圆路径到洛伦兹系统解的一部分,洛伦兹系统是一个著名的微分方程,对初始参数有敏感的依赖性。第二章是如何修改洛伦兹系统的参数来拟合等速圆路径。对于应用程序,您可以使用适当的方法作为模型,将微分方程拟合到数据中。

洛伦兹系统:定义与数值解

洛伦兹方程组是一个常微分方程组(见洛伦兹系统).真正的常数 σ ρ β ,系统是

d x d t σ y - x d y d t x ρ - z - y d z d t x y - β z

敏感系统的参数洛伦兹值为 σ 1 0 β 8 / 3. ρ 2 8 .启动系统从[x(0)(0)、z(0)) =(10年,20年,10)并查看系统从时间0到100的演变。

σ= 10;β= 8/3;ρ= 28;F = @(t,a) [-sigma*a(1) + sigma*a(2)];Rho *a(1) - a(2) - a(1)*a(3);β* (3)+ (1)* (2)];xt0 =(10年,20年,10);[tspan,a] = ode45(f,[0 100],xt0);%龙格-库塔4 /5阶ODE求解器图plot3((: 1)、(:,2),(:,3))视图([-10.0 - -2.0])

图中包含一个轴对象。axis对象包含一个类型为line的对象。

进化过程相当复杂。但在一小段时间内,它看起来有点像匀速圆周运动。在时间区间内画出解[0, 1/10)

[tspan,a] = ode45(f,[0 1/10],xt0);%龙格-库塔4 /5阶ODE求解器图plot3((: 1)、(:,2),(:,3))视图(-70 [-30])

图中包含一个轴对象。axis对象包含一个类型为line的对象。

在ODE解中加入一个循环路径

圆路径方程有几个参数:

  • θ 1 从x-y平面出发的路径

  • θ 2 平面沿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(theta(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解和Lorenz系统的解一起绘制时刻的最佳拟合圆点。

Soln = a +残差;持有plot3(溶液(:1)溶液(:,2),溶液(:,3),“r”)传说(“颂歌解决方案”圆弧的)举行

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示ODE解,圆弧。

图plot3((: 1)、(:,2),(:,3),“b”。“MarkerSize”, 10)plot3(溶液(:1)溶液(:,2),溶液(:,3),“处方”“MarkerSize”10)传说(“颂歌解决方案”圆弧的)举行

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示ODE解,圆弧。

将ODE适用于圆弧

现在修改参数 σ β 一个 n d ρ 以配合圆弧。为了更好的匹配,也允许初始点[10,20,10]改变。

为此,编写一个函数文件paramfun取ODE拟合的参数并计算时间内的轨迹t

类型paramfun
函数pos = paramfun(x,tspan) sigma = x(1);β= x (2);ρ= x (3);xt0 = x (6);F = @(t,a) [-sigma*a(1) + sigma*a(2)];Rho *a(1) - a(2) - a(1)*a(3);β* (3)+ (1)* (2)];[~, pos] =数值(f tspan xt0);

要找到最佳参数,请使用lsqcurvefit使新计算的ODE轨迹与圆弧之间的差异最小溶液

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 =总统+ soln;plot3 (odesl (: 1) odesl (:, 2), odesl (:, 3),“b”) plot3(溶液(:1)溶液(:,2),溶液(:,3),“r”)传说(“颂歌解决方案”圆弧的)视图([-30 -70])保持

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象表示ODE解,圆弧。

颂歌拟合的问题

中描述的优化模拟或常微分方程,由于数值ODE解中的固有噪声,优化器可能会遇到麻烦。金宝搏官方网站如果您怀疑您的解决方案不是理想的,可能是因为退出消息或退出标志表明了潜在的不准确性,那么请尝试更改有限差分。在本例中,使用更大的有限差分步长和中心有限差分。

选择= optimoptions (“lsqcurvefit”“FiniteDifferenceStepSize”1的军医,...“FiniteDifferenceType”“中央”);[pbest2, presnorm2 presidual2、exitflag2 output2] =...lsqcurvefit (@paramfun xt0 tspan,溶液,[],[],选项);
局部最小值。Lsqcurvefit停止是因为相对于初始值的平方和的最终变化小于函数公差的值。

在这种情况下,使用这些有限差分选项并不能改善解。

disp ([presnorm presnorm2])
20.0637 - 20.0637

相关的话题