数值分析上机实验报告

数值分析上机实验报告
数值分析上机实验报告

数值分析上机报告

学院:

专业:

学号:

姓名:

指导老师:

联系电话:

目录

1 序言 (3)

1.1 MATLAB语言特点 (3)

1.2 选用原因 (4)

2 第一题 (5)

2.1 题目 (5)

2.2 计算结果分析 (6)

3 第二题 (9)

3.1 题目 (9)

3.2 结果分析 (9)

4 第三题 (11)

4.1 题目 (11)

4.2 计算结果分析 (11)

附录一多项式拟合程序代码 (14)

附录二多项式插值程序代码 (15)

附录三jacobi迭代程序代码 (16)

附录四Gausssidel 迭代程序代码 (17)

附录五四阶Runge-Kutta算法程序代码 (18)

总结与体会 (19)

1序言

1.1 MATLAB语言特点

近年来MATLAB之所以能在各个行业得到广泛的应用,主要得益于MATLAB语言

能强大的工具箱;良好的扩充能力;完善的帮助系统。

1.高效的矩阵运算机制

句才能完成的操作,在MATLAB中直接使用矩阵即可完成计算,因而MATLAB在数据计算分析,特别是对海量数据的处理方面表现出相比其他的编程语言更大的优势。

2.多样化的操作途径

MATLAB语言为用户提供了多种操作方式选择。用户可以编写代码实现各种功能,代码可重复利用,同时,不擅长编程的用户也可以通过MATLAB图形界面操作,完成MATLAB的相应功能。

3.功能强大的工具箱

对于算法的开发,MATLAB提供了大量现成的函数,用户可以直接调用。MATLAB 软件对目前主流的算法都提供了现成的函数,并封装成一个个适用于不同领域的算法工具箱。常用的工具箱包括数学类、经济类、信号处理类工具箱,同时随着MATLAB软件版本的更新,不断有功能更强大的工具箱添加到MATLAB中。MATLAB 语言的这一特点,将大大节省算法开发的时间,用户无须详细了解算法的细节,只要掌握MATLAB中算法相应函数的调用即可。

4.良好的扩展能力

利用MATLAB语言编写的程序具有良好的扩展能力,可以方便地与各种编程语言链接。用户可以方便地在MATLAB中调用其他语言已编写好的程序,同时在其他语言中也可以方便地调用MATLAB的程序。MATLAB语言具有良好的接口编程技术。

5.完善的帮助系统

完善的帮助系统是MATLAB的又一突出特点,MATLAB向用户提供了多种帮助途径。通过MATLAB的帮助系统,用户可以获取MATLAB常用函数的使用方法及应用实例,而且这种帮助可以是实时的、在线的。同时,为了便于用户更好地使用MATLAB软件,在MATLAB中的主要算法都是可以直接看到源代码的。

1.2选用原因

本次数值分析上机实习采用MATLAB语言进行编程,主要是基于以下几方面的考虑:

1.编程效率高

MATLAB语言是一种面向科学与工程计算的高级语言,允许用数学形式的语言编写程序,且比BASIC、FORTRAN和C等语言更加接近我们书写计算公式的思维方式,用MATLAB编写程序犹如在演算纸上排列公式与求解问题。因此,也可通俗地称MATLAB语言为演算纸式科学算法语言。由于它编程简单,所以编程效率高,易学易懂。

2.高效方便的矩阵和数组运算

MATLAB语言像BASIC、FORTRAN和C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。有些如算术运算符只要增加“.”就可以用于数组建间的运算。另外,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解数字图像处理问题时显得大为简洁、高效、方便,这是其他高级语言所不能相比的。

3.用户使用方便

MATLAB语言是一种解释执行的语言(在没有被专门的工具编译之前),它灵活、方便,起跳时程序手段丰富,调试速度快,需要学习时间少。人们用任何一种语言编程和调试一般都要经过四个步骤:编辑、编译、连接,以及执行和调试。各个步骤之间是顺序关系,编程的过程就是在他们之间作瀑布型的循环。MATLAB语言与其它语言相比,较好的解决了上述问题,把编辑、编译、连接和执行融为一体。它能在同一画面上进行灵活操作,快速排除输入程序的书写错误、语法错误甚至语义错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB 还要简单的语言,更不用谈C和C++。

4.扩充性强,交互性好

MATLAB语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,且这些库函数同用户文件在形式上一样,所以用户文件也可以作为MATLAB 的库函数来调用。婴儿,用户可以根据自己的需要方便的建立和扩充新的库函数,提高MATLAB使用效率和扩充它的功能。另外,为了充分利用FORTRAN、C等语言的资源,包括用户自己编好的FORTRAN、C语言程序,通过建立M 文件的形式,混合编程,方便地调用有关的FORTRAN、C语言子程序,还可

以在C语言和FORTRAN语言中方便的使用MATLAB的数值计算功能。良好的交互性增加了代码的重用性。

综上所述,MATLAB最适用的范围是科学计算,对于本实习需要处理矩阵运算来实现图像处理算法来说,MATLAB再合适不过了。

