数值积分与数值微分.docx

上传人:b****8 文档编号:9824483 上传时间:2023-05-21 格式:DOCX 页数:20 大小:93.94KB
下载 相关 举报
数值积分与数值微分.docx_第1页
第1页 / 共20页
数值积分与数值微分.docx_第2页
第2页 / 共20页
数值积分与数值微分.docx_第3页
第3页 / 共20页
数值积分与数值微分.docx_第4页
第4页 / 共20页
数值积分与数值微分.docx_第5页
第5页 / 共20页
数值积分与数值微分.docx_第6页
第6页 / 共20页
数值积分与数值微分.docx_第7页
第7页 / 共20页
数值积分与数值微分.docx_第8页
第8页 / 共20页
数值积分与数值微分.docx_第9页
第9页 / 共20页
数值积分与数值微分.docx_第10页
第10页 / 共20页
数值积分与数值微分.docx_第11页
第11页 / 共20页
数值积分与数值微分.docx_第12页
第12页 / 共20页
数值积分与数值微分.docx_第13页
第13页 / 共20页
数值积分与数值微分.docx_第14页
第14页 / 共20页
数值积分与数值微分.docx_第15页
第15页 / 共20页
数值积分与数值微分.docx_第16页
第16页 / 共20页
数值积分与数值微分.docx_第17页
第17页 / 共20页
数值积分与数值微分.docx_第18页
第18页 / 共20页
数值积分与数值微分.docx_第19页
第19页 / 共20页
数值积分与数值微分.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值积分与数值微分.docx

《数值积分与数值微分.docx》由会员分享,可在线阅读,更多相关《数值积分与数值微分.docx(20页珍藏版)》请在冰点文库上搜索。

数值积分与数值微分.docx

数值积分与数值微分

8数值积分与数值微分

8.1例题解答

例8.1给定积分

分别用梯形公式、

公式、

公式作近似计算.

解:

先输入主要初始参数

>>a=0.5;

>>b=1;

>>f=inline('x^(1/2)');

%梯形公式

>>I1=(b-a)/2*(feval(f,a)+feval(f,b))

I1=

0.426776695296637

%simpson公式

>>I2=(b-a)/6*(feval(f,a)+4*feval(f,(a+b)/2)+feval(f,b))

I2=

0.430934033027025

%Cotes公式(n=4)

>>tc=0;

>>C0=[73212327];

>>fori=0:

4

tc=tc+C0(i+1)*feval(f,a+i*(b-a)/4);

end

>>I3=(b-a)/90*tc

I3=

0.430964070495876

%准确值

>>I=int(char(f),a,b)

>>vpa(I)

I=

-1/6*2^(1/2)+2/3

ans=

0.43096440627115082519971854596505

例8.2对积分

为使其精度达到

.

若用复化梯形公式,应将[0,1]多少等分?

若用复化

公式,应将[0,1]多少等分?

解:

直接按余项计算即可.

复化梯形公式的余项为:

复化

公式余项为:

对于

在课本中我们已证得以下不等式成立:

直接利用上述不等式关系解答本题.

先输入误差精度:

>>Eps=1E-4

Eps=

1.000000000000000e-004

(1)复化梯形公式

>>h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1)))%先求出步长

h1=

0.060000000000000

>>N1=ceil(1/h1)%向上取整,得到等分区间数

N1=

17

故可将区间17等分即可达到所要求的精度.

(2)复化

公式

>>h2=power(Eps/abs(-(1-0)/180*1/(1+4)),1/4)%先求出步长

h2=

0.547722557505166

>>N2=ceil(1/h2)%向上取整,得到等分区间数

N2=

2

故可将区间2等分即可达到所要求的精度.

Ø扩展:

1)Matlab中复化梯形公式命令为I=trapz(x,y),复化

公式命令为quad().

2)Matlab中有四个取整函数,分别为ceil(),floor(),fix(),round(),分别表示向正无穷大方向取整、向负无穷大方向取整、向靠近零方向舍入和四舍五入.

