数据拟合系统的常微分方程——multistart ?

4视图(30天)
马特Bilyard
马特Bilyard 2019年6月18日
编辑: 1月 2019年6月25日
你好,
我在化学生物学研究者最近开始使用Matlab——因此,我非常业余!这也是我的第一篇文章在这里所以我道歉如果任何格式等失败等等,请让我知道。
我有一个速率方程组,常微分方程,该模型转换它的各种氧化代谢物的衍生品。我想适应这些常微分方程来得到实验数据值7未知的速率常数,“k (1) k (7)”,在每一个方程(实际上,半定量,即近似相对大小很好)。
到目前为止我一直在使用lsqcurvefit要做到这一点,但价值观和适合我在很大程度上取决于初始值我选择的速率常数k (1) k(7),可能存在多个局部最小值。我复制下面的代码。最低量级的配合也不是好的数据(虽然这可能是模型本身,当然),请看附呈的图片一个例子。
我听说我可能使用multistart或globalsearch为了改善这种情况,即找到一个全局最小值。然而,尽管广泛的阅读,包括各种教程,实际上我真的困如何这样做对于这个相当复杂的系统!
我想知道如果任何人都可以:
  1. 让我知道如果这是正确的,也许这multistart和globalsearch我可能是最好的开始吗?
  2. 告诉我正确的方向我如何开始建立multistart或globalsearch这个系统,基于lsqcurvefit配件下面的代码?我更乐意独立找出事情,但推动沿着正确的路线开始我将非常感激给我的总在这方面缺乏经验。
非常感谢,
马特
代码lsqcurvefit拟合过程(包括数据):
函数cytosinefitcell
函数C =动力学(k, t)
c0 = [95.8989; 0, 0, 0, 0);
(T, Cv) =数值(@DifEq T c0);
函数dC = DifEq (t, c)
dcdt = 0 (5、1);
dcdt (1) = - k (1)。* c (1) + k (5)。* c (4) + k (6)。* c (5) + k (7)。* (c c (2) + (3) + (4) + c (5));
dcdt (2) = k (1)。* c (1) c - k (2) . * (2) - k (7)。* c (2);
dcdt (3) = k (2)。* c (2) c - k (3) . * (3) - k (7)。* c (3);
dcdt (3) (4) = k。c (3) - k (4) *。* c (4) - k (5)。* c (4) - k (7)。* c (4);
dcdt (5) = k (4)。* c (4) - k c (5) (6) . * - k (7)。* c (5);
dcdt (1) = 0;
dC = dcdt;
% dcdt(1) = 0,定义这个变量是常数,即稳定状态。
结束
C =简历;
结束
% t的数据
t = [0
1
2
3
4
5
6
7
8
9
10
24
48
96年
144年
192年
240年
288年
336年
384年
432);
% c (1) c数据(5)
c = [95.8989 0 0 0 0
95.8989 0.116654171 0.000169089 0 0
95.8989 0.221311714 0.000215784 0 0
95.8989 0.361815956 0.001337332 0 0
95.8989 0.443043182 0.001897635 0 0
95.8989 0.511783075 0.002904908 2.59348 e-06 0
95.8989 0.596086415 0.003847949 2.08165 e-05 0
95.8989 0.70422927 0.004991988 3.23739 e-05 0
95.8989 0.736165548 0.005402772 4.12232 e-05 0
95.8989 0.863634039 0.006882534 4.66973 e-05 0
95.8989 0.961691531 0.007922809 7.91253 e-05 0
95.8989 1.694849679 0.02488041 0.000229454 3.88541 e-05
95.8989 2.156329216 0.046290117 0.000455848 2.44297 e-05
95.8989 2.28066375 0.058965709 0.000529312 5.23961 e-05
95.8989 2.263872217 0.060281286 0.000604404 5.68658 e-05
95.8989 2.280749095 0.059985812 0.000559687 6.81934 e-05
95.8989 2.250775532 0.059775064 0.00057279 6.40691 e-05
95.8989 2.248860841 0.059972783 0.000589628 5.50697 e-05
95.8989 2.28310359 0.059096809 0.000519199 5.7434 e-05
95.8989 2.324286746 0.058745232 0.000550764 5.6446 e-05
95.8989 2.298780141 0.059541016 0.000556106 6.05984 e-05];
%初始猜测k -任意设置为0 k(7)除外
%范围。每个“k”是一个“k_obs”。
k0 = [0, 0, 0, 0, 0, 0; 0.04);
[k, Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics k0 t c (0.0001; 0.0001; 0.0001; 0.0001; 0.0001; 0.0001; 0.04], [100; 100; 100; 100; 100; 100; 0.07));
%是任意的上下界,以避免或0(或消极的)值
%值偏高。例外是k(7),其范围。
%绘制图
流(1,“\物常量:\ n”)
k1 = 1:7
流(1,' \ t \ tk (% d) = % 8.5 f \ n ',k1, k (k1))
结束
电视= linspace (min (t)、马克斯(t));
Cfit =动力学(k,电视);
图(1)
情节(t、c、“p”)
持有
hlp =情节(电视、Cfit);
持有
网格
包含(“时间”)
ylabel (“浓度”)
传奇(hlp“mC”,hmC的,“俱乐部”,“caC”,“位置”,“不”)
结束

接受的答案

玛丽费内龙
玛丽费内龙 2019年6月19日
例子 应该让你开始。可以找到解决如何工作的信息 在这里 。设置都是相似的,所以你可以很容易地尝试。
1评论
马特Bilyard
马特Bilyard 2019年6月21日
非常感谢你指出我在这个方向,我花了一段时间的工作如何适应这个特定的问题,但我想现在我得到的地方。(这是非常一个编外项目为我与一个不相关的主要项目,因此进展缓慢!)。

登录置评。

更多的答案(0)

社区寻宝

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

开始狩猎!