内江师范学院数值仿真与数学实验教学示范中心 网站首页 >> 教学资源 >> 实验讲义 >> 正文
数值分析实验讲义
2014-03-04     来源:   作者:网站管理员   查看:1964  

⒈目的

数值计算的应用范围十分广泛,作为用计算机解决实际问题的基础、桥梁和纽带,是架设在数学与计算机之间的一条通道.数值计算方法实验将帮助学生理解并掌握数值计算方法这门专业课的基本理论和基本内容,准确地将所求解的数学模型简化成一系列算术或逻辑运算,上机实现其数值求解.通过实验,加深学生对一些重要算法的理解,提高学生的编程能力与解决实际问题的能力,培养学生应用计算方法解决工程计算的能力,以期达到初步的科学计算和研究的目的.

⒉实验任务分解

通过一些实例掌握数值计算的基本计算方法,针对基本计算方法,运用数值计算软件Matlab进行数学编程求解,并对问题中的各有关变量进行分析、调试和推广.

⒊实验环境介绍

计算机房

⒋实验时数

16学时

实验一

⒈实验目的与要求

通过对具体实例,理解并掌握Lagrange插值的数值算法,能够根据实例中给定的函数值表求出插值多项式和函数在某一点的近似值,并运用Matlab编程求解.

⒉实验内容

已知数据如下:

10

11

12

13

2.3026

2.3979

2.4849

2.5649

要求:

试用分别用线性插值、二次插值、三次插值分别计算在点 时的函数近似值.

⒊思考题

(1)       Lagrange插值法在编程中最关键的问题是什么?

(2)       编写一个用Newton前插值公式计算函数值的程序,要求先输出差分表,再计算 点的函数值,并应用于下面的问题:

20

21

22

23

24

1.30103

1.32222

1.34242

1.36173

1.38021

时的三次插值多项式的值.

(3)       在某海域测得一些点 处的水深 见如下数据,在矩形

区域内画出海地面的图形.

129

140

103.5

88

185.5

195

105

157.5

107.5

77

81

162

162

117.5

7.5

141.5

23

147

22.5

137.5

85.5

-6.5

-81

3

56.5

-66.5

84

-33.5

4

8

6

8

6

8

8

9

9

8

8

9

4

9

 

实验二

⒈实验目的与要求

掌握最小二乘方法,并能根据给定数据求其最小二乘一次或二次多项式,然后进行曲线拟合

⒉实验内容

已知一组实验数据如下:.

1

2

3

4

2

4

6

8

2

11

28

40

试用最小二乘法求一次拟合多项式,并将拟合曲线画出来.

⒊思考题

混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,记录了养护日期x(日)及抗压强度ykg/cm2)的数据: 

1

2

3

4

5

6

7

8

9

10

11

12

2

3

4

5

7

9

12

14

17

21

28

56

35+r

42+r

47+r

53+r

59+r

65+r

68+r

73+r

76+r

82+r

86+r

99+r

已知建立的非线性回归模型为y=a+k1*exp(m*x)+k2*exp(-m*x),要求对得到的模型和系数进行检验。 
注明:此题中的+r代表加上一个[-0.5,0.5]之间的随机数 

 

实验三

⒈实验目的与要求

通过对具体实例中给出了积分问题,学会运用Romberg算法在给定精度下计算定积分问题,并运用Matlab编程求解.

⒉实验内容

Romberg法求函数积分 ,精度为

⒊思考题

1)用Matlab求解广义积分:

     2)用复合梯形公式计算下面积分,取

并给出数值积分结果与精度 之间的误差.

实验四

⒈实验目的与要求

掌握改进的欧拉方法、三阶、四阶方法,会用三阶和四阶经典的龙格—库塔格式求解所给实例的初值问题,并运用Matlab编程求解.

⒉实验内容

1)用改进的欧拉方法求初值问题:

      

2取步长 ,写出用经典四阶龙格—库塔方法求解初值问题

的计算公式.

⒊思考题          

1)用欧拉算法编程求解解一阶微分方程初值问题:

2)小船渡过宽为 的河流A-B 为河水流速, 为静水速度,渡船时船头始终指向B点;

a)建立小船的航线方程求其解析解;

b)设 m ,用数值解法求渡河所需要时间和任意时刻小船及航行的曲线,作图,并与解析解比较.若流速

,其结果如何?

实验五

⒈实验目的与要求

通过求解方程,学会运用Newton迭代法求解方程,并运用Matlab编程求解.

⒉实验内容

公元1225年,Lenardo宣布他求得方程

的一个根 .当时颇为轰动,但无人知道他是用什么方法得到的.现在,请你试试用Newton迭代法求解这个结果.

⒊思考题          

(1)        用弦截法求 0.4附近的一个实根,初始值 ,精确到4位有效数字.

(2)        用对分区间法求解方程

在区间 上的误差小于 的一个根,并记录对分区间的次数.

实验六

⒈实验目的与要求

雅可比迭代方法和高斯—赛德尔迭代方法思想,学会用该方法求解方程组,并比较收敛速度。