例8.3对积分

利用变步长方法求其近似值,使其精度达到

.

解:

利用变步长法前先建立三种变步长复化积分公式的函数.注意在Matlab中直接用sin(0)/0得不到1,

,因此解此题时我们改用求极限的方法得到函数值,此函数名为limit().

先建立三种复化公式的函数文件,它们分别为复化梯形公式trap.m、复化

公式为simpson.m、

公式为cotes.m,三个函数的源程序如下:

(1)复化梯形公式trap.m

functionT=trap(f,a,b,n)

%trap.m

%复化梯形公式求积分值

%f为积分函数

%[a,b]为积分区间

%n是等分区间份数

h=(b-a)/n;%步长

T=0;

fork=1:

(n-1)

x0=a+h*k;

T=T+limit(f,x0);

end

T=h*(limit(f,a)+limit(f,b))/2+h*T;

T=double(T);

(2)复化

公式simpson.m:

functionS=simpson(f,a,b,n)

%simpson.m

%Simpson公式求积分值

%f为积分函数

%[a,b]为积分区间

%n是等分区间份数

h=(b-a)/(2*n);%步长

s1=0;

s2=0;

fork=1:

n

x0=a+h*(2*k-1);

s1=s1+limit(f,x0);

end

fork=1:

(n-1)

x0=a+h*2*k;

s2=s2+limit(f,x0);

end

S=h*(limit(f,a)+limit(f,b)+4*s1+2*s2)/3;

S=double(S);

(3)复化

公式cotes.m:

functionC=cote(f,a,b,n)

%cote.m

%复化cotes公式求积分值

%f为积分函数

%[a,b]为积分区间

%n是等分区间份数

h=(b-a)/n;%步长

C=0;

fori=1:

(n-1)

x0=a+i*h;

C=C+14*limit(f,x0);

end

fork=0:

(n-1)

x0=a+h*k;

s=32*limit(f,x0+h*1/4)+12*limit(f,x0+h*1/2)+32*limit(f,x0+h*3/4);

C=C+s;

end

C=C+7*(limit(f,a)+limit(f,b));

C=C*h/90;

C=double(C);

再编写主程序调用这三个函数,主程序名为ex8_3.m,源程序如下:

%ex8_3.m

clc;

symsx;

f=sym('sin(x)/x');

a=0;b=1;%积分上下限

n=20;%作1,2,3,…,20次区间等分

%复化梯形公式

T=zeros(n,1);

fori=1:

n

T(i)=trap(f,a,b,i);

end

%复化Simpson公式;

S=zeros(n,1);

fori=1:

n

S(i)=simpson(f,a,b,i);

end

%复化Cotes公式

C=zeros(n,1);

fori=1:

n

C(i)=cote(f,a,b,i);

end

%准确值

I=int(f,a,b);

I=double(I);

%画图作出直观观察

x=[];

x=1:

n;

figure;

plot(x,ones(1,n)*I,'-');

holdon;

