求解一个参数未知的非线性ODE

7次浏览(过去30天)
你好!我正在解决一个动力学参数未知A的ODE方程,我一直在使用python和深度学习来求解方程,并确定A的值,然而损失函数总是在10**4的数量级,参数A是错误的,我尝试了不同的超参数,但它不起作用。这是ODE方程: 顺铂/ dt = k1 * ((DP) ^ 2) 和k1 = k = 一个 e ^ ( 1 / R (- E / ( T + 273 ), A是10**8的数量级,我有DP(t)数据。
我被困住了,我想知道用matlab解决这个问题的最佳方法是什么?或者还有其他类似的例子吗?
任何帮助都非常感谢!

接受的答案

Torsten
Torsten 2022年4月19日
编辑:Torsten 2022年4月19日
%的时间点
Ts =[1 2 3 4 5 6 7 8];
Dp =[1000 700.32 580.42 408.20 317.38 281.18 198.15 100.12];
P0 = 1e1;
p = fminunc(@(p)fun(p,ts,DP),p0)
E = 111e3;
R = 8.314;
T = 371;
A = p*exp(E/(R*T))
情节(ts, DP)
持有
情节(ts, 1. / (1 / DP(1) +一个* exp (e / (R * T)) * (ts-ts (1))));
函数obj = fun(p,ts,DP)
DP_model = 1/ (1/DP(1)+ p*(ts-ts(1)));
obj = sum((DP-DP_model).^2)
结束
6个评论
khaoula Oueslati
khaoula Oueslati 2022年4月19日
非常感谢 @Torsten !并不是我不相信这个表达,我只是想知道如何找到它,这样我就可以向我的学术导师解释它。关于不匹配,可能是由于数据或E值的一些变化,我会进一步调查,再次感谢!

登录评论。

更多答案(3)

Torsten
Torsten 2022年4月14日
D_p的ODE
(1/D_p0 + k1*(t-t0))
其中,D_p0 = D_p(t0)。
现在您可以应用“lsqcurvefit”来拟合未知参数A。
2的评论
khaoula Oueslati
khaoula Oueslati 2022年4月19日
你好 @Torsten ,我不知道如何实现使用Lsqcurvefit,因为我不太熟悉matlab,我正在努力使用它来解决我的问题。我尝试使用fminunc,但错误不断出现,我不知道如何解决他们。
这是我使用fminunc的代码
函数dDP = Mymodel (t, DP)
%已知参数
E = 111年e3;
R = 8.314;
T = 371;
dDP = - (A * (exp (e / R * T))) * (DP ^ 2);
结束
函数obj = objective(A)
DP0 = 1000;
%的时间点
Ts =[1 2 3 4 5 6 7 8];
(t, DP) =数值(@ (t, DP) Mymodel (t, DP), ts, DP0);
DP_measured=[1000 700.32 580.42 408.20 317.38 281.18 198.15 100.12];
= (DP-DP_measured) ^ 2;
obj = (A)之和;
结束
A0 = 1 e8;
乐趣= @目标;
[A, fval] = fminunc(有趣,A0);
disp ([”答:“num2str (A)])
这些出现错误:
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
错误在目标中(第5行)
(t, DP) =数值(@ (t, DP) Mymodel (t, DP), ts, DP0);
optimization_DP
错误使用fminunc
提供目标函数必须返回一个标量值。
错误在optimization_DP(第3行)
[A, fval] = fminunc(有趣,A0);

登录评论。


山姆翟
山姆翟 2022年4月14日
编辑:山姆翟 2022年4月14日
这个控制方程已经给出了,你已经得到了 数据。
目标是想要找到 一个
数据,你可以估计 .接下来, 可以从 微分方程
现在,如果 R E 而且 T 都是已知的 可以从 代数方程
请核实一下。
如果 数据是均匀分布的,那么可以用这种方法进行估计
T = -pi:(2*pi/100):pi;
X = sint;%假设Dp是正弦波
Y = gradient(x)/(2*pi/100);%估计dotDp,余弦波预期
情节(t x,“线宽”, 1.5 t, y,“线宽”, 1.5)
网格
包含(“t”
ylabel (x(t)和x " (t)
传奇('x(t) = sint 'x " (t) = cos(t)“位置”“西北”
1评论
khaoula Oueslati
khaoula Oueslati 2022年4月14日
谢谢你,山姆!我会尝试一下,但问题是,我需要能够找到参数使用优化算法,而不是从代数方程,我尝试用python,但我没有弄清楚。

登录评论。


大卫·威林汉
大卫·威林汉 2022年4月14日
你好,
你见过这个在MATLAB中使用深度学习求解ODE的例子吗?
1评论
khaoula Oueslati
khaoula Oueslati 2022年4月16日
谢谢大卫!不,我以前没有看过,但我一定会去看看!

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!