2 第一题

2.1题目

某过程测涉及两变量x 和y,拟分别用插值多项式和多项式拟合给出其对应规律的近似多项式,已知xi与yi之间的对应数据如下,xi=1,2,…,10 yi = 34.6588 40.3719 14.6448 -14.2721 -13.3570 24.8234 75.2795

103.5743 97.4847 78.2392

(1)请用次数分别为3,4,5,6的多项式拟合并给出最好近似结果f(x)。

(2)请用插值多项式给出最好近似结果

下列数据为另外的对照记录,它们可以作为近似函数的评价参考数据。

xi =

Columns 1 through 7

1.5000 1.9000

2.3000 2.7000

3.1000 3.5000 3.9000

Columns 8 through 14

4.3000 4.7000

5.1000 5.5000 5.9000

6.3000 6.7000

Columns 15 through 17

7.1000 7.5000 7.9000

yi =

Columns 1 through 7

42.1498 41.4620 35.1182 24.3852 11.2732 -1.7813 -12.3006

Columns 8 through 14

-18.1566 -17.9069 -11.0226 2.0284 19.8549 40.3626 61.0840

Columns 15 through 17

79.5688 93.7700 102.3677

2.2 计算结果分析

(1)根据实验数据,分别使用3,4,5,6次多项式拟合,可得拟合的多项式如下,并分别作图:

n=3;p=[-1.0326 19.334 -94.479 131.79]

n=4;p=[-0.38185 7.368 -42.143 73.533 0.74498]

n=5;p=[0.098075 -3.0789 34.502 -163.51 304.73 -139.5]

n=6;

p=[0.019359 -0.54079 5.1137 -16.897 -0.86696 66.375 -18.699]

上四幅图是多项式拟合曲线与原散点连线曲线的比较。明显可以看到,随着多项式拟合次数的增加,曲线的拟合度也越来越好,基本与连点曲线一致。

最好近似结果是n=6时多项式拟合,表达式为:

fx=0.019359*x6-0.54079*x5+5.1137*x4-16.897*x3-0.86696*x2+66.375*x1-18.69 9

(2)根据原散点构建拉格朗日插值多项式,对给出的xi的数值进行插值得到yi,在下图可以看到利用拉格朗日插值多项式插值的图像与曲线拟合度很好。

yi =

Columns 1 through 13

42.3840 41.4947 35.0742 24.3601 11.2792 -1.7683 -12.2977 -18.1626 -17.9118 -11.0210 2.0333 19.8565 40.3584

Columns 14 through 17

61.0794 79.5709 93.7788 102.3713

3 第二题

3.1题目

用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。

(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4];b1=[-3,2,4]T,

b2=[100,-200,345]T,

(2)A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1]T,

b2=[5,0,-10]T,

(3)A行分别为A1=[1,3],A2=[-7,1];b=[4,6]T,

3.2 结果分析

在以下的程序中,默认初始值为0,最大迭代次数N为50,精度为0.00001 (1)根据题意可得方程:

对此方程分别采用两种方法,通过运行jacobi.m与gausssidel.m程序进行收敛性分析:

Jacobi:满足误差限的迭代近似解为:-0.7273 0.8081 0.2525

需要迭代18次;

Gausssidel:满足误差限的迭代近似解为:-0.7273 0.8081 0.2525

需要迭代11次。

Jacobi:满足误差限的迭代近似解为:36.3636 -2.0707 114.0404

需要迭代24次;

Gausssidel:满足误差限的迭代近似解为:36.3636 -2.0707 114.0404

需要迭代16次。

通过以上计算分析,此方程的解收敛。根据迭代次数的比较,可以得到Gausssidel 迭代法要比Jacobi收敛性更快,更好。同时,上述两个方程系数阵都相同,但右端不同,用同样方法不同右端比较,得到结论,右端对迭代收敛有影响。

(2)

用jacobi到最大迭代次数50次时仍不能收敛。

用Gausssidel满足误差限的迭代近似解为:5.7692 0.7692 -4.2308需要迭代16次。

用jacobi到最大迭代次数50次时仍不能收敛。

用Gausssidel满足误差限的迭代近似解为:32.6923 7.6923 -42.3077需要迭代43次。

通过上述计算分析,用jacobi迭代时,两个方程都不能收敛,用Gaussssidel 迭代时,可以得到收敛的近似解,既,Gausssidel方法具有良好的收敛性。(3)

对此方程组,无论jacobi还是Gausssidel迭代法都不能得到收敛的近似解。可以推断是给出的行列式无法满足这两种方法的收敛条件。系数阵既不是行对角占优矩阵,也不是列占优阵,因此用这两种方法,得不到收敛的近似解。

4 第三题

4.1 题目

用Ru n ge-Kutt a4阶算法对初值问题y/=-20*y,y(0)=1按不同步长求解,用于观察稳定区间的作用,推荐两种步长h=0.1,0.2。

注:此方程的精确解为:y=e-20x

4.2 计算结果分析

取不同步长得到求解的微分方程的解同精确解的误差分别如表1、表2、表3、表4、表5。

