- 27
- 0
- 约4.28千字
- 约 15页
- 2017-06-04 发布于浙江
- 举报
自动化学院
电气2班
蒋志涛
3012203209
上机:
1.解:
程序框图:
程序:
1.f.m
function fx=f(x)
if x==0
fx=1;
else
fx=(1+3*x^2)/(1+x^2+2*x^3+5*x^4);
end
end
2.lbg.m
function lbg(fx,a,b,k,e)
T=zeros(k,k);
T(1,1)=(b-a)*(1+fx(b))/2;
for i=1:k
m=0;
for j=1:2^(i-1)
m=m+fx(a+(2*j-1)*(b-a)/(2^i));
end
T(i+1,1)=0.5*T(i,1)+(b-a)*m/2^i;
for n=1:i
T(i+1,n+1)=(4^n*T(i+1,n)-T(i,n))/(4^n-1);
end
if abs(T(i+1,i+1)-T(i,i))=e i=4
break;
else
end
end
for i=1:k
if T(i,1)==0
j=1;
break;
else
end
end
if j==k
error(所求次数不够或不可积)
else
end
disp(所求的积分值为:)
disp(T(j+1,1))
将f.m和lbg,m保存在工作路径中(set path)
在程序框中输入:
clc
clear all;
format long
a=input(请输入你要求的积分的下限:);
b=input(请输入你要求的积分的上限:);
e=input(请输入你要求的积分的结束精度:);
k=input(请输入你要求的积分的最大次数:);
fx=@(x)(1+3*x^2)/(1+x^2+2*x^3+5*x^4);
lbg(@f,a,b,k,e)
按照指令依次输入参数后得到:
2.解:
龙格-库塔法(Runge-Kutta)
龙格-库塔法(Runge-Kutta)?数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。经典四阶龙格库塔法
龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。
令初值问题表述如下。
则,对于该问题的RK4由如下方程给出:
其中
这样,下一个值(yn+1)由现在的值(yn)加上时间间隔(h)和一个估算的斜率的乘积决定。该斜率是以下斜率的加权平均:
k1是时间段开始时的斜率;
k2是时间段中点的斜率,通过欧拉法采用斜率k1来决定y在点tn?+?h/2的值;
k3也是中点的斜率,但是这次采用斜率k2决定y值;
k4是时间段终点的斜率,其y值用k3决定。
当四个斜率取平均时,中点的斜率有更大的权值:
RK4法是四阶方法,也就是说每步的误差是h5阶,而总积累误差为h4阶。
注意上述公式对于标量或者向量函数(y可以是向量)都适用。
显式龙格库塔法
显示龙格-库塔法是上述RK4法的一个推广。它由下式给出
其中
(注意:上述方程在不同著述中由不同但却等价的定义)。
要给定一个特定的方法,必须提供整数s?(阶段数),以及系数?aij?(对于1 ≤?j??i?≤?s),?bi?(对于i?= 1, 2, ...,?s)和ci?(对于i?= 2, 3, ...,?s)。这些数据通常排列在一个助记工具中,称为龙格库塔表:
0?c2?a21?c3?a31?a32????cs?as1?as2??as,s?? 1?b1?b2??bs?? 1?bs
龙格库塔法是自洽的,如果
如果要求方法有精度p则还有相应的条件,也就是要求舍入误差为O(hp+1)时的条件。这些可以从舍入误差本身的定义中导出。例如,一个2阶精度的2段方法要求b1?+?b2?= 1,?b2c2?= 1/2, 以及b2a21?= 1/2。
调用程序自有的ode45函数求解:
function theta=R(t,X)
x=X(1);
dx=X(2);
ddx=-0.98*sin(x);
theta=[dx;ddx];
end
将上述M文件保存在工作路径中(set path);
程序框中输入:
[t,Y]=ode45(@R,[0 10],[pi/4 0]);
plot(t,Y(:,1),ro-,t,Y(:,2),bv-);
legend(\theta-t,d\theta-t)
自编龙格-库塔法程序:
M文件:
function [y,z]=Runge_kutta(a,b,y0,z0,h)
x=
原创力文档

文档评论(0)