⒉实验内容

雅可比迭代方法和高斯—赛德尔迭代方法求解下列方程组:

并比较收敛速度。

⒊思考题          

    用超松弛法求解上述方程组,并与高斯—赛德尔迭代方法的速度进行比较。

实验七

⒈实验目的与要求

掌握列主元的高斯消去法思想,能够利用列主元的高斯消去法求解任意阶数的线性方程组。

⒉实验内容

列主元的高斯消去法解下列方程组

.

 

 

 

 

 

 


 

供参考的实验过程:

实验一

function  y=lagrange(x0,y0,x)

w=length(x0);

n=w-1; 

m=length(x);

for i=1:m

    z=x(i);

    s=0;

        for k=1:n+1

            p=1;

                for j=1:n+1

                    if j~=k

                            p=p*(x(i)-x0(j))/ (x0(k)-x0(j));

                    end

                end

                s=p*y0(k)+s;

        end

        y(i)=s;

end

在命令窗口调用函数M文件lagrange([10 11 12 13],[2.3026 2.3979 2.4849 2.5649],11.75),即可得到线性插值结果。其它插值类似可得。

 

实验二

function z=zuixiaoercheng(x,y)

syms sumx sumy sumxy sumx2;

sumx=0;

sumy=0;

sumxy=0;

sumx2=0;

n=length(x)

 for i=1:n

    sumx=sumx+x(i);

    sumy=sumy+y(i);

    sumxy=sumxy+(x(i))*(y(i));

    sumx2=sumx2+(x(i))*(x(i));

 end

 sumx

 sumy

 sumxy

 sumx2

 b=(sumy*sumx-sumxy*n)/(sumx*sumx-sumx2*n)

 a=(sumy-b*sumx)/5

  plot(x,y,'*')

hold on

plot(x,a+b*x)

在命令窗口调用函数M文件zuixiaoercheng([2 4 6 8],[2 11 28 40]),输出结果如下:

b = 2.2208

a = 1.9966

图略。

实验三

function t=Romberg(fname,a,b,e)%Rom

%Romberg法求函数的积分

