参数估计的微分方程组
199(30天)
显示旧的评论
伊戈尔·莫拉
2016年12月1日
你好。好的,所以我新matlab和我有一个问题关于动力学模型的参数估计。我有4个不同的反应物浓度c1, c2, c3和c4。我还有4微分方程,每一个相关的浓度(分别为c1, c2, c3和c4水平低于-)12日和实验数据对这些浓度不同时间加上初始条件。率系数k。歌唱的我想解决这个系统采用数值,然后使用输出计算实验数据减去观测数据和使用这些结果来估计使用lsqnonlin k值的,但显然我不能解决这些颂歌没有数值的k——这是我想知道的。任何帮助就如何设置命令来解决这个?
函数dcdt =批(t c k)
dcdt = 0 (4,1);
dcdt (1) = c - k (1) * (1) c - k (2) * (1);
dcdt (2) = k (1) * c (1) + k c (3) (4) * * c - k (3) (2) c - k (5) * (2);
dcdt (3) = k (2) * c (1) + k c (3) * (2) c - k (4) * (3) + k (6) * c (4);
dcdt (4) = k (5) * c (2) c - k (6) * (4);
结束
数据:
tc1c2c3c4
0 1 0 0 0
0.1 0.902 0.06997 0.02463 0.00218
0.2 0.8072 0.1353 0.0482 0.008192
0.4 0.6757 0.2123 0.0864 0.0289
0.6 0.5569 0.2789 0.1063 0.06233
0.8 0.4297 0.3292 0.1476 0.09756
1 0.3774 0.3457 0.1485 0.1255
1.5 0.2149 0.3486 0.1821 0.2526
2 0.141 - 0.3254 0.194 - 0.3401
3 0.04921 0.2445 0.1742 0.5277
4 0.0178 0.1728 0.1732 0.6323
5 0.006431 0.1091 0.1137 0.7702
6 0.002595 0.08301 0.08224 0.835
提前谢谢!
7评论
亚历克斯·沙
2019年9月5日
下面是更好的结果:
k1 0.756713424357579
k2 0.246983152463589
k3 0.100637714178661
k4 0.24638788199029
k5 0.582535403727263
转k6 -0.0269993611093679
亚历克斯·沙
2019年9月6日
如果想要所有参数都是正的,结果将会是:
k1 0.757805051886583
k2 0.248942776988651
k3 0.182367452149268
k4 0.462511556999762
k5 0.620286121513934
转k6 0
明星黾这种工作完全完成,我用另一个包上面获得结果,这个结果与Matlab可以用来比较的结果。
接受的答案
明星黾
2016年12月1日
38岁的评论
伊戈尔·莫拉
2016年12月1日
嗨,明星车手,谢谢你的帮助!这两个问题都非常相像,这些技术可能是我在找什么,但我不能得到的代码工作:(我创建了一个动力学。m文件,下面的代码:
函数C =动力学(t,θ)
c0 = [1, 0, 0, 0);
(T, Cv) =数值(@DifEq T c0);
%
函数dC = DifEq (t, c)
dcdt = 0 (4,1);
dcdt(1) =θ(1). * c(1)θ(2). * c (1);
dcdt(2) =θ(1)。* c(1) +θ(4)。* c(3)θ(3). * c(2)θ(5). * c (2);
dcdt(3) =θ(2)。* c(1) +θ(3)。* c(2)θ(4)。* c(3) +θ(6)。* c (4);
dcdt(4) =θ(5)。* c(2)θ(6). * c (4);
dC = dcdt;
结束
C =简历(:1);
结束
然后我叫它使用:
t = [0.1
0.2
0.4
0.6
0.8
1
1.5
2
3
4
5
6);
c = (0.902 - 0.06997 0.02463 - 0.00218
0.8072 0.1353 0.0482 0.008192
0.6757 0.2123 0.0864 0.0289
0.5569 0.2789 0.1063 0.06233
0.4297 0.3292 0.1476 0.09756
0.3774 0.3457 0.1485 0.1255
0.2149 0.3486 0.1821 0.2526
0.141 0.3254 0.194 0.3401
0.04921 0.2445 0.1742 0.5277
0.0178 0.1728 0.1732 0.6323
0.006431 0.1091 0.1137 0.7702
0.002595 0.08301 0.08224 0.835);
theta0 = [1; 1; 1; 1; 1; 1];
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c);
但我得到以下错误:
错误使用odearguments(第83行)
的最后进入tspan必须不同于第一项。
%
错误在数值(第115行)
颂歌,odearguments (FcnHandlesUsed solver_name tspan, y0,选项,变长度输入宗量);
%
错误在动力学(3号线)
(T, Cv) =数值(@DifEq T c0);
%
错误在lsqcurvefit(第202行)
initVals。F =函数宏指令(funfcn_x_xdata {3}, xCurrent, XDATA,变长度输入宗量{:});
%
错误在铜(第26行)
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c);
%
引起的由:
失败在初始目标函数评价。LSQCURVEFIT无法继续。
明星黾
2016年12月4日
我为延迟道歉。早在四年前我处理莫诺动力学问题,我不得不回去记得我做了什么。
有两个问题:
- 你的“动力学”函数的参数变量(在这里“θ”)作为第一个参数,“t”随着第二个;
- 你需要返回所有你的价值观“简历”向量作为“C”因为你是适合所有它们。
我做这些改变,把所有的纠正代码、数据和附加情节调用
“Igor_Moura.m”
文件,所以你可以通过输入运行它
Igor_Moura
在命令窗口。我不会在这里问。在你的编辑器中打开它看到更改和添加的代码。
如果你想回来
“θ”
、浓度和其他变量到工作区,最容易的方法是将它们添加作为输出
“Igor_Moura”
函数。
估计的速率常数
:
率常量:
θ(1)= 0.89197
θ(2)= 0.26069
θ(3)= 0.24870
θ(4)= 0.48183
θ(5)= 0.60977
θ(6)= -0.01301
情节
:
传说中进行适当的修改代码来描述浓度。
汗简
2017年4月3日
你好。我的问题是很多类似的例子。我想把不同的标记每个实验数据列c1 c4(广场、交叉、圆和钻石)。如何把它们?我的第二个问题:有可能限制速率常数的值介于0和0.80使用LSQCURVEFIT函数,如果是怎么做?请指导。
明星黾
2017年4月3日
“如何把它们”
在查看代码
“Igor_Moura.m”
文件附加到我之前的评论。
“有可能限制速率常数的值介于0和0.80使用LSQCURVEFIT函数,如果是怎么做?”
是的。看到的文档
lsqcurvefit
。
Wouter Van Hecke
2017年8月25日
你好,
伟大的文章。
你有一个想法就如何处理不完整数据集?假设在“Igor_Moura矩阵c。m”文件是不完整的,包含了一些未知的“南”的价值观。在这种情况下,lsqcurvefit给了以下错误:
“目标函数返回初始点未定义的值。lsqcurvefit无法继续。“一个选择是删除整行(s)未知值,但没有更好的方法这个问题?
非常感谢你的建议!
最好的问候,Wouter
明星黾
2017年8月25日
的一种选择是删除整行(s)未知值,但没有更好的方法这个问题?”
不,我知道。唯一的其他方法是使用插值,并有
极端的
创建数据的风险,实际上并不存在,尤其是如果数据噪声或改变迅速,使得参数估计实际上一文不值。统计和机器学习的工具箱函数忽略了行
南
值。我会遵守这个约定。
SHUBHAM帕特尔
2019年10月1日
大家好,我有一个非常类似的问题,上面的代码使用明星黾健康。面临的一个问题,我是,我得到负的参数为我不是物理特效问题。
如何限制我的参数只给出积极的价值观。
谢谢你!
明星黾
2019年10月1日
设置
“磅”
(下限)论点
lsqcurvefit
(或其他优化程序,允许有界参数)
0
向量的大小参数向量。
在这段代码中,这将是:
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c、零(大小(theta0)));
↑
Gustavo Lunardon
2020年3月24日
编辑:Gustavo Lunardon
2020年3月24日
有人能告诉我如何做同样的最小化,(相同的数据),但fminsearch吗?我试图适应一段时间的例子,试图通过变量和参数以不同的方式但我继续:
作业有更多比单体下标单体rhs维度
我尝试在附件。
明星黾
2020年3月24日
用这个:
[θ,fval, exitflag] = fminsearch(@(θ)规范(c -动力学(θ,t, c0)), theta0);
和:
Cfit =动力学(θ,电视,c0);
我建议优化初始conidtions,而不是使用固定的初始条件。
达芙妮Deidre黄
2020年8月27日
嗨,明星黾。
我需要解决的方程集非常类似于上面的文件附加“Igor_Moura.m”。但是我在想我该如何实现代码如果我想反应发生在一个温度范围?
或者我需要将实验结果数据在一定的温度让我θ值@温度吗?
亲切的问候,达芙妮
明星黾
2020年8月27日
视情况而定。
如果他们仅仅是温度的函数,而不是时间,然后使用温度作为自变量,相应地调整代码。
如果他们同时是时间和温度的函数,并且都不同,需要一个完全不同的方法,因为系统是偏微分方程之一,不是普通的微分方程。参数将不会标量,但温度的函数。这将是非常困难的。一个选择是解决这些关于时间在每个温度(在一个循环中)常微分方程,然后使用适当的参数估计技术来描述每个参数作为温度的函数。(可能是我将使用的方法,至少在一开始,以确定是否合适。)
明星黾
2020年12月7日
安娜ramirez de las heras
的答案搬到这里
嗨明星黾,
我需要知道c()值来使用这个方法吗?我有一个类似的问题,我有运动的数据声明但不知道的值θ()我不知道如何获得c()值……
提前谢谢你!
明星黾
2020年12月7日
安娜ramirez de las赫拉-
为了估计参数
“c”
与之相关的数据(包括时间向量)必须存在于工作区。我的答案估计动力学参数的代码
“θ”
矢量数据,所以没有必要提前了解他们,然而近似估计的振幅是必要的,因为参数估计例程需要一个初始的估计参数。
如果你已经有参数和仅仅是模拟系统,
“c”
值是没有必要的。
如果这个评论没有解决你的问题,请与更详细地发布一个新的问题,你从你想要的结果。
安娜ramirez de las heras
2020年12月7日
谢谢你的回答,明星。我已经发布了一个新的问题:https://es.mathworks.com/matlabcentral/answers/685053-ode-system-solution-with-unknown-constant
亚辛伊斯兰教
2021年1月18日
嗨明星黾,
谢谢你有用的解决问题!我改编的代码适合6 diff. eq.和12 k值。它的工作原理。
不幸的是,我不仅有未知的k值还未知浓度。
这个问题在我的例子中延伸和18 18浓度微分方程(我知道时间概念集中值6人)
我如何更新的代码不仅寻找我对未知浓度的k值,还为了代表实验浓度最好?虽然很多未知的浓度等于0和/或可忽略不计的。
明星黾
2021年1月18日
亚辛伊斯兰教,
你可以很明显只适合浓度数据。如果其他
12
浓度(实际上,微分方程描述)可以表示的参数('
k
值”)
可以
估计,仅仅
模拟
他们在
“动力学”
函数使用的参数和阴谋。
如果其他
12
微分方程涉及参数c
annot
从参数估计(或不能获得
可以
估计),那么你不能模拟。没有办法在那个不幸的情况。
明星黾
2021年2月2日
如果heon Seong -
的
lsqcurvefit
和许多其他优化函数允许参数约束,至少设置上下参数范围。使用这些参数。
在这里,这将是:
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c、零(大小(theta0)));
与
0
调用设置下限。(这里没有设置上限,因为没有必要)。
明星黾
2021年2月4日
如果heon Seong -
你只能适应
“c1”
和
c2的
你的数据,所以在
“动力学”
:
C =简历(:,1:2);
(假设
“c1”
和
c2的
是第一个
2
在你的系统微分方程)。
必须要有更多的数据(更多
行
在数据矩阵和向量)比
参数
来估计。
我的荣幸!
Khoi Ly
2021年2月21日
编辑:Khoi Ly
2021年2月21日
我在另一篇文章由你的回答类似的问题。
在这篇文章中,我试图估计的参数微分方程使用多个时间序列数据集。
在上面的示例中,。
t = (0.1;0.2;0.4;0.6;0.8;1;1.5;2;3;4; 5; 6];
c = (0.902 - 0.06997 0.02463 - 0.00218
0.8072 0.1353 0.0482 0.008192
0.6757 0.2123 0.0864 0.0289
0.5569 0.2789 0.1063 0.06233
0.4297 0.3292 0.1476 0.09756
0.3774 0.3457 0.1485 0.1255
0.2149 0.3486 0.1821 0.2526
0.141 0.3254 0.194 0.3401
0.04921 0.2445 0.1742 0.5277
0.0178 0.1728 0.1732 0.6323
0.006431 0.1091 0.1137 0.7702
0.002595 0.08301 0.08224 0.835);
我们可以估计的参数θ。从上面的示例只使用一个数据集,我该怎么做如果我有多个数据集?我可以只连接时间序列数据集在一起并运行lsqcurvefit像往常一样吗?
同时,在我的问题,每个不同的时间序列数据集包含一个不同的初始值。我怎么修改示例允许不同的初始值取决于所选的时间序列数据集?
谢谢你!
明星黾
2022年9月22日
更新
稍微修改代码和一些美学调整现在的线条和标记颜色匹配
t = [0.1
0.2
0.4
0.6
0.8
1
1.5
2
3
4
5
6);
c = (0.902 - 0.06997 0.02463 - 0.00218
0.8072 0.1353 0.0482 0.008192
0.6757 0.2123 0.0864 0.0289
0.5569 0.2789 0.1063 0.06233
0.4297 0.3292 0.1476 0.09756
0.3774 0.3457 0.1485 0.1255
0.2149 0.3486 0.1821 0.2526
0.141 0.3254 0.194 0.3401
0.04921 0.2445 0.1742 0.5277
0.0178 0.1728 0.1732 0.6323
0.006431 0.1091 0.1137 0.7702
0.002595 0.08301 0.08224 0.835);
theta0 =兰德(10,1);
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c、零(大小(theta0)));
局部最小值。优化完成因为梯度的大小小于最优值的宽容。
流(1,“\物常量:\ n”)
速率常数:
为k1 = 1:长度(θ)
流(1,' \ t \ tTheta (% 2 d) = % 8.5 f \ n ',k1,θ(k1))
结束
θ(1)= 0.76483θ(2)θ= 0.23492(3)θ= 0.20878(4)θ= 0.49179(5)θ= 0.62211θ(6)= 0.00000(7)θ= 0.90288(8)= 0.07146θ(9)= 0.02840θ(10)= 0.00000
电视= linspace (min (t)、马克斯(t));
Cfit =动力学(θ,电视);
图
高清=情节(t、c、“p”);
为k1 = 1:尺寸(c, 2)
简历(k1,:) =高清(k1) .Color;
高清(k1)。:MarkerFaceColor =简历(k1);
结束
持有在
hlp =情节(电视、Cfit);
为k1 = 1:尺寸(c, 2)
hlp (k1)。:颜色=简历(k1);
结束
持有从
网格
包含(“时间”)
ylabel (“浓度”)
传奇(hlp组成(“C_ % d '1:尺寸(c, 2)),“位置”,“最佳”)
函数C =动力学(θ,t)
c0 =θ(end-3:结束);
(T, Cv) =数值(@DifEq T c0);
%
函数dC = DifEq (t, c)
dcdt = 0 (4,1);
dcdt(1) =θ(1). * c(1)θ(2). * c (1);
dcdt(2) =θ(1)。* c(1) +θ(4)。* c(3)θ(3). * c(2)θ(5). * c (2);
dcdt(3) =θ(2)。* c(1) +θ(3)。* c(2)θ(4)。* c(3) +θ(6)。* c (4);
dcdt(4) =θ(5)。* c(2)θ(6). * c (4);
dC = dcdt;
结束
C =简历;
结束
。
Maria Teresa Aguirrezabala Campano
2023年1月26日
1月
2023年1月26日
@Maria Teresa Aguirrezabala Campano
:想象一下,如果所有用户宣传他们的问题和要求特定的成员回答。这些成员将杂乱的信息,他们会找到更少的时间来回答问题。请考虑这一点。
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。