数值分析上机题目
- 格式: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) dxxxx202610 (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)
结果:
dxxxx202610
用复化梯形算法计算的结果 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.复化高斯方法。求解如下的积分方程
ttedssyeety10)(12)(,方程的准确解为te,
并比较各算法的优劣。
程序结果:当迭代次数n=1时
精确解
复化梯形方法
复化辛甫森方法
复化高斯方法
复化梯形方法的平均误差err=
复化辛甫森方法的平均误差err=
复化高斯方法的平均误差err=
当迭代次数n=5时,
精确解