欧拉算法与改进的欧拉算法实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目再现:

2. 当病人采取服用口服药或肌肉注射来治疗疾病时,药物虽然瞬间进入了体内,但它一般都集中与身体的某一部位,靠其表面与肌体接触而逐步被吸收。假定身体系统是一个单房室系统,设t 时刻体内药物的总量为x(t),则x(t)满足:

问题分析:运用欧拉公式求微分方程的数值解。微分方程为:

11dx ,(0)0dt

k t k De kx x -=-= 1,欧拉折线法:

设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:

clear

f=sym('0.6*200*exp(-1*0.6*t)-0.2*x ');

a=0; b=20;

h=0.1;

n=(b-a)/h+1;

t=0; x=0;

szj=[t,x];

for i=1:n-1

11dx ,(0)0

dt k t k De kx x -=-=10011100 ,(,)()k t k k k k k k k

t x x x h f t x x h k De kx t t h -++==⎧⎪=+=+-⎨⎪=+⎩

x=x+h*subs(f,{'t','x'},{t,x});

t=t+h;

szj=[szj;t,x];

end

szj ;

x=dsolve(‘Dx=120*exp(-0.6*t)-0.2*x’,'x(0)=0','t')

T=[0:0.1:20];

X=subs(x,T);

plot(szj(:,1),szj(:,2),'or-',T,X,’b-’)

输出结果为:

解析解:x=

其中红线代表的是数值解,蓝线代表的是解析解。可见,数值解的误差还是比较小的。

二、改进的欧拉法:有公式:

[]11100(,)(,)2

()i i i i i i h x x f t x f t x x x t +++=+

+= 与欧拉公式结合使用,有

(0)1(1)

()111(,)

[(,)(,)],0,1,2 (2)

i i i i k k i i i i i i x x hf t x h x x f t x f t x k +++++=+=++= 设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:

clear

f=sym('0.6*200*exp(-1*0.6*t)-0.2*x');

a=0; b=20;

h=0.1;

n=(b-a)/h+1;

t=0; x=0;

szj=[t,x];

for i=1:n-1

m=0;p=0;q=0;

m=x;

q=subs(f,{'t','x'},{t,m});

x=m+h*q;

if abs(p-x)>0.1

p=x;

x= m+h/2*(q+subs(f,{'t','x'},{t+h,x}));

end

t=t+h;

szj=[szj;t,x];

end

szj ;

x=dsolve('Dx=120*exp(-0.6*t)-0.2*x', 'x(0)=0','t')

T=[0:0.1:20];

X=subs(x,T);

plot(szj(:,1),szj(:,2),'or-',T,X,'b-')

可见,改进后的欧拉算法误差更小,极其精确,基本与原曲线重合。

相关文档
最新文档