matlab中使用ode45的微分方程组

时间:2016-05-26 07:46:32

标签: matlab ode45

我有这个葡萄糖和胰岛素模型,以及微分方程系统:

system of differential equations

其中:

G(t) - 时间t的血浆葡萄糖浓度 I(t) - 时间t的血浆胰岛素浓度 X(t) - 时间t的间质胰岛素 Gb - 基础血浆葡萄糖浓度
Ib - 基础血浆胰岛素浓度

描述模型。我必须在matlab中使用ode45做一个估算参数的算法。

测试数据如下:

Test data screenshot

我不确定ode45的写函数如何,我的想法如下:

function [] = cwiczenie3_1a(dane)
a=size(dane);
u=[];
y=[];
for i=1:a(1,1)
  g(i,1)=dane(i,2);
  j(i,1)=dane(i,3);
end
[x t]=ode45(@funkcjajeden,[0 100],[0,0]) 
end

function [dg] = funkcjajeden(t,g)
gb=350;
d=0.1;
ib=120;
k1=1;
k2=2;
k3=1;
dg=zeros(size(g));
dg(1)=(k1*(gb-g(1)))-d*g(1);
dg(2)=(k2*(g(2)-ib))-k3*d;
end

1 个答案:

答案 0 :(得分:3)

看一下the documentation for ode45来解决微分方程组,你应该在一个文件中编写函数,在这种情况下odefcn.m

function dg = odefcn(g,k1,k2,k3,gb,ib,d)

  dg = zeros(size(g));
  dg(1) = k1*(gb-g(1)) - d*g(1);
  dg(2) = k2*(g(2)-ib) - k3*d;

然后在另一个文件中,你可以通过以下方式解决它:

gb = 350;
d = 0.1;
ib = 120;
k1 = 1;
k2 = 2;
k3 = 1;

tspan = [0 100];
g0 = [0 0];
[t,g] = ode45(@(t,g) odefcn(g,k1,k2,k3,gb,ib,d), tspan, g0);

plot(t,g(:,1),t,g(:,2))

通过这种方式,您可以获得初始值和参数G(t)I(t)的值:

Image

然后,您可以与测试数据进行比较并找到参数的值。