数值分析matlabWord文档格式.docx
- 文档编号:20947865
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:72.37KB
数值分析matlabWord文档格式.docx
《数值分析matlabWord文档格式.docx》由会员分享,可在线阅读,更多相关《数值分析matlabWord文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
本次实习目的是提高学生的动手能力和综合实践能力,掌握好电脑的应用上机实习是学生已经学习数值分析课程后进行的,是理论与实践相结合的重要环节,提高学生综合素质具有重要意义。
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编写,过程如下:
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
(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]'
1.0e+040*
-5.1292
200
4.2744
(3)在MATLAB命令窗口输入
A=[13;
-71];
b=[46]'
xo=zeros(2,1);
[x,n]=Jacobi(A,b,xo)
x=
1.0e+132*
1.0608
-2.5762
n=
function[x,n]=Gaussseidel(A,b,x0,eps,M)
%求解线性方程组的迭代法,其中,
%M为最大迭代次数,缺省值为100
ifnargin==3
elseifnargin==4
B=inv(D-L)*U;
f=inv(D-L)*b;
whilenorm(x-x0)>
A=[62-1;
xo=ones(3,1);
[x1,n1]=Gaussseidel(A,b1,xo)
[x2,n2]=Gaussseidel(A,b2,xo)
-0.9351
-0.5195
1.5714
n1=
16
-30.6494
-99.8052
84.2857
21
(2)在MATLAB命令窗口输入
回车得到
1.0e+084*
1.6671
2.3003
3.1739
1.0e+083*
-0.8463
-1.1678
-1.6113
[x,n]=Gaussseidel(A,b,xo)
1.0e+264*
-0.3970
2.7788
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;
在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
00.10000.20000.30000.40000.50000.60000.70000.80000.90001.0000
y1=
1.00000.81870.67030.54880.44930.36790.30120.24660.20190.16530.1353
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&
数值分析’是万万不能的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 matlab