欧拉算法与改进的欧拉算法实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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-')
可见,改进后的欧拉算法误差更小,极其精确,基本与原曲线重合。