从上表中可以得出,在h=0.0001,0.001,0.01,0.1 时,绝对误差在逐步变小,因此在这种情况下认为此方法是稳定的。当h=0.2 时,绝对误差逐渐扩大,因此在h=0.2 时,算法不稳定。

在不同h下面的精度问题,取不同的步长求y(0.1)的值。从表6中可以看到步长越小,标准四阶Runge-Kutta算法得到的值精度越高,计算所需的步骤也越长。

%多项式拟合

xx= [1 2 3 4 5 6 7 8 9 10];

yy= [34.6588 40.3719 14.6448 -14.2721 -13.3570 24.8234 75.2795 103.5743 97.4847 78.2392];

n=input('n=');

%判断x和y向量大小是否一致

if ~isequal(size(xx),size(yy))

error

end

x = xx(:);

y = yy(:);

%构建范德蒙德矩阵

V(:,n+1) = ones(length(x),1,class(x));

for j = n:-1:1

V(:,j) = x.*V(:,j+1)

end

%求解正规方程组的唯一解

%所得的解称为最小二乘多项式

%对矩阵V进行有选择的qr分解.

%当矩阵V为m×n并且m>n,那么只会产生具有前n列的正交矩阵Q

[Q,R] = qr(V,0);

p = R\(Q'*y); % p的保存 p = V\y;

r = y - V*p;

p = p.'; %p的转置一般采用行向量表示多项式系数

%S结构包括cholesky分解的范德蒙德矩阵R,自由度df,标准残差normr S.R = R;

S.df = length(y) - (n+1);

S.normr = norm(r);

%画图

X=xx;

Y=yy;

Y1=polyval(p,xx);

plot(xx,yy,':o',xx,Y1,'-*');

legend('yuanshi','nihe');

xx=[1 2 3 4 5 6 7 8 9 10];

yy=[34.6588 40.3719 14.6448 -14.2721 -13.3570 24.8234 75.2795 103.5743 97.4847 78.2392];

xi=[1.5000 1.9000 2.3000 2.7000 3.1000 3.5000 3.9000 4.3000 4.7000 5.1000 5.5000 5.9000 6.3000 6.7000 7.1000 7.5000

7.9000];

yi=[1.5000 1.9000 2.3000 2.7000 3.1000 3.5000 3.9000 4.3000 4.7000 5.1000 5.5000 5.9000 6.3000 6.7000 7.1000 7.5000

7.9000]

%xi为标量或向量,被估计函数的自变量;

%yi为xi处的函数估计值。

x=xx(:);

y=yy(:);

xi=xi(:);

n=length(x);

m=length(y);

%插值点与它的函数值应有相同个数

if n~=m

error('The lengths of X and Y must be equal!');

return;

end

yi=zeros(size(xi));

for k=1:n

w=ones (size(xi));

for j=[1:k-1 k+1:n];

%输入的插值节点必须互异

if abs(x(k)-x(j))

error('the data is error');

return;

end

w=(xi-x(j))/(x(k)-x(j)).*w; %计算Lagrange基函数

end

yi=yi+w*y(k); %计算Lagrange插值函数

end

yi

%画图

X=xi;

Y1=load('f:\matlab7\shuzhifenxi\Y1.txt');

Y2=yi(:);

plot(xi,Y1,':o',xi,Y2,'-*');

legend('yuanshi','chazhi');

附录三jacobi迭代程序代码

a=input('请输入系数矩阵a:');

b=input('请输入矩阵b:');

N=input('请输入最大迭代次数N:');

esp=input('请输入近似解的误差限:');

if any(diag(a))==0

error('系数矩阵错误,迭代终止!')

end

D=diag(diag(a));

X0=zeros(size(b));

x1=0;

x2=0;

x3=0;

X1=[x1;x2;x3];

h=inv(D)*b;

B=inv(D)*(D-a);

B1=triu(B);

B2=tril(B);

k=1;

fprintf('雅可比迭代法 ');

t=0;

Y0=zeros(size(b));

while t<=N

Y1=h+B*Y0;

if norm(Y1-Y0,inf)

fprintf('满足误差限 \n')

break ;

end

Y0=Y1;

fprintf('第%2d次迭代得:',t)

disp(Y1');

t=t+1;

end

fprintf('满足误差限的雅可比迭代近似解为:')

disp(Y1');

附录四Gausssidel迭代程序代码

a=input('请输入系数矩阵a:');

b=input('请输入矩阵b:');

N=input('请输入最大迭代次数N:');

esp=input('请输入近似解的误差限:');

if any(diag(a))==0

error('系数矩阵错误,迭代终止!')

end

D=diag(diag(a));

X0=zeros(size(b));

x1=0;

x2=0;

x3=0;

X1=[x1;x2;x3];

h=inv(D)*b;

B=inv(D)*(D-a);

B1=triu(B);

B2=tril(B);

k=1;

fprintf('高斯-赛德尔迭代法 \n');

fprintf('第0次迭代得:')

disp(X1');

while k<=N

x1=h(1,1)+B1(1,:)*X0;

X1=[x1;x2;x3];

x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1;

X1=[x1;x2;x3];

x3=h(3,1)+B2(3,:)*X1;

X1=[x1;x2;x3];

if norm(X1-X0,inf)

fprintf('已满足误差限。 ')

break ;

end

X0=X1;

fprintf('第%2d次迭代得:',k)

disp(X1');

k=k+1;

end

fprintf('满足误差限的高斯-赛德尔迭代近似解为:') disp(X1');

附录五四阶Runge-Kutta算法程序代码

h=[0.0001,0.001,0.01,0.1]

k=1

for xk=0.1:0.1:1 %取不同的x进行计算

for i=1:1:4 %取不同的步长计算每个x

hj=h(i)

yk=1

for xkp=hj:hj:xk %四阶标准Runge-Kutta迭代算法

k1=hj*(-20*yk);

format long

k1;

k2=hj*(-20*(yk+k1*0.5));

k3=hj*(-20*(yk+k2*0.5));

k4=hj*(-20*(yk+k3));

ykm=yk+(k1+2*k2+2*k3+k4)*(0.16666666666667);

yk=ykm;

end

yk=ykm;

yeal=exp(-20*xkp) ; %求出精确值

ck=abs(yk-yeal); %精确值和计算值之间的绝对误差

ykeal(k)=yeal;

ckk(k)=ck;

yxk(k)=yk;

xkk(k)=xk;

k=k+1;

end

end

D=[yxk' ykeal' ckk']; %将迭代得到的结果及误差存到矩阵D中

for i=1:1:10 %将同一个步长下不同X得到的结果集中到一个矩阵

for j=1:1:3

Ah1(i,j)=D(4*i-3,j);

Ah2(i,j)=D(4*i-2,j);

Ah3(i,j)=D(4*i-1,j);

Ah4(i,j)=D(4*i,j);

end

Axk(i)=xkk(4*i-3);

end

Ch1=[Axk' Ah1]

Ch2=[Axk' Ah2]

Ch3=[Axk' Ah3]

Ch4=[Axk' Ah4]

Cheng=[Ch1(1,[2 3 4]);Ch2(1,[2 3 4]); Ch3(1,[2 3 4]);Ch4(1,[2 3 4])]

总结与体会

本次上机报告选择的是1-4题目中的第二题和第三题,5-6题中的第五题,在实习过程中,通过网上查阅资料,对程序代码进行了研究运行,因为对编程接触的机会太少,在编写过程中也是显得力不从心,也出现了不少问题,同时也很是纠结,最后通过向同学和师兄请教,解决了一些操作问题,通过本次实习,也对C语言及MATLAB进行了一次系统的复习,也有了更深一步的了解,但需要学习的还有很多,需要再接再厉,在克服了种种困难后,收获也是很多的。

总之,通过本次上机实习,学到了数值分析的相关知识,了解了编程运算的重要性,同时为自己专业研究也奠定了基础,编程是必不可少,通过理论与实践相结合的方法,不仅提高了计算与编程能力,还对将来的工作和进一步的学习打好基础。

东南大学数值分析上机题答案

数值分析上机题 第一章 17.(上机题)舍入误差与有效数 设∑=-= N j N j S 2 2 11 ,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1 -1 ···1-311-21222N S N +++=,计算N S 的通用 程序; (2)编制按从小到大的顺序1 21 ···1)1(111 222-++--+ -=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么? 解: 程序: (1)从大到小的顺序计算1 -1 ···1-311-21222N S N +++= : function sn1=fromlarge(n) %从大到小计算sn1 format long ; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end (2)从小到大计算1 21 ···1)1(111 2 22 -++--+-= N N S N function sn2=fromsmall(n) %从小到大计算sn2 format long ; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end (3) 总的编程程序为: function p203()

clear all format long; n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn); sn1=fromlarge(n); fprintf('从大到小计算的值为%f\n',sn1); sn2=fromsmall(n); fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end function sn2=fromsmall(n) %从小到大计算sn2 format long; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end end 运行结果:

2014级硕士研究生数值分析上机实习报告

2014级硕士研究生数值分析上机实习(第一次) 姓名:学号:学院: 实习题目:分别用二分法和Newton迭代法求方程x3■ 2x210x-20=0的根.实习目的:掌握两种解法,体会两种解法的收敛速度. 实习要求:用C程序语言编程上机进行计算,精确到8位有效数字. 报告内容: 1.确定实根的个数以及所在区间 2.将最后两次计算结果填入下表(保留8位数字): 3.实习过程中遇到哪些问题?如何解决?有何心得体会?

4.两种解法的计算程序(此页写不下时可以加页):

2014级硕士研究生数值分析上机实习(第二次)姓名:学号:学院: 实习题目:计算8阶三对角矩阵A=tridiag(0.235, 1.274, 0.235)的行列式.实习目的:掌握计算行列式的方法. 实习要求:首先选择一种算法,然后用C程序语言编程上机进行计算.报告内容: 1.简单描述所采用的算法: 2?计算结果: A 3.实习过程中遇到哪些问题?如何解决?有何心得体会?

4.写出C语言计算程序(此页写不下时可以加页):

2014级硕士研究生数值分析上机实习(第三次) 姓名:学号:学院: 分别用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组实习题目: 2lx + 9.8y+ 3.4z= 6.7 <2.7x + 1.8y+ 7.2z= 2.4 8.6x + 1.5y + 3.4z = 1.9 实习目的:感受两种迭代法的收敛速度. 首先构造收敛的Jacobi迭代法和Gauss-Seidel迭代法,然后用实习要求: C程序语言编程上机进行求解,初始值均取为0,精确到4位小 数. 报告内容: 1.写出收敛的Jacobi迭代法和Gauss-Seidel迭代法:

数值分析实验报告176453

实验报告 插值法 数学实验室 数值逼近 算法设计 级 ____________________________ 号 ____________________________ 名 _____________________________ 实验项目名称 实验室 所属课程名称 实验类型 实验日期

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插 多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的 优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并 去实现。 【实验原理】 《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值, 拉格朗日 插值的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A 笔记本电脑 操作系统: Win dows 8专业版 处理器:In tel ( R Core ( TM i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于三种插值方法的内容转化成程序语言,用 MATLA B 现; 第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计 MATLA 程序,利用程序算出 问题答案,分析所得答案结果,再得出最后结论。 实验一: 已知函数在下列各点的值为 试用4次牛顿插值多项式 P 4( x )及三次样条函数 S ( x )(自然边界条件)对数据进行插值。 用图给出{( X i , y i ), X i =0.2+0.08i , i=0 , 1, 11, 10 } , P 4 ( x )及 S ( x )。 值方法:牛顿 在MATLAB 件中

数值分析MATLAB上机实验

数值分析实习报告 姓名:gestepoA 学号:201******* 班级:***班

序言 随着计算机技术的迅速发展,数值分析在工程技术领域中的应用越来越广泛,并且成为数学与计算机之间的桥梁。要解决工程问题,往往需要处理很多数学模型,不仅要研究各种数学问题的数值解法,同时也要分析所用的数值解法在理论上的合理性,如解法所产生的误差能否满足精度要求:解法是否稳定、是否收敛及熟练的速度等。而且还能减少大量的人工计算。 由于工程实际中所遇到的数学模型求解过程迭代次数很多,计算量很大,所以需要借助如MATLAB,C++,VB,JAVA的辅助软件来解决,得到一个满足误差限的解。本文所计算题目,均采用MATLAB进行编程,MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来MATLAB最突出的特点就是简洁,它用更直观的、符合人们思维习惯的代码。它具有以下优点: 1友好的工作平台和编程环境。MATLAB界面精致,人机交互性强,操作简单。 2简单易用的程序语言。MATLAB是一个高级的矩阵/阵列语言,包含控制语言、函数、数据结构,具有输入、输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编好一个较大的复杂的应用程序(M 文件)后再一起运行。 3强大的科学计算机数据处理能力。包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数。 4出色的图像处理功能,可以方便地输出二维图像,便于我们绘制函数图像。

目录 1 第一题 (4) 1.1 实验目的 (4) 1.2 实验原理和方法 (4) 1.3 实验结果 (5) 1.3.1 最佳平方逼近法 (5) 1.3.2 拉格朗日插值法 (7) 1.3.3 对比 (8) 2 第二题 (9) 2.1实验目的 (9) 2.2 实验原理和方法 (10) 2.3 实验结果 (10) 2.3.1 第一问 (10) 2.3.2 第二问 (11) 2.3.3 第三问 (11) 3 第三题 (12) 3.1实验目的 (12) 3.2 实验原理和方法 (12) 3.3 实验结果 (12) 4 MATLAB程序 (14)

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

数值分析实验2014

数值分析实验(2014,9,16~10,28) 信计1201班,人数34人 数学系机房 数值分析 计算实习报告册 专业 学号 姓名 2014~2015年第一学期

实验一 数值计算的工具 Matlab 1.解释下MATLAB 程序的输出结果 程序: t=0.1 n=1:10 e=n/10-n*t e 的结果:0 0 -5.5511e-017 0 0 -1.1102e-016 -1.1102e-016 0 0 0 2.下面MATLAB 程序的的功能是什么? 程序: x=1;while 1+x>1,x=x/2,pause(0.02),end 用迭代法求出x=x/2,的最小值 x=1;while x+x>x,x=2*x,pause(0.02),end 用迭代法求出x=2*x,的值,使得2x>X x=1;while x+x>x,x=x/2,pause(0.02),end 用迭代法求出x=x/2,的最小值,使得2x>X 3.考虑下面二次代数方程的求解问题 02=++c bx ax 公式a ac b b x 242-+-=是熟知的,与之等价地有a c b b c x 422-+-=,对于 1,100000000,1===c b a ,应当如何选择算法。 应该用a ac b b x 242-+-=计算,因为b 做分母 4.函数)sin(x 有幂级数展开...! 7!5!3sin 7 53+-+-=x x x x x 利用幂级数计算x sin 的MATLAB 程序为

function s=powersin(x) s=0; t=x; n=1; while s+t~=s; s=s+t ; t=-x^2/((n+1)*(n+2))*t ; n=n+2; end t1=cputime; pause(10); t2=cputime; t0=t2-t1 (a)解释上述程序的终止准则。 当s+t=s ,终止循环。 (b)对于2/21,2/11 ,2/πππ=x 计算的进度是多少?分别计算多少项? X=pi/2时,s =1.0000 x=11pi/2时,s=-1.0000 x=21pi/2时,s =0.9999 Cputime 分别是0.1563 0.0469 0.0156 5.考虑调和级数∑∞ =11 n n ,它是微积分中的发散级数,在计算机上计算该级数的部 分和,会得到怎么样的结果,为什么? function s=fun(n) s=0; t=1/n; for i=1:n s=s+1/i; end 当n=100时s =5.1874 当n=80时s =4.9655 当n=50时,s =4.4992 当n=10时,s =2.9290 6.指数函数的级数展开...! 3!213 2++++=x x x e x ,如果对于0

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

贵州大学数值分析上机实验

数值分析上机实验报告 课程名称:数值分析上机实验 学院:机械工程学院专业:机械制造 姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师 2012年12月30日

一.已知A 与b 12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849 -0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.113584 2.189736 2.031454 4.10101119.8979180.431637- 3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.1034581 4.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -2 5.173417 0.84671695 1.784317 -8 6.612343 1.1101230 4.719345 -5.6784392]T B ????? ? ?? ? ? ???? ? ? ???? ? ? ????? ?=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。 (3)用列主元素消去法求解 Bx=b 。 解:(3)、用列主元素消去法求解Bx=b (一)、理论依据: 其基本思想是选取绝对值尽量大的元素作为主元素,进行行与列的交换,再进行回代,求出方程的解。 将方阵A 和向量b 写成C=(A b )。将C 的第1列中第1行的元素与其下面的此列的元素逐一进行比较,找到最大的元素1j c ,将第j 行的元素与第1行的元素进行交换,然后通过行变换,将第1列中第2到第n 个元素都消成0。将变换后的矩阵(1)C 的第二列中第二行的元 素与其下面的此列的元素逐一进行比较,找到最大的元素(1) 2k c ,将第k 行的元素与第2行的 元素进行交换,然后通过行变换,将第2列中第3到第n 个元素都消成0。以此方法将矩阵的左下部分全都消成0。 (二)、计算程序: #include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={ {12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743 },

数值分析上机实习报告

指导教师: 姓名: 学号: 专业: 联系电话: 上海交通大学

目录 序言 (3) 实验课题(一) 雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (4) 数值分析 (5) 实验课题(二) 松弛因子对SOR法收敛速度的影响 (6) 数值分析 (12) 总结 (13) 附录(程序清单) (14) 1.雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (14) 雅可比迭代法: (14) 高斯-塞得尔迭代法: (16) 2.松弛因子对SOR法收敛速度的影响 (18) 松弛法(SOR) (18)

序言 随着科学技术的发展,提出了大量复杂的数值计算问题,在实际解决这些计算问题的长期过程中,形成了计算方法这门学科,专门研究各种数学问题的数值解法(近似解法),包括方法的构造和求解过程的误差分析,是一门内容丰富,有自身理论体系的实用性很强的学科。 解决工程问题,往往需要处理很多数学模型,这就要花费大量的人力和时间,但是还有不少数学模型无法用解析法得到解。使用数值方法并利用计算机,就可以克服这些困难。事实上,科学计算已经与理论分析、科学实验成为平行的研究和解决科技问题的科学手段,经常被科技工作者所采用。作为科学计算的核心内容——数值分析(数值计算方法),已逐渐成为广大科技工作者必备的基本知识并越来越被人重视。 由于数值方法是解数值问题的系列计算公式,所以数值方法是否有效,不但与方法本身的好坏有关,而且与数值问题本身的好坏也有关,因此,研究数值方法时,不但需要研究数值方法的好坏,即数值稳定性问题,而且还需要研究数值问题本身的好坏,即数值问题的性态,以及它们的判别问题。 数值计算的绝大部分方法都具有近似性,而其理论又具有严密的科学性,方法的近似值正是建立在理论的严密性基础上,根据计算方法的这一特点。因此不仅要求掌握和使用算法,还要重视必要的误差分析,以保证计算结果的可靠性。数值计算还具有应用性强的特点,计算方法的绝大部分方法如求微分方程近似解,求积分近似值,求解超越方程,解线性方程组等都具有较强的实用性,而插值法,最小二乘法,样条函数等也都是工程技术领域中常用的,有实际应用价值的方法。 应用数值计算方法解决科学研究和工程中的实际问题,首先要建立描述具体问题的适当数学模型;其次,要选择一定的计算方法并制定相应的计算方案;并编制、设计合理的计算机程序;最后由计算机计算出数值结果。其中,计算方案的设计和计算方法的选择是上述求解过程中极为重要的环节,是程序设计和分析数值计算结果准确性的基础。 本实验所使用的是Visual C++ 6.0程序设计语言。 C++是在C语言的基础上拓展而来的。C++引入了面向对象的机制,同时又充分保留了C语言的简洁性和高效性,并且与C语言完全兼容,具有C语言高效灵活、功能强大、可移植性好等诸多优点,是面向对象程序设计的最佳语言之一。

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

数值分析实验报告

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p Λ 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a Λ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a Λ 的全部根;而函数 poly(v)b = 的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots +

矩阵与数值分析上机实验题及程序

1.给定n 阶方程组Ax b =,其中 6186186186A ?? ? ? ?= ? ? ??? ,7151514b ?? ? ? ?= ? ? ??? 则方程组有解(1,1,,1)T x = 。对10n =和84n =,分别用Gauss 消去法和列主元消去法解方程组,并比较计算结果。 Gauss 消去法: Matlab 编程(建立GS.m 文件): function x=GS(n) A=[];b=[]; for i=1:n-1 A(i,i)=6; A(i,i+1)=1; A(i+1,i)=8; b(i)=15; end A(n,n)=6;b(1)=7;b(n)=14;b=b'; for k=1:n-1 for i=k+1:n m(i,k)=A(i,k)/A(k,k); A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n); b(i)=b(i)-m(i,k)*b(k); end end b(n)=b(n)/A(n,n); for i=n-1:-1:1 b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)'))/A(i,i); end clear x; x=b; disp( 'AX=b 的解x 是') end 计算结果: 在matlab 命令框里输出GS (10)得: >> GS(10) AX=b 的解x 是 ans = 1.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 在matlab命令框里输出GS(84)得:>> GS(84) AX=b的解x是 ans = 1.0e+008 * 0.0000 … … … 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0001 0.0002 -0.0003 0.0007 -0.0013 0.0026 -0.0052 0.0105 -0.0209 0.0419 -0.0836 0.1665 -0.3303

数值分析上机报告

数值分析上机报告 班级:20级学隧2班 姓名:000000000 学号:00000000000

目录 1 序言 (6) 2 题目 (7) 2.1 题2 (7) 2.1.1 题目内容 (7) 2.1.2 MATLAB程序 (8) 2.1.3 计算结果 (8) 2.1.4 图形 (9) 2.1.5 分析 (14) 2.2 题3 (14) 2.2.1 题目内容 (14) 2.2.2 程序 (14) 2.2.3 计算结果 (14) 2.2.4 图形 (15) 2.2.5 分析 (16) 2.3 选做题5 (16) 2.3.1方法介绍 (17) 2.3.2计算结果及分析 (17) 3总结 (18) 4.附录 (19) 4.1 题1程序代码 (19) 4.2 题2程序代码 (22) 4.3 题3程序代码 (26)

数值分析2015上机实习报告要求 1.应提交一份完整的实习报告。具体要求如下: (1)报告要排版,美观漂亮(若是纸质要有封面,封面上)要标明姓名、学号、专业和联系电话; (2)要有序言,说明所用语言及简要优、特点,说明选用的考量; (3)要有目录,指明题目、程序、计算结果,图标和分析等内容所在位置,作到信息简明而完全; (4)要有总结,全方位总结机编程计算的心得体会; (5)尽量使报告清晰明了,一般可将计算结果、图表及对比分析放在前面,程序清单作为附录放在后面,程序中关键部分要有中文说明或标注, 指明该部分的功能和作用。 2.程序需完好保存到期末考试后的一个星期,以便老师索取用于验证、询问或质疑部分内容。 3.认真完成实验内容,可以达到既学习计算方法又提高计算能力的目的,还可以切身体会书本内容之精妙所在,期间可以得到很多乐趣。 4.拷贝或抄袭他人结果是不良行为,将视为不合格。 5.请按任课老师要求的时间和载体(电子或纸质)提交给任课老师。

数值分析实验报告

实验一、误差分析 一、实验目的 1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

2011上机实习报告2

数值分析上机实习报告要求 1.应提交一份完整的实习报告。具体要求如下: (1)要有封面,封面上要标明姓名、学号、专业和联系电话; (2)要有序言,说明所用语言及简要优、特点,说明选用的考量; (3)要有目录,指明题目、程序、计算结果,图标和分析等内容所在位置,作到信息简明而完全; (4)要有总结,全方位总结机编程计算的心得体会; (5)尽量使报告清晰明了,一般可将计算结果、图表及对比分析放在前面,程序清单作为附录放在后面,程序中关键部分要有中文说明或标注,指明该部分 的功能和作用。 2.程序需完好保存到期末考试后的一个星期,以便老师索取用于验证、询问或质疑部分内容。 3.认真完成实验内容,可以达到既学习计算方法又提高计算能力的目的,还可以切身体会书本内容之精妙所在,期间可以得到很多乐趣。 4.拷贝或抄袭他人结果是不良行为,将视为不合格。 5.报告打印后按要求的时间提交给任课老师。 数值分析上机试题2 (选择其中1个题目) 5.用Ru n ge-Kutt a 4阶算法对初值问题y/=-20*y,y(0)=1按不同步长求解,用于观察稳定区间的 作用,推荐两种步长h=0.1,0.2。 注:此方程的精确解为:y=e-20x 6.实验内容 (1)实际验证梯形求积公式、Simpson求积公式、Newton-Cotes求积公式的代数精度。 (2)针对上述三个函数和积分区间[a,b],实验观察梯形求积公式、Simpson求积公式和 Newton-Cotes求积公式的复化求积公式的实际计算效果。 y=exp(-x.^2).*sin(10*x)+4; a=1; b=3; y=sin(5*x)./x.^3;a=2*pi; b=4*pi; y=sin(5*x)./x.^3;a=2*pi;b=9.4248; 1

数值分析2016上机实验报告

序言 数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。是科学与工程计算(科学计算)的理论支持。许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。目前,试验、理论、计算已成为人类进行科学活动的三大方法。 数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。 MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。 本实验报告使用了MATLAB软件。对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。

目录 序言 (1) 问题一非线性方程数值解法 (3) 1.1 计算题目 (3) 1.2 迭代法分析 (3) 1.3计算结果分析及结论 (4) 问题二追赶法解三对角矩阵 (5) 2.1 问题 (5) 2.2 问题分析(追赶法) (6) 2.3 计算结果 (7) 问题三函数拟合 (7) 3.1 计算题目 (7) 3.2 题目分析 (7) 3.3 结果比较 (12) 问题四欧拉法解微分方程 (14) 4.1 计算题目 (14) 4.2.1 方程的准确解 (14) 4.2.2 Euler方法求解 (14) 4.2.3改进欧拉方法 (16) 问题五四阶龙格-库塔计算常微分方程初值问题 (17) 5.1 计算题目 (17) 5.2 四阶龙格-库塔方法分析 (18) 5.3 程序流程图 (18) 5.4 标准四阶Runge-Kutta法Matlab实现 (19) 5.5 计算结果及比较 (20) 问题六舍入误差观察 (22) 6.1 计算题目 (22) 6.2 计算结果 (22) 6.3 结论 (23) 7 总结 (24) 附录

北航数值分析计算实习报告一

航空航天大学 《数值分析》计算实习报告 第一大题 学院:自动化科学与电气工程学院 专业:控制科学与工程 学生姓名: 学号: 教师: 电话: 完成日期: 2015年11月6日 航空航天大学 Beijing University of Aeronautics and Astronautics

实习题目: 第一题 设有501501?的实对称矩阵A , ??? ???? ?????????=5011A a b c b c c b c b a 其中,064.0,16.0),501,,2,1(64.0)2.0sin()024.064.1(1 .0-==???=--=c b i e i i a i i 。矩阵A 的特征值为)501,,2,1(???=i i λ,并且有 ||min ||,501 150121i i s λλλλλ≤≤=≤???≤≤ 1.求1λ,501λ和s λ的值。 2.求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,,2,1(???=k k i λ。 3.求A 的(谱数)条件数2)A (cond 和行列式detA 。 说明: 1.在所用的算法中,凡是要给出精度水平ε的,都取12-10=ε。 2.选择算法时,应使矩阵A 的所有零元素都不储存。 3.打印以下容: (1)全部源程序; (2)特征值),,39,...,2,1(,s 5011=k k i λλλλ以及A det ,)A (cond 2的值。 4.采用e 型输出实型数,并且至少显示12位有效数字。

一、算法设计方案 1、求1λ,501λ和s λ的值。 由于||min ||,501 150121i i s λλλλλ≤≤=≤???≤≤,可知绝对值最大特征值必为1λ和501 λ其中之一,故可用幂法求出绝对值最大的特征值λ,如果λ=0,则1λ=λ,否则 501λ=λ。将矩阵A 进行一下平移: I -A A'λ= (1) 对'A 用幂法求出其绝对值最大的特征值'λ,则A 的另一端点特征值1λ或501λ为'λ+λ。 s λ为按模最小特征值,||min ||501 1i i s λλ≤≤=,可对A 使用反幂法求得。 2、求A 的与数40 1 5011λλλμ-+=k k 最接近的特征值)39,...,2,1(=k k i λ。 计算1)1,2,...,50=(i i λ-k μ,其模值最小的值对应的特征值k λ与k μ最接近。因此对A 进行平移变换: )39,,2,1k -A A k k ==(I μ (2) 对k A 用反幂法求得其模最小的特征值'k λ,则k λ='k λ+k μ。 3、求A 的(谱数)条件数2)(A cond 和行列式detA 。 由矩阵A 为非奇异对称矩阵可得: | | )(min max 2λλ=A cond (3) 其中max λ为按模最大特征值,min λ为按模最小特征值,通过第一问我们求得的λ和s λ可以很容易求得A 的条件数。 在进行反幂法求解时,要对A 进行LU 分解得到。因L 为单位下三角阵,行 列式为1,U 为上三角阵,行列式为主对角线乘积,所以A 的行列式等于U 的行列式,为U 的主对角线的乘积。

相关文档
最新文档