数值分析matlab.docx

上传人:b****5 文档编号:7819733 上传时间:2023-01-26 格式:DOCX 页数:11 大小:72.37KB
下载 相关 举报
数值分析matlab.docx_第1页
第1页 / 共11页
数值分析matlab.docx_第2页
第2页 / 共11页
数值分析matlab.docx_第3页
第3页 / 共11页
数值分析matlab.docx_第4页
第4页 / 共11页
数值分析matlab.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数值分析matlab.docx

《数值分析matlab.docx》由会员分享,可在线阅读,更多相关《数值分析matlab.docx(11页珍藏版)》请在冰豆网上搜索。

数值分析matlab.docx

数值分析matlab

 

数值分析上机实习报告

 

姓名:

XX

学号:

XX

专业:

XX

联系电话:

XX

 

序言

本次实习采用MATLAB程序计算。

MATLAB将数值分析、矩阵运算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互环境中,功能强、效率高。

MATLAB采用人们习惯的数学描述方法,不需要传统的编程语言进行前后处理。

基于上述优点,本次实习采用MATLAB进行运算。

 

目录

一、实习目的

二、实习内容

1.第二题

1.1用Jacobi迭代法的MATLAB程序

1.2用Gauss-seidel迭代法的MATLAB程序

2.第五题

三、实习总结

 

1、实习目的

本次实习目的是提高学生的动手能力和综合实践能力,掌握好电脑的应用上机实习是学生已经学习数值分析课程后进行的,是理论与实践相结合的重要环节,提高学生综合素质具有重要意义。

2、实习内容

1.第二题

题目:

(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4];b1=[-3,2,4]',b2=[100,-200,345]',

(2)A行分别为A1=[1,0.8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1]’,b2=[5,0,-10]’,

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

分析上题目,知

(1)

(2)(3)中的系数矩阵分别表示为A1,A2,A3。

分析知A1行对角占优,Jocobi迭代和Gauss-Seidel迭代均收敛。

A2的Jocobi迭代矩阵

,故发散。

如果用,

,。

A3的Jocobi

Gauss-Seidel迭代矩阵的谱半径为

,故Gauss-Seidel迭代也发散。

进行MATLAB编写,过程如下:

1.1用Jacobi迭代法的MATLAB程序

function[x,n]=Jacobi(A,b,x0,eps,varargin)

%求解线性方程组的迭代法,其中,

%A为方程组的系数矩阵

%b为方程组的右端项

%eps为精度要求,缺省值为1e-5

%varargin为最大迭代次数,缺省值为100

%x为方程解

%n为迭代次数

ifnargin==3

eps=1.0e-6;

M=200;

elseifnargin<3

error

return

elseifnargin==5

M=vargin{1};

end

D=diag(diag(A));

L=tril(A,-1);

U=triu(A,1);

I=eye(length(A));

B=I-inv(D)*A;

f=inv(D)*b;

x=B*x0+f;

n=1;

whilenorm(x-x0)>=eps

x0=x;

x=B*x0+f;

n=n+1;

if(n>=M)