%fname是被积函数,a是上限,b是下限,e为精度(默认1e4

if nargin<4 ,e="1e-4;

end

i=1; j=1; h=b-a;

T(i,1)=h/2*(feval(fname,a)+feval(fname,b));

T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2;

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

while abs(T(i+1,i+1)-T(i,i))>e

i=i+1; h=h/2;

   T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2;

   for j=1:i

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

   end

end

T

t=T(i+1,j+1)

h

format long;Romberg(inline( 'sin(x)./x),eps,1,0.5e6);format short;

T=

0.92073549240395

               0

               0

               0

0.93979328480618

0.94614588227395

               0

               0

0.94451352166539

0.94608300406367

0.94608693395179

               0

0.94569086358270

0.94608331088847

0.94608306935092

0.94608307038722

 

 

 

 

 

t=0.94608307038722

 

实验四

1

function E=gaijineuler(a,b,ya,M)

% Input - a and b are the left and right end points

%       -ya is the initial condition y(a)

%       -M is the number of steps

% Output T is the vector of abscissas and Y is the vector of

%        ordinates

h=(b-a)/M;

Y=zeros(1,M+1);

Yp=0;

Yc=0;

T=a:h:b;

Y(1)=ya;

for j=1:M

    Yp=Y(j)+h*(-Y(j))/2;

    Yc=Y(j)+h*(-Yp)/2;

    Y(j+1)=(Yp+Yc)/2;

end

T

Y

在命令窗口调用函数M文件gaijineuler(0,1.5,1,10),输出结果:
T = 0.0000    0.1500    0.3000    0.4500    0.6000    0.7500    0.9000    1.0500    1.2000 1.3500    1.5000

Y = 1.0000    1.0778    1.1617    1.2521    1.3495    1.4545    1.5677    1.6897    1.8212  1.9629    2.1156

 2

编写Matlab函数M文件Lk如下:

function z=Lk(x0,y0,h,N)

X=zeros(2,N);

function  q=f(x,y)

q=x*cos(x+y);

end

for n=1:N

    x1=x0+h;

   k1=f(x0,y0);

    k2=f(x0+h/2,y0+h/2*k1);

    k3=f(x0+h/2,y0+h/2*k2);

    k4=f(x0+h,y0+h*k3);

    y1=y0+h/6*(k1+2*k2+2*k3+k4);

    X(1,n)=x1;

    X(2,n)=y1;

    x0=x1;

    y0=y1;

end

X

end

在命令窗口调用函数M文件Lk(1,0,0.4,7),输出结果如下:

1.40000000000000   1.80000000000000   2.20000000000000

0.12849071567271   0.03987952838616  -0.23311764949180

2.60000000000000   3.00000000000000   3.40000000000000   3.80000000000000

  -0.61730705974470  -1.05090251367142  -1.49621004434439  -1.93718308658337

实验五

function x=Newton(fname,dfname,x0,e,N)

%用途:Newton迭代法解非线性方程f(x)0

%fnamedfname分别表示f(x)及其导数函数的M函数句柄或内嵌函数表达式,

%x0为迭代初值,e为精度(默认值le-4),

%x0为返回数值解,并显示计算过程,设置迭代次数上限N以防发散(默认500次)

if nargin<5 ,

    N=500;

end

if nargin<4 ,

    e=l0^(-4);

end

x=x0;

x0=x+2*e;

k=0;

fprintf('It.no=%2d   x%[2d]=%12.9fn',k,k,x)

while abs(x0-x)>e

   k=k+1

   x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);

   fprintf('It.no=%2d  x[%2d]=%12.9fn',k,k,x)

if k==N,

    fprintf('已达到迭代次数上限')

    break

end

end

在命令窗口编写内嵌函数表达式,并调用函数M文件Newton

>>fun=inlinex3+2x2+10x-20’);

>>dfun=inline( ‘3x2+4x+10’);

>>Newton(fun,dfun,1.5,0.5e-6,500);

It.no=0     x[0]=1.500000000

It.no=1     x[1]=1.373626374

It.no=2     x[2]=1.368814820

It.no=3     x[3]=1.368808108

It.no=4     x[4]=1.368808108

 

实验六

function X=jacobi(A,B,P,delta,max1)

%Input -A is an N*N nonsingular matrix

%       -B is an N*1 matrix

%      -P is an N*1 matrix; the initial guess

%      -delta is the tolerance for P

%      -max1 is the maximum number of iterations

%Output -X is an N*1 matrix: the jacobi approximation to the solution of 

%        AX=B

N=length(B);

for k=1:max1

    for j=1:N

        X(j)=(B(j)-(A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N])))/A(j,j);

    end

    err=abs(norm(X'-P));

    relerr=err/(norm(X)+eps);

    P=X';

    if(err

        break

    end

end

X=X';

在命令窗口调用函数M文件jacobi([10 1 2 0;1 11 1 3;2 1 10 1;0 3 1 8],[6 25 11 15]',[0 0 0 0]',1.0e-005,10000)输出结果如下:

ans =   1.0000    2.0000   -1.0000    1.0000

实验七

编写Matlab命令M文件chap3_1 如下:

Clear

fprintf(‘增广矩阵’)

A=[0.792,0.81,0.9,0.6867;1,1,1,0.8338;1.331,1.21,1,1,1.000]

                                                   %输入增广距阵

%第一次选主元,第三行和第一行交换

fprintf第一次选主元后的增广距阵

tempo=A(3,:);A(3,:)= A(1,:);A(1,:)=tampo;A

%第一次消元

fprintf(‘第一次消元后的增广距阵’)

A2,:= A2,:- A1,:* A2,1/ A1,1;

A3,:= A3,:- A1,:* A3,1/ A1,1;A

%第二次选主元,第三行和第二行交换

fprintf(‘第二次消元后的增广距阵’)

tempo=A(3,:);A(3,:)= A(2,:);A(2,:)=tampo

%第二次消元

fprintf(‘第二次消元后的增广距阵’)

A3,:= A3,:- A2,:* A3,2/ A2,2;A

%回代求解

fprintf(‘回代求解’)

x(3)=A(3,4)/A(3,3);

x(2)=(A(2.4)-A(2,3)*x(3))/A(2,2);

x(1)=(A(1,4)-A(1,2,3)*x(2:3)’)/A(1,1)

x

在命令窗口调用M文件chap3_1

>> chap3_1

增广距阵

A=

0.7290       0.8100  0.9000  0.6867

1.0000  1.0000  1.0000  0.8338

1.3310  1.2100  1.1000  1.0000

第一次选主元后的增广距阵

A=

1.3310  1.2100  1.1000  1.0000

1.0000  1.0000  1.0000  0.8338

0.7290  0.8100  0.9000  0.6867

第一次消元后的增广距阵

A=

1.3310       1.2100  1.1000  1.0000

0         0.0909  0.1763  0.0825

0         0.1473  0.2975  0.1390

第二次选主元后的增广距阵

A=

1.3310  1.2100  1.1000  1.0000

0  0.1473  0.2975  0.1390

0  0.0909  0.1763  0.0825

第二次消元后的增广距阵

A=

1.3310  1.2100  1.1000  1.0000

 0  0.1473  0.2975  0.1390

           0      0  -0.0101  -0.0033

回带求解

X=

  0.2245  0.2814  0.3279

 

最新动态
中心关于计算机实验室教学软...
关于第十五届全国大学生数学...
关于参加2023年全国赛暑假培...
数据库原理及应用 教学大纲(...
数据分析与可视化 教学大纲(...
Python语言程序设计 教学大纲...
《数据结构 与算法》2022级课...
《Java程序设计》2022级课程...
中心风采

内江师范学院数值仿真与数学实验教学示范中心 © 版权所有

建议使用:1024*768分辨率 IE8.0以上版本和中文大字符集