plot(x,T','r--','LineWidth',2);

plot(x,S','m.-','LineWidth',1);

plot(x,C','c:

','LineWidth',1.5);

gridon;

title('三种复化公式积分效果对比图');

legend('准确值曲线','复化梯形公式','复化Simpson公式','复化Cotes公式');

holdoff;

disp('复化梯形公式复化Simpson公式复化Cotes公式');

disp([TSC]);

在Matlab命令窗口中输入ex8_3,得到如下积分结果:

复化梯形公式复化Simpson公式复化Cotes公式

0.9207354924039480.9461458822735870.946083004063674

0.9397932848061770.9460869339517940.946083069350917

0.9432914291323370.9460838313116990.946083070278278

0.9445135216653900.9460833108884720.946083070351379

0.9450787809534020.9460831688380730.946083070363043

0.9453857307668590.9460831178428670.946083070365797

0.9455707762562460.9460830959894030.946083070366633

0.9456908635827010.9460830853849480.946083070366936

0.9457731885497520.9460830797420530.946083070367061

0.9458320718669050.9460830765177320.946083070367118

0.9458756371191980.9460830745679370.946083070367147

0.9459087710738650.9460830733331140.946083070367161

0.9459345564884750.9460830725204760.946083070367170

0.9459550160561140.9460830719680570.946083070367174

0.9459715215529850.9460830715819640.946083070367177

0.9459850299343860.9460830713055620.946083070367179

0.9459962252423760.9460830711034890.946083070367180

0.9460056069439780.9460830709529980.946083070367181

0.9460135466239660.9460830708390650.946083070367182

0.9460203253550250.9460830707515320.946083070367182

由以上结果可看到复化梯形公式有一个上升接近准确值过程,而复化

公式积分结果和复化

公式积分的结果基本上和准确值的曲线重叠在一块,可见它们的精度是相当高的.

例8.4用

积分法计算

精度

.

解:

编写

积分法的函数M文件,源程序如下(romberg.m):

function[I,T]=romberg(f,a,b,n,Eps)

%Romberg积分计算

%f为积分函数

%[a,b]为积分区间

%n+1是T数表的列数目

%Eps为迭代精度

%返回值中I为积分结果,T是积分表

ifnargin<5

Eps=1E-6;

end

m=1;

h=(b-a);

err=1;

j=0;

T=zeros(4,4);

T(1,1)=h*(limit(f,a)+limit(f,b))/2;

while((err>Eps)&(j

j=j+1;

h=h/2;

s=0;

forp=1:

m

x0=a+h*(2*p-1);

s=s+limit(f,x0);

end

T(j+1,1)=T(j,1)/2+h*s;

m=2*m;

fork=1:

j

T(j+1,k+1)=T(j+1,k)+(T(j+1,k)-T(j,k))/(4^k-1);

end

err=abs(T(j,j)-T(j+1,k+1));

end

I=T(j+1,j+1);

ifnargout==1

T=[];

end

将上述源程序另存为romberg.m后,进入计算:

>>symsx;%创建符号变量

>>f=sym('sin(x)/x')%符号函数

f=

sin(x)/x

>>[I,T]=romberg(f,0,1,3,1E-6)%积分计算

I=

0.9461

T=

0.92070000

0.93980.9461000

0.94450.94610.946100

0.94570.94610.94610.94610

0.94600.94610.94610.94610.9461

其中T为

积分表,由输出结果可知计算结果为

.

例8.5利用

积分法求

.

解:

直接利用例8.4的函数即可.

>>symsx;

>>f=sym('4/(1+x^2)')

f=

4/(1+x^2)

>>[I,T]=romberg(f,0,1,5,1E-6)

I=

3.1416

T=

3.000000000

3.10003.13330000

3.13123.14163.1421000

3.13903.14163.14163.141600

3.14093.14163.14163.14163.14160

3.14143.14163.14163.14163.14163.1416

故结果为

.

例8.6对积分

构造其

型求积公式.

解:

得到方程组:

这是一个抽象方程组,可以利用Matlab的符号法来解之,该函数名为solve():

%直接输入解之:

>>x=solve('A0+A1=2','A0*x0+A1*x1=0','A0*x0^2+A1*x1^2=2/3','A0*x0^3+A1*x1^3=0','A0,A1,x0,x1')

x=

A0:

[2x1sym]

A1:

[2x1sym]

x0:

[2x1sym]

x1:

[2x1sym]

%显示结果

>>x.A0,x.A1,x.x0,x.x1

ans=

1

1

ans=

1

1

ans=

1/3*3^(1/2)

-1/3*3^(1/2)

ans=

-1/3*3^(1/2)

1/3*3^(1/2)

因此得到两组解为:

或:

求积公式为

例8.7分别利用

公式及

公式计算积分:

解:

(1)先计算准确值:

>>I=int('(x+1.5)^(1/2)',-1,1)

I=

2.3995291230781336018654631663256

(2)两点

公式:

由课本表中查得两点

公式的求积系数为1,求积节点为

>>f=inline('(x+1.5)^(1/2)')

f=

Inlinefunction:

f(x)=(x+1.5)^(1/2)

>>I1=1*feval(f,-0.57735)+1*feval(f,0.57735)

I1=

2.401848214499055

(3)两个节点梯形公式:

>>f=inline('(x+1.5)^(1/2)')

>>a=-1;%求积区间

>>b=1;

>>I2=(b-a)/2*(feval(f,a)+feval(f,b))%两点梯形公式

f=

Inlinefunction:

f(x)=(x+1.5)^(1/2)

I2=

2.288245611270737

(4)三点

公式:

查表有

:

>>f=inline('(x+1.5)^(1/2)')

>>x=[0.7745966692,-0.7745966692,0]%节点系数

>>A=[0.555555556,0.555555556,0.888888889]%求积系数

>>I3=0;

>>fori=1:

length(x)

I3=I3+feval(f,x(i))*A(i);%三点Gauss-Legendre公式

end

>>I3%显示结果

f=

Inlinefunction:

f(x)=(x+1.5)^(1/2)

x=

0.774596669200000-0.7745966692000000

A=

0.5555555560000000.5555555560000000.888888889000000

I3=

2.399708072133707

(5)三个节点

公式:

>>f=inline('(x+1.5)^(1/2)')

>>a=-1;%积分区间

>>b=1;

>>x=[a,(a+b)/2,b]%积分节点

>>A=[141]%积分节点系数

>>I4=0;

>>fori=1:

length(x)

I4=I4+feval(f,x(i))*A(i);%三点Simpson公式

end

>>I4=I4*(b-a)/6%显示计算结果

f=

Inlinefunction:

f(x)=(x+1.5)^(1/2)

x=

-101

A=

141

I4=

2.395741698945698

例8.8利用

求积公式求积分

.(准确值为1.)

解:

先作变换,将积分区间变换到

上,令

则有:

于是就可以利用

求积公式来解题.

(1)两点

求积公式:

>>f=inline('sin(pi*(t+1)/4)')

f=

Inlinefunction:

f(t)=sin(pi*(t+1)/4)

>>I1=1*feval(f,-0.57735)+1*feval(f,0.57735);

>>I1=I1*pi/4

I1=

0.998472716275797

(2)三点

求积公式:

>>f=inline('sin(pi*(t+1)/4)')

f=

Inlinefunction:

f(t)=sin(pi*(t+1)/4)

>>x=[0.7745966692,-0.7745966692,0]%节点系数

x=

0.774596669200000-0.7745966692000000

>>A=[0.555555556,0.555555556,0.888888889]%求积系数

A=

0.5555555560000000.5555555560000000.888888889000000

>>I2=0;

>>fori=1:

length(x)

I2=I2+feval(f,x(i))*pi/4*A(i);

end

>>I2

I2=

1.000008122033779

例8.9计算积分

精度要求

.

解:

先利用余项来估计误差精度,再进行计算即可.

这里利用

求积公式余项作误差估计.

余项为:

对右边进行放大得到:

%先搜索满足上述不等式的项数n

>>i=1;

>>E=pi*exp

(1)/(power(2,2*i+1)*factorial(2*i+2));

>>whileE>1E-6

i=i+1;

E=pi*exp

(1)/(power(2,2*i+1)*factorial(2*i+2));

end

>>i,E%显示结果

i=

4

E=

4.596331680902589e-009

可见只要计算前4项即可.

>>f=inline('exp(x)')

f=

Inlinefunction:

f(x)=exp(x)

>>n=i;

>>I=0;

>>forj=0:

n

x=cos(pi*(2*j+1)/(2*n+2));

I=I+feval(f,x);

end

>>I=I*pi/(n+1)

I=

3.977463258776695

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2