disp('Warning:

迭代次数太多,可能不收敛!

');

return;

end

end

(1)在MATLAB命令窗口输入

>>A=[62-1;14-2;-314];

>>b1=[-3,2,4]';

>>b2=[100,-200,345]';

>>xo=zeros(3,1);

>>[x1,n1]=Jacobi(A,b1,xo)

>>[x2,n2]=Jacobi(A,b2,xo)

回车得到

x1=

-0.7273

0.8081

0.2525

n1=

24

x2=

36.3636

-2.0707

114.0404

n2=

30

(2)在MATLAB命令窗口输入

>>A=[10.80.8;0.810.8;0.80.81];b1=[321]';b2=[50-10]';

xo=zeros(3,1);

>>[x1,n1]=Jacobi(A,b1,xo)

>>[x2,n2]=Jacobi(A,b2,xo)

回车得到

Warning:

迭代次数太多,可能不收敛!

x1=

1.0e+040*

-5.1292

-5.1292

-5.1292

n1=

200

Warning:

迭代次数太多,可能不收敛!

x2=

1.0e+040*

4.2744

4.2744

4.2744

n2=

200

(3)在MATLAB命令窗口输入

>>A=[13;-71];b=[46]';

>>xo=zeros(2,1);

>>[x,n]=Jacobi(A,b,xo)

回车得到

Warning:

迭代次数太多,可能不收敛!

x=

1.0e+132*

1.0608

-2.5762

n=

200

1.2用Gauss-seidel迭代法的MATLAB程序

function[x,n]=Gaussseidel(A,b,x0,eps,M)

%求解线性方程组的迭代法,其中,

%A为方程组的系数矩阵

%b为方程组的右端项

%eps为精度要求,缺省值为1e-5

%M为最大迭代次数,缺省值为100

%x为方程解

%n为迭代次数

ifnargin==3

eps=1.0e-6;

M=200;

elseifnargin==4

M=200;

elseifnargin<3

error

end

D=diag(diag(A));

L=tril(A,-1);

U=triu(A,1);

B=inv(D-L)*U;

f=inv(D-L)*b;

x=B*x0+f;

n=1;

whilenorm(x-x0)>=eps

x0=x;

x=B*x0+f;

n=n+1;

if(n>=M)

disp('Warning:

迭代次数太多,可能不收敛!

');

return;

end

end

(1)在MATLAB命令窗口输入

>>A=[62-1;14-2;-314];b1=[-3,2,4]';b2=[100,-200,345]';

xo=ones(3,1);

>>[x1,n1]=Gaussseidel(A,b1,xo)

>>[x2,n2]=Gaussseidel(A,b2,xo)

回车得到

x1=

-0.9351

-0.5195

1.5714

n1=

16

x2=

-30.6494

-99.8052

84.2857

n2=

21

(2)在MATLAB命令窗口输入

>>A=[10.80.8;0.810.8;0.80.81];b1=[321]';b2=[50-10]';

>>xo=zeros(3,1);

>>[x1,n1]=Gaussseidel(A,b1,xo)

>>[x2,n2]=Gaussseidel(A,b2,xo)

回车得到

Warning:

迭代次数太多,可能不收敛!

x1=

1.0e+084*

1.6671

2.3003

3.1739

n1=

200

Warning:

迭代次数太多,可能不收敛!

x2=

1.0e+083*

-0.8463

-1.1678

-1.6113

n2=

200

(3)在MATLAB命令窗口输入

>>A=[13;-71];b=[46]';

>>xo=zeros(2,1);

>>[x,n]=Gaussseidel(A,b,xo)

回车得到

Warning:

迭代次数太多,可能不收敛!

x=

1.0e+264*

-0.3970

2.7788

n=

200

2.第五题

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

注:

此方程的精确解为:

y=exp(-20*x)

进行MATLAB编写,过程如下:

function[x,y]=Runge_Kutta4(f,x0,y0,h,N)

%标准四阶Runge_Kutta方法,其中,

%f为一阶微分方程函数

%x0,y0为初值

%h为步长;

%x为Xn构成的向量

%y为Yn构成的向量

x=zeros(1,N+1);

y=zeros(1,N+1);

x

(1)=x0;

y

(1)=y0;

forn=1:

N

x(n+1)=x(n)+h;

K1=h*feval(f,x(n),y(n));

K2=h*feval(f,x(n)+h/2,y(n)+K1*h/2);

K3=h*feval(f,x(n)+h/2,y(n)+K2*h/2);

K4=h*feval(f,x(n)+h,y(n)+h*K3);

y(n+1)=y(n)+h*(K1+2*K2+2*K3+K4)/6;

end

在MATLAB命令窗口输入

>>a=0;

>>b=1;

>>h1=0.1;

>>N1=(a+b)/h1;

>>h2=0.2;

>>N2=(a+b)/h2;

>>f=inline('-20*y','x','y')

>>[x1,y1]=Runge_Kutta4(f,0,1,h1,N1)

>>[x2,y2]=Runge_Kutta4(f,0,1,h2,N2)

>>x3=0:

0.01:

1;

>>y3=exp(-20*x3);

>>plot(x1,y1,'r',x2,y2,'b',x3,y3,'g')

回车得到

f=

Inlinefunction:

f(x,y)=-20*y

x1=

00.10000.20000.30000.40000.50000.60000.70000.80000.90001.0000

y1=

1.00000.81870.67030.54880.44930.36790.30120.24660.20190.16530.1353

x2=

00.20000.40000.60000.80001.0000

y2=

1.00000.45170.20410.09220.04160.0188

图1中,红色线代表步长为0.1时所绘制的曲线,蓝色线代表步长为0.2时所绘制的曲线,绿色线代表y=exp(-20*x)曲线,对比如下:

 

图1

3、实习总结

本次上机实习对MATLAB编程进行了一次真实演练,感觉编程并不是一件太容易的事情,要用心去体会MATLAB程序的脉络,每个字符,每个句子,都要好好的去专研,去把握。

怎样使用最少的语言,得到结果的最快是现阶段不太容易做的事,所以本次实习主要对MATLAB的语言进行了认识,了解,并在做题时进行了一定的掌握。

同时这次实习也是对数值分析进行了回顾与演练。

了解数值分析的内涵,同一题目用不同方法做的结果不同,这表明一种方法适合对给定条件下的题目进行使用。

并且通过用MATLAB进行数值分析计算,更好的去观看得到的结果,更加形象,具体。

我的感想是:

‘MATLAB&数值分析’不是万能的,但是没有‘MATLAB&数值分析’是万万不能的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1