合适的二阶微分方程参数数据

36视图(30天)
我有一个二阶微分方程的一些可调参数,我需要适合一些数据。我花了一些时间在其他帖子的答案(Torsten StarStrider尤其是,一些关键的助攻),终于得到我脚本运行,但事情不是正确的。我怀疑这是我失踪传入y (t)数据的函数微分方程组,但我不确定。我希望有人能明白我失踪。数据拟合函数应该遵循数据更为紧密。数据是y vs t, diff. eq. y”= a, y的函数”。这是我的脚本:
清晰的所有
关闭所有
clc
Time_data = (0.8273;1.1104;1.3940;1.6584;1.8764;2.0173;2.1239;2.2343;2.3498)-。35;%自变量,实验数据
Y_data = (1.5025;2.4650;3.4274;4.3976;5.3600;6.3302;7.2965;8.2590;9.2253);%因变量,实验数据
a_m_guess = 200;% init a_m猜,参数拟合
a_m = lsqcurvefit(@(点,t) FittingFunction(点,t) a_m_guess, Time_data, Y_data);
%绘制数据以及拟合函数
持有“上”
情节(Time_data Y_data,“柯”,“DisplayName的”,“数据”)
plot_times = linspace(0,最大值(Time_data), 100);
情节(plot_times FittingFunction (a_m plot_times),“- r”,“DisplayName的”,“健康”);
包含(“时间”),ylabel (“Y”),传说(“位置”,“西北”)
函数F = FittingFunction (a_m Time_data)
init_slope = 3.39;%这是一个边界条件
tspan = Time_data;
InitConds = [0 init_slope];% y (t = 0) = 0, y ' (t = 0) =
[t_atTdata, y_atTdata] =数值(@ (t, y) SysOfDiffEqns (t y a_m) tspan, InitConds);
F = y_atTdata (: 1);不%返回y, y, y '
结束
函数Y = SysOfDiffEqns (t Y a_m)
% y”= (a_m y ')是二阶diff情商。
%是一个函数的a_m()和y ' (t)
%需要符合a_m对t_data和y_data可用
%,使系统的一阶deff方程式,
%替代Y (1) = Y
% (2)= Y '
%系统一分之二订单常微分方程:
% (1)' = Y (2)
% Y (2) ' =
Y = 0 (2, 1);%初始化输出矩阵
D = 8.7049;%常数输入参数
U_m = 0.95 * D;% costant输入参数
U = y (2);% U是dy / dt
一个= a_m * ((du) / (D-U_m)) * exp ((U-U_m) / (D-U_m));%加速度函数,只适用于U < D
= max (0);%的力量至少0
(1)= Y (2);% 1日导数替代
Y (2) = a;%(函数二阶导数等于y ')
结束
非常感谢任何帮助。再一次,我想我需要通过在y_data成@SysOfDiffEqns然后组y (1) = y_data,但我无法算出来后几天的摆弄它。

接受的答案

明星黾
明星黾 2021年9月22日
问题似乎不允许开始条件估计作为参数的初始值 “a_m”
同时, “plot_Times” 必须定义的范围只在次被安装。如果你想推断 0 (或任何其他值),可以使用 德瓦尔 函数。
我是唯一的变化 “a_m_guess” 在脚本中, “FittingFunction” 函数, “InitConds” 分配和单一参数 “a_m (1)” 传递给 “SysOfDiffEqns” 数值 调用。
只有这些变化,代码似乎工作,并给予适当的结果
Time_data = (0.8273;1.1104;1.3940;1.6584;1.8764;2.0173;2.1239;2.2343;2.3498)-。35;%自变量,实验数据
Y_data = (1.5025;2.4650;3.4274;4.3976;5.3600;6.3302;7.2965;8.2590;9.2253);%因变量,实验数据
a_m_guess = [200;1;1);% init a_m猜,参数拟合
a_m = lsqcurvefit(@(点,t) FittingFunction(点,t) a_m_guess, Time_data, Y_data)
局部最小值。lsqcurvefit停止因为当前步骤的大小小于步长值的宽容。
a_m = 3×1
369.4651 1.0532 4.2399
%绘制数据以及拟合函数
持有“上”
情节(Time_data Y_data,“柯”,“DisplayName的”,“数据”)
plot_times = linspace (min (Time_data), max (Time_data), 100);
情节(plot_times FittingFunction (a_m plot_times),“- r”,“DisplayName的”,“健康”);
包含(“时间”),ylabel (“Y”),传说(“位置”,“西北”)
函数F = FittingFunction (a_m Time_data)
init_slope = 3.39;%这是一个边界条件
tspan = Time_data;
% InitConds = [0 init_slope];% y (t = 0) = 0, y ' (t = 0) =
InitConds = a_m (2:3);
[t_atTdata, y_atTdata] =数值(@ (t, y) SysOfDiffEqns (t y a_m (1)), tspan, InitConds);
F = y_atTdata (: 1);不%返回y, y, y '
结束
函数Y = SysOfDiffEqns (t Y a_m)
% y”= (a_m y ')是二阶diff情商。
%是一个函数的a_m()和y ' (t)
%需要符合a_m对t_data和y_data可用
%,使系统的一阶deff方程式,
%替代Y (1) = Y
% (2)= Y '
%系统一分之二订单常微分方程:
% (1)' = Y (2)
% Y (2) ' =
Y = 0 (2, 1);%初始化输出矩阵
D = 8.7049;%常数输入参数
U_m = 0.95 * D;% costant输入参数
U = y (2);% U是dy / dt
一个= a_m * ((du) / (D-U_m)) * exp ((U-U_m) / (D-U_m));%加速度函数,只适用于U < D
= max (0);%的力量至少0
(1)= Y (2);% 1日导数替代
Y (2) = a;%(函数二阶导数等于y ')
结束
做适当的改变来得到不同的结果。
8的评论
明星黾
明星黾 2021年9月24日
我dediced运行代码,为了其他人的利益谁遇到这并希望看到结果
% ydot_o = 3.39;%初始斜率的估计
% D_guess = 8.7049;%的估计最终的斜率
Time_data = (0.8273;1.1104;1.3940;1.6584;1.8764;2.0173;2.1239;2.2343;2.3498);%自变量,实验数据
Y_data = (1.5025;2.4650;3.4274;4.3976;5.3600;6.3302;7.2965;8.2590;9.2253);%因变量,实验数据
%注意数据不从t = 0开始,所以初始条件是开始* *的时间数据
猜= [1000,1.5,3.3,8.7,0.94);% (a_m y (t_o), y’(t_o), D, U_m_factor] init a_m猜,y_o,和y ' _o, D,嗯的因素
constrain_parameters = 1;
如果constrain_parameters = = 0
lower_bound = [];
upper_bound = [];
elseifconstrain_parameters = = 1
lower_bound =[100年,1、3、8,0.91);
e4 upper_bound =[1, 2, 4, 9日,0.98);
结束
return_y_and_ydot = 0;%如果= 0,只返回y值(配件)。如果= 1,返回两个y, y的值(策划)。
选择= optimset ();
(安装、resnorm残差,~,~]= lsqcurvefit(@(合身,t) FittingFunction(安装t return_y_and_ydot),猜,Time_data, Y_data, lower_bound, upper_bound,选项)
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。
安装= 1×5
1.0 e + 03 * 1.1093 0.0015 0.0032 0.0087 0.0009
resnorm = 0.0027
残差= 9×1
0.0131 -0.0226 -0.0019 0.0205 -0.0099 0.0204 -0.0183 -0.0201 0.0187
% %评价和阴谋
return_y_and_ydot = 1;
trans_threshold = 0.99;
D =(4)安装;
trans_pt = trans_threshold * D;
图(1)
次要情节(2,1,1)%画出y (t)数据以及安装y (t)
持有“上”
情节(Time_data Y_data,“柯”,“DisplayName的”,“数据”)
plot_times = linspace (min (Time_data), max (Time_data), 1 e4);
解决方案= FittingFunction(安装、plot_times return_y_and_ydot);
情节(plot_times、解决方案(:1),“- r”,“DisplayName的”,“健康”);
包含(“时间”),ylabel (“Y”),传说(“位置”,“西北”)、标题(的数据和健康和时间)、网格“上”
次要情节(2,1,2)%画出拟合y ' (t)与过渡线
持有“上”
情节(plot_times、解决方案(:,2),“- r”,“DisplayName的”,“健康”);
线([min (Time_data), max (Time_data)], [trans_pt trans_pt],“DisplayName的”,“过渡”)
包含(“时间”),ylabel (“Ydot”),传说(“位置”,“西北”)、标题(“ydot vs时间”)、网格“上”
图(2)%画出残差
情节(Time_data残差,“柯”,“DisplayName的”,“残差”)
包含(“时间”),ylabel (“Y”),传说(“位置”,“西北”)、标题(“残差与时间”)、网格“上”
% %推断解决方案向后t = 0
ext_times = linspace(0分钟(Time_data), 100);%延长时间为零
ICs =[(2),(3)安装);%新ICs是什么?
ext_sol = ode23s (@ (t, y) SysOfDiffEqns (t y安装),[min (Time_data), 0], ICs);
ext_y =德瓦尔(ext_sol ext_times);
图(1)
次要情节(2,1,1)% y (t)的阴谋
情节(ext_times ext_y (1:)“g”,“DisplayName的”,“扩展”)
次要情节(2,1,2)% y (t)的阴谋
:情节(ext_times ext_y (2),“g”,“DisplayName的”,“扩展”)
% %功能
函数F = FittingFunction(猜,Time_data return_y_and_ydot)
tspan = Time_data;
InitConds =[猜(2),(3)猜);% y (t = t_o), y ' (t = t_o) = init_slope
% (t_atTdata y_atTdata] =数值(@ (t, y) SysOfDiffEqns (t y猜),tspan, InitConds);
[t_atTdata, y_atTdata] = ode23s (@ (t, y) SysOfDiffEqns (t y猜),tspan, InitConds);
如果return_y_and_ydot = = 0%用于优化操作过程中对数据
F = y_atTdata (: 1);不%返回y, y, y '
elseifreturn_y_and_ydot = = 1%用于显示结果
F = y_atTdata;%返回两个y, y '
结束
结束
函数Y = SysOfDiffEqns (t, Y,猜)
% y”= (a_m y ')是二阶diff情商。
%是一个函数的a_m()和y ' (t)
%需要符合a_m对t_data和y_data可用
%,使系统的一阶deff方程式,
%替代Y (1) = Y
% (2)= Y '
%系统一分之二订单常微分方程:
% (1)' = Y (2)
% Y (2) ' =
Y = 0 (2, 1);%初始化输出矩阵
a_m =猜(1);
D =猜(4);%让参数拟合
U_m_factor =猜(5);%让参数拟合
% D = 8.7049;%常数输入参数
% U_m_factor = 0.94;%常数输入参数
U_m = U_m_factor * D;
U = y (2);% U是dy / dt
一个= a_m * ((du) / (D-U_m)) * exp ((U-U_m) / (D-U_m));%加速度函数,只适用于U < D
= max (0);%的力量至少0
(1)= Y (2);% 1日导数替代
Y (2) = a;%(函数二阶导数等于y ')
结束
我祝贺扩展最初的想法!

登录置评。

更多的答案(0)

下载188bet金宝搏


释放

R2017b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的