数值分析上机题目

  • 格式:docx
  • 大小:338.00 KB
  • 文档页数:16

数值分析上机题目4(总21页)

--本页仅作为文档封面,使用时请直接删除即可--

--内页可以根据需求调整合适字体及大小-- 实验一

实验项目:共轭梯度法求解对称正定的线性方程组

实验内容:用共轭梯度法求解下面方程组

(1) 123421003131020141100155xxxx

迭代20次或满足()(1)1110kkxx时停止计算。

编制程序:储存m文件

function [x,k]=CGmethod(A,b)

n=length(A);x=2*ones(n,1);r=b-A*x;rho=r'*r;

k=0;

while rho>10^(-11) & k<1000

k=k+1;

if k==1

p=r;

else

beta=rho/rho1;

p=r+beta*p;

end

w=A*p;

alpha=rho/(p'*w);

x=x+alpha*p;

r=r-alpha*w;

rho1=rho;

rho=r'*r;

end

运行程序:

clear,clc

A=[2 -1 0 0;-1 3 -1 0;0 -1 4 -1;0 0 -1 5];

b=[3 -2 1 5]';

[x,k]=CGmethod(A,b)

运行结果:

x =

(2) Axb,A是1000阶的Hilbert矩阵或如下的三对角矩阵,

A[i,i]=4,A[i,i-1]=A[i-1,i]=-1,i=2,3,..,n

b[1]=3, b[n]=3, b[i]=2,i=2,3,…,n-1 迭代10000次或满足()()710kkrbAx时停止计算。

编制程序:储存m文件

function [x,k]=CGmethod_1(A,b)

n=length(A);x(1:n,1)=0;r=b-A*x;r1=r;

k=0;

while norm(r1,1)>10^(-7)&k<10^4

k=k+1;

if k==1

p=r;

else

beta=(r1'*r1)/(r'*r);p=r1+beta*p;

end

r=r1;

w=A*p;

alpha=(r'*r)/(p'*w);

x=x+alpha*p;

r1=r-alpha*w;

end

运行程序:

clear,clc

n=1000;

A=hilb(n);

b=sum(A')';

[x,k]=CGmethod(A,b)

实验二

1、 实验目的:用复化Simpson方法、自适应复化梯形方法和Romberg方法求数值积分。

实验内容:计算下列定积分

(1) dxxxx202610 (2)10dxxx (3) 20051dxx

实验要求:

(1)分别用复化Simpson公式、自适应复化梯形公式计算要求绝对误差限为71021,输出每种方法所需的节点数和积分近似值,对于自适应方法,显示实际计算节点上离散函数值的分布图;

(2)分析比较计算结果。

程序:

syms x

f=x^6/10-x^2+x %定义函数f(x)

n=input('输入所求导数阶数:')

f2=diff(f,x,n) %求f(x)的n阶导数

(1)复化梯形

clc clear

syms x %定义自变量x

f=inline('x^6/10-x^2+x','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可

f2=inline('3*x^4 - 2','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。

f3='-(3*x^4 - 2)' %因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值

e=*10^(-7) %精度要求值

a=0 %积分下限

b=2 %积分上限

x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值

for n=2:1000000 %求等分数n

Rn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项

if abs(Rn)

break % 符合要求时结束

end

end

h=(b-a)/n %求h

Tn1=0

for k=1:n-1 %求连加和

xk=a+k*h

Tn1=Tn1+f(xk)

end

Tn=h/2*((f(a)+2*Tn1+f(b)))

z=exp(2)

R=Tn-z %求已知值与计算值的差

stem(xk,Tn1);

fprintf('用复化梯形算法计算的结果 Tn=')

disp(Tn)

fprintf('等分数 n=')

disp(n) %输出等分数

fprintf('已知值与计算值的误差 R=')

disp(R)

(2)复化Simpson

clc

clear

syms x %定义自变量x

f=inline('x^6/10-x^2+x','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可

f2=inline('36*x^2','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可

f3='-(36*x^2)' %因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值

e=5*10^(-8) %精度要求值

a=0 %积分下限

b=2 %积分上限

x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值

for n=2:1000000 %求等分数n

Rn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项

if abs(Rn)

end

end

h=(b-a)/n %求h

Sn1=0

Sn2=0

for k=0:n-1 %求两组连加和

xk=a+k*h

xk1=xk+h/2

Sn1=Sn1+f(xk1)

Sn2=Sn2+f(xk)

end

Sn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)

z=exp(2)

R=Sn-z %求已知值与计算值的差

fprintf('用Simpson公式计算的结果 Sn=')

disp(Sn)

fprintf('等分数 n=')

disp(n)

fprintf('已知值与计算值的误差 R=')

disp(R)

结果:

dxxxx202610

用复化梯形算法计算的结果 Tn=

等分数 n= 24764

已知值与计算值的误差 R=

用Simpson公式计算的结果 Sn=

等分数 n= 76

已知值与计算值的误差 R=

10dxxx

用复化梯形算法计算的结果 Tn=

等分数 n= 1119

已知值与计算值的误差 R=

用Simpson公式计算的结果 Sn=

等分数 n= 8

已知值与计算值的误差 R=

20051dxx

用复化梯形算法计算的结果 Tn=

等分数 n= 1000000

已知值与计算值的误差 R=

用Simpson公式计算的结果 Sn=

等分数 n= 10647

已知值与计算值的误差 R=

分析:在处理问题时,复化Simpson要比复化梯度计算速度要快很多。

2、实验目的:高斯数值积分方法用于积分方程求解。

实验内容:线性的积分方程的数值求解,可以被转化为线性代数方程组的求解问题。而线性代数方程组所含未知数的个数,与用来离散积分的数值方法的节点个数相同。在节点数相同的前提下,高斯数值积分方法有较高的代数精度,用它通常会得到较好的结果。对第二类Fredholm积分方程

btatfdssystktyba),()(),()(

首先将积分区间[a,b]等分成n份,在每个子区间上离散方程中的积分就得到线性代数方程组。

实验要求:分别使用如下方法,离散积分方程中的积分

1.复化梯形方法;2.复化辛甫森方法;3.复化高斯方法。求解如下的积分方程

ttedssyeety10)(12)(,方程的准确解为te,

并比较各算法的优劣。

程序结果:当迭代次数n=1时

精确解

复化梯形方法

复化辛甫森方法

复化高斯方法

复化梯形方法的平均误差err=

复化辛甫森方法的平均误差err=

复化高斯方法的平均误差err=

当迭代次数n=5时,

精确解