姓名: 学号:
实验1:
1. 实验项目的性质和任务
通过上机实验,对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。
2.教学内容和要求
1)对高阶多多项式
编程求下面方程的解
并绘图演示方程的解与扰动量 的关系。(实验2.6)
2)对 ,生成对应的Hilbert矩阵,计算矩阵的条件数;通过先确定解获得常向量b的方法,确定方程组
最后,用矩阵分解方法求解方程组,并分析计算结果。(第三章,实验题4)
3)对函数
的Chebyshev点
编程进行Lagrange插值,并分析插值结果。(第四章 实验1)
项目涉及核心启拿搭知识点
病态方程求解、矩阵分解和方程组求解、Lagrange插值。
重点与难点
算法设计和matlab编程。
1)a.实验方案:
先创建一个20*50的零矩阵X,然后利用Matlab中的roots()和poly()函数将50个不同的ess扰动值所产生的50个解向量分别存入X矩阵中。然后再将ess向量分别和X的20个行向量绘图。即可直观的看出充分小的扰动值会产生非常大的偏差。即证明了这个问题的病态性。
b.编写程序:
>>X=zeros(20,50)
>>ve=zeros(1,21)
>>ess=linspace(0,0.00001,50)k=1
>>while k<=50
ve(2)=ess(k)
X(1:20,k)=roots(poly(1:20)+ve)
k=k+1
end
>>m=1
>>while m<=20
figure(m),plot(ess,X(m,:))
m=m+1
end
C.实验结果分析和拓展
由上面的实验结果可以看出一个充分小的扰动值可以让方程的解产生非常大的偏差,而且这个偏差随着ess的变大偏差也随即变大。但可以看出在相对小的根处根比较稳悄拿定,也就是说这些根关于ess并不敏感,而在较大根处时,根很不稳定,即这些解关于ess的变化是敏感的。这就说明了这个问题本身就是一个病态问题,与算法好坏无关。
若扰动在x^18处,只要把程序中的ve(2)改为ve(3)即可,其图形和此类似。
d.实验结论:
高次多项式敏游扰动求方程解问题是一个病态问题。
2)a.实验方案:
先创建一个20*20的零矩阵A,再通过给定解x和Hilbert矩阵求出列向量b,然后通过LU分解法求出方程HX=b的解X,然后将x-X’这一行向量存入A矩阵中,形成一循环,最后,如果Hilbert矩阵非病态的话,则可输出一个20*20的对角矩阵。
b.编写程序:
>>n=2
>>A=zeros(20,20)
>>while n<=20
x=1:n
H=hilb(n)
b=H*x'
[L U]=lu(H)
y=L\bX=U\y
A(n,1:n)=x-X'
n=n+1
end
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.455948e-017.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 7.948463e-017.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.798429e-016.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 7.626119e-018.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 6.040620e-017.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 5.444860e-017.
>>A
A =
1.0e+003 *
Columns 1 through 10
0 0 0 0 0 0 0 0 0 0
-0.00000.0000 0 0 0 0 0 0 0 0
-0.00000.0000 -0.0000 0 0 0 0 0 0 0
-0.00000.0000 -0.00000.0000 0 0 0 0 0 0
0.0000 -0.00000.0000 -0.00000.0000 0 0 0 0 0
0.0000 -0.00000.0000 -0.00000.0000 -0.0000 0 0 0 0
0.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000 0 0 0
-0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000 0 0
-0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000 -0.0000 0
-0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000
-0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000 -0.00000.0000
-0.00000.0000 -0.00000.0000 -0.00000.0001 -0.00030.0006 -0.00070.0005
0.0000 -0.00000.0000 -0.00010.0005 -0.00270.0096 -0.02230.0348 -0.0361
0.0000 -0.00000.0000 -0.00040.0030 -0.00980.00800.0593 -0.25700.5154
0.0000 -0.00000.0000 -0.00010.0005 -0.00290.0095 -0.01710.00860.0347
0.0000 -0.00000.0000 -0.00000.0003 -0.00160.0059 -0.01330.01450.0094
0.0000 -0.00000.0000 -0.00010.0009 -0.00420.0118 -0.01820.00820.0185
0.00000.0000 -0.00000.0002 -0.00270.0187 -0.07620.1806 -0.22490.0813
0.00000.0000 -0.00000.0001 -0.00170.0120 -0.04970.1224 -0.16990.1064
0.0000 -0.00000.0000 -0.00030.0028 -0.01370.0371 -0.0464 -0.01640.1243
Columns 11 through 20
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-0.0000 0 0 0 0 0 0 0 0 0
-0.00020.0000 0 0 0 0 0 0 0 0
0.0238 -0.00910.0015 0 0 0 0 0 0 0
-0.60910.4336 -0.17270.0296 0 0 0 0 0 0
-0.09440.1170 -0.08240.0318 -0.0053 0 0 0 0 0
-0.06240.1107 -0.11100.0674 -0.02320.0035 0 0 0 0
-0.02890.00590.01030.0082 -0.02630.0181 -0.0042 0 0 0
0.05240.1690 -0.3743 -0.18621.0944 -1.21710.6004 -0.1156 0 0
-0.03270.1652 -0.3051 -0.04850.7195 -0.93870.5714 -0.16990.0191 0
-0.1120 -0.04210.08830.0222 -0.06280.1013 -0.29020.3783 -0.21730.0469
C.实验结果分析和拓展:
当Hilbert矩阵的阶数比较小时,其解X和给定解x偏差不大;但当Hilbert矩阵的阶数变大时,偏差就会变大。这就说明了Hilbert矩阵是一组病态矩阵,从Matlab运行中的Warning可以看出,其条件数相当大。
d.实验结论:
Hilbert矩阵是一组病态矩阵,用它来做线性方程的系数矩阵时,往往会得出与精确解相差较大的解。
3)a.实验方案:
在区间【-1,1】上取点,先按Chebyshev取点,即xk=cos((2k-1)pi/2/(n+1))取点,然后再进行拉格朗日插值,绘出图和插值点。而后再进行均匀取点再拉格朗日插值。将两种插值结果进行比较。
b.编程实现:
for a=1:10
b=a+1
for c=1:b
X(c)=cos((2*c-1)*pi/2/(a+1))
Y(c)=1/(1+25*X(c)^2)
x=-1:0.05:1
end
m=length(x)
for i=1:m
z=x(i)s=0
for k=1:b
L=1
for j=1:b
if j~=k
L=L*(z-X(j))/(X(k)-X(j))
end
end
s=s+L*Y(k)
end
y(i)=s
end
figure(1)
plot(x,y,'r')
hold on
figure(2)
plot(X,Y,'b*')
hold on
end
for a=2:2:10
b=a+1
X=linspace(-1,1,b)
Y=1./(1+25*X.^2)
x=-1:0.05:1
m=length(x)
for i=1:m
z=x(i)s=0
for k=1:b
L=1
for j=1:b
if j~=k
L=L*(z-X(j))/(X(k)-X(j))
end
end
s=s+L*Y(k)
end
y(i)=s
end
figure(1)
plot(x,y,'r')
hold on
figure(2)
plot(X,Y,'b*')
hold on
end
C.实验结果分析及拓展:
均匀插值时,当n比较大时,就会出现多项式插值的Runge现象,即当插值节点的个数n增加时,Lagrange插值多项式对原来函数的近似并非越来越好。当进行非等距节点插值时,其近似效果明显要比均匀插值是要好。原因是非均匀插值时,在远离原点处的插值节点比较密集,所以其插值近似效果要比均匀插值时的效果要好。
d.实验结论:
利用Chebyshev点进行非等距节点插值的对原函数的近似效果要比均匀节点插值的好。
数值分析实验报告兆肆——实验目的[1] 掌握复化梯形和辛普森数值积分法的基本原理和方法;[2] 编程MATLAB程序实现复化梯形和辛普森数值积分实验内容与步骤实验内容与步骤1. 编程序实现复化梯形行腔数值积分求积公式function y=f(x)y=sqrt(x).*log(x)function T_n=F_H_T(a,b,n)h=(b-a)/nfor k=0:nx(k+1)=a+k*h if x(k+1)==0x(k+1)=10^(-10) endendT_1=h/2*(f(x(1))+f(x(n+1)))for i=2:nF(i)=h*f(x(i))endT_2=sum(F)T_n=T_1+T_2运行结果:>>T_n=F_H_T(0,1,20)T_n = -0.43362.编程序实现复化辛普森数值积分求积公式function y=f(x)y=sqrt(x).*log(x)function S_n=S_P_S(a,b,n)h=(b-a)/nfor k=0:nx(k+1)=a+k*h x_k(k+1)=x(k+1)+1/2*h if (x(k+1)==0)|(x_k(k+1)==0)x(k+1)=10^(-10) x_k(k+1)=10^(-10)endS_1=h/6*(f(x(1))+f(x(n+1)))for i=2:nF_1(i)=h/3*f(x(i))endfor j=1:nF_2(j)=2*h/3*f(x_k(j))endS_2=sum(F_1)+sum(F_2)S_n=S_1+S_2运行结果:>>S_n=S_P_S(0,1,20)S_n = -0.4423 实验心得通过此次实验的 *** 作,我掌握了复合梯形公式和复合辛普森公式,对编程又有了新的突破!参族带轿考文献地址: http://wenku.baidu.com/view/135fd1274b35eefdc8d33395.html数值分析第七章常微分方程初值问题的数值解法读书报告应该包含以下内容:1、引言:简要介绍什么是罩运常微分方程初值问题,它在什么领域中的应用以及数值解法的重要性。
2、常微分方程的数值解法:介绍7章中涉及的不同数值解法,如欧拉法、龙格-库塔物拦梁法等,并解衡大释它们是如何工作的以及它们的优缺点。
3、数值解法的误差分析:解释误差及误差来源, 如截断误差、舍入误差等,并提供如何减少误差的方法。
4、例题分析:给出几个简单的例子,介绍如何使用不同数值解法来求解常微分方程初值问题。详细讨论每个数值解法的优缺点,并比较它们的精度和稳定性。
5、结论和建议: 总结数值分析第七章讨论的常微分方程初值问题数值解法,指出每种方法的优缺点,并给出适用于不同应用场景下的建议。
6、参考文献 :列出用于研究数值分析第七章常微分方程初值问题的数值解法的参考文献。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)