ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:91.19KB ,
资源ID:3562443      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3562443.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值分析实验讲义.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值分析实验讲义.docx

1、数值分析实验讲义数值分析实验讲义卜兵数值分析实验一Matlab基本操作1. 学习目的1) 熟悉Matlab的运行环境及各种窗口 2) 掌握Matlab的矩阵变量类型,矩阵输入和矩阵的基本运算 3) 掌握命令及函数文件的作用及区别,并编写简单的M文件 4) 能熟练的向查寻目录中添加新目录,掌握常用的Matlab系统命令 5) 掌握Matlab的控制语句 6) 熟悉数组运算 7) Matlab图形处理功能 8) Matlab程序初步设计 2. 学习内容 (1) Matlab启动与环境设置 (2) Matlab基本运算操作 (3) Matlab的文件 例1: 编写命令文件 demo1 完成以下操作

2、建数组 a=1,2,3,.,20,b=1,3,5,.,39,并求 a, b内积 操作 1) 主窗口点击新建按钮 2) 在弹出的文本编辑窗口添加 a=1:20 b=1:2:39 sum=a*b 3) 单击保存按钮将文件命名为 demo1保存在例1新建文件夹中 4) 在Command Window中输入 demo1并回车 (4) 数组运算(相同类型的运算)1) :引用 *A (:,n) 矩阵A 的n列所有元素 A=rand(4,5); A (:,3)=(1:4) %引用的为一列向量 *A (m,:) 矩阵A 的m行所有元素 A (4,:)=2:6 *A (:) 矩阵A 所有元素 A (:) 2)

3、维 *reshape(X,M,N,P,.)将已知矩阵X为 M*N*P.矩阵 a=1:12; b=reshape(a,2,6) *用:引用 a=zeros(3,4); a(:)=1:12 %Matlab矩阵元素按列存储 a(4) a(1,2) 3) .运算 同类型矩阵元素对应元素运算 * “.*” ,“./”与”.运算 a=1 2 3;2 3 4;3 4 5; b=1 1 1;2 2 2;3 3 3; a.*b %a,b对应元素相乘 a*b %a,b矩阵相乘 a.b %a对应元素做分母 a./b %b对应元素做分母 * “.”与 b=1 1 1;2 2 2;3 3 3; b3 b.3 b*b*b

4、 %等于b3 例 :编写函数文件demo3实现 sgn函数功能 操作:1)新建 M 文件,并编辑如下 function val=demo3(x) if x0 val=1; elseif xdemo3(0) demo3(90) demo3(-12) 3) 递归调用 例 :编写函数文件demo4,返回输入整数的阶乘 操作:1)新建 M文件,并编辑如下 function val=demo4(n) if n=1|n=0 val=1; else val=n*demo3(n-1); %递归 end 或 function val=demo3(n) val=1; if n=0 val=1; else for

5、i=1:n val=val*i; end end (6) Matlab 图形处理初步 1) 二维图形 plot(x,y,s) 例 1: x=rand(100,1); y=rand(100,1); z=x+y.*i; plot(y) plot(z); 例 2: x=0.1:0.01*pi:pi; y=sin(x).*cos(x); plot(x,y); 注意 : 当两个输入变量同为向量时,x,y 维数相同.x,y 为同阶矩阵时将按列或行进行. 例 3: x=0.1:0.01*pi:pi; y=sin(x),cos(x); plot(x,y) plot(x,x,y) plot(x,y(:,1),x

6、,y(:,2) 例 4: x=0.1:0.1*pi:2*pi; y=sin(x); z=cos(x); plot(x,y,-k,x,z,-.rd) 注 :s图形设置选项 选项 说明 选项 说明 - 实线 y 黄色 : 点线 r 红色 -. 点划线 g 绿色 . 虚线 k 黑色 o 圆号 + +号 * *号 d 菱形 2) 三维图形 * plot3(x,y,z,s) %其中x,y和z 为 3个相同维数的向量 * plot3(X,Y,Z,s) %其中X,Y 和Z 为 3个相同阶数的矩阵,函 数绘 3矩阵的列向量曲线 * plot3(x1,y1,z1,s1,x2,y2,z2,s2,) 例 1: x=

7、0 :pi/50 :10*pi; y=sin(x); z=cos(x); plot3(x,y,z); 例 2: x,y=meshgrid(-2:0.1:2,-2:0.1:2); %产生网格点 z=x.*exp(-x.2-y.2); plot3(x,y,z); 例 3: x=-8:0.5:8; y=x; a=ones(size(y)*x; b=y*ones(size(x); c=sqrt(a.2+b.2)+eps; z=sin(c)./c; surf(x,y,z) mesh(x,y,z) 3) 特殊的三维图形函数 * x,y,z=sphere(n) % 画球,n默认值20 例1 : a,b,c=

8、sphere(40); surf(a,b,c) axis(equal); axis(square); * x,y,z=cylinder(R,N) %R 母线向量,N分格数 例2 : x=0 :pi/20 :pi*3; r=5+cos(x); a,b,c=cylinder(r,30); mesh(a,b,c) 练习:例:需要考察函数sin(x)与它的各阶Taylor展开式 的近似情况。请编写一个函数(程序)。当输入Taylor展开式的阶数后,函数将自动画出y=sin(x),y=x, y=,直到要求的次数位置的各阶展开式在上的图形. 程序代码:function plot_sin_taylor(n)

9、x=-pi:pi/20:pi;plot(x,sin(x);hold on m=fix(n+1)/2); y=0; for k=1:m y=y+(-1)(k-1)/prod(1:2*k-1)*x.(2*k-1); plot(x,y); end axis(-pi pi -1.5 1.5); xlabel(x);ylabel(y);hold off作业:请仿照上例考察与它的各阶Taylor展开式在-1,1内的近似情况. 数值分析实验二(上)第三章 解线性方程组的直接方法1. 实验目的 1)熟悉用Matlab 向量运算 2)用Matlab矩阵求逆及三角分解 3)掌握解线性方程组的直接方法 2. 试验内

10、容 (1) Gauss_Jordan列主元消去法求方阵逆.选择列主元, 消去对角线上方和下方的元素. 用其实现矩阵求逆如下: function A,det=GaJo_inv(A) % Gauss-Jordan列主元消去法求方阵逆 P178 % A,det=GaJo_inv(A) % A 要求逆矩阵 % det 按需求返回 A 的行列式 % A 返回逆矩阵,放在A 中 n=size(A); if n(1)=n(2) error(不是方阵!); end n=n(1);det=1; flag=1:n; for k=1:n t=find(abs(A (k:n,k)=max(abs(A (k:n,k);

11、 %寻找主元 t=t(1)+k-1; flag(k)=t; if t=k p=A (k,:); A (k,:)=A (t,:); A (t,:)=p; %交换行 det=-det; end if A (k,k)=0 error(矩阵不可逆!); end det=det*A (k,k); h=1/A (k,k); A (k,k)=h; A (1:k-1 k+1:n,k)=A (1:k-1 k+1:n,k)*(-h); for i=1:n if i=k A (i,1:k-1 k+1:n)=A (i,1:k-1 k+1:n)+A (k,1:k-1. k+1:n)*A (i,k); %消去 end e

12、nd A (k,1:k-1 k+1:n)=A (k,1:k-1 k+1:n)*h; end for k=n-1:-1:1 t=flag(k); if k=t %调整 A 列(因为原矩阵换行) p=A (:,t); A (:,t)=A (:,k); A (:,k)=p; end end 例1: 解方程组 并验证. 解: A=0.6428 0.3475 -0.8468;0.3475 1.8423 0.4759;-0.8468 0.4759 1.2147; b=0.4127;1.7321;-0.8621; x=GaJo_inv(A)*b A*x-b (2) Gauss 消去法变形-选主元的三角变形法

13、 通过交换矩阵的行实现矩阵的 PA=LU 分解,采用与列主元相似的方法, 避免一些奇异情况的情况下分解无法进行.具体实现如下: function L,A,P=LU_P(A) %选主元的三角变形法P181 %L,A,P=LU_P(A) % A 待分解阵 % L 返回单位下三角阵 % A 返回上三角阵,存储在原矩阵中 % P 返回排列阵 n=size(A); if n(1)=n(2) error(不是方阵!); end n=n(1);flag=1:n; P=eye(n,n);L=P; for k=1:n if k=1 A (k:n,k)=A (k:n,k)-A (k:n,1:k-1)*A (1:k

14、-1,k); end t=find(abs(A (k:n,k)=max(abs(A (k:n,k); t=t(1)+k-1; %选主元 flag(k)=t; if t=k p=A (k,:); A (k,:)=A (t,:); A (t,:)=p; end %交换行 if abs(A (k,k) A=rand(4,4)*10; L,U,P=LU_P(A) P*A-L*U 数值分析实验二(下)第三章 解线性方程组的迭代方法1. 实验目的 用Matlab实现Jacobi 及超松弛跌代法 2. 实验内容 (1) Jacobi 迭代法解线性方程组 迭代公式: function x,n=Jacobi_S

15、olve(A,b,x0,dalt) % Jacobi跌代法解线性方程组P213 %x,n=Jacobi_Solve(A,b,x0,dalt) % A 方程组系数 % b 常数项(列向量) % x0 初始值,默认为0 % dalt 精度,默认为 10 % x 返回跌代结果 % n 返回跌代次数 e=1; i=0; r=size(b); a=b; if nargin4 dalt=1e-8; end if nargin=dalt Y=b-A*x; e=max(abs(Y-x); x=Y; i=i+1; end if nargout1 n=i; end 例1 对不同初值用 Jacobi 迭代法解例 1

16、 中方程组AX=b,比较结果. x0=1.5 2.0 3 1 1.5 1.8; x,n=Jacobi_Solve(A,f,x0) x,n=Jacobi_Solve(A,f) (2) 超松弛跌代法解线性方程组 超松弛跌代法是Gauss-Seidel跌代法的一种加速,是解大型稀疏矩阵方程组的有效方法之一. 但需要选择好的加速因子(最佳松弛因子). function x,n=SOR_Solve(A,b,w,x0,dalt) % 超松弛跌代法解线性方程组P213 %x,n=SOR_Solve(A,b,w,x0,dalt) % A 方程组系数 % b 常数项(列向量) % w 松弛因子 % x0 初始值

17、,默认为0 % dalt 精度,默认为 10 % x 返回跌代结果 % n 返回跌代次数 r=size(b); a=b; if nargin5 dalt=1e-8; end if nargindalt e=0; for i=1:r t=x(i); x(i)=(1-w)*x(i)+w*(b(i)-A (i,:)*x); t=abs(x(i)-t); if te e=t; end end m=m+1; end if nargout1 n=m; end 例2 对不同松弛因子用SOR解例 1 中方程组A X =b,并与例 2 比较结果. 解: x,n=SOR_Solve(A,f,1.42) x,n=S

18、OR_Solve(A,f,1) 数值分析实验三第四章 函数的数值逼近一. 实验目的 1) Matlab中多项式的表示及多项式运算 2) 用Matlab实现拉格朗日及牛顿插值法 3) 用多项式插值法拟合数据 二. 实验内容 1. 多项式运算 (1) 多项式表示对多项式,用以下的行向量表示:。这样把多项式转化为向量运算。 p=1,-5,6,-33; poly2sym(p) %符号表示多项式 ans = x3-5*x2+6*x-33 a=1,2,3;2,3,4;3,4,5; p1=poly(a) %矩阵a的特征多项式 p1 = 1.0000 -9.0000 -6.0000 -0.0000 root=

19、-5 -3+4i -3-4i; p=poly(root) %生成以 root中元素为根的多项式 p = 1 11 55 125 poly2sym(p) ans =x3+11*x2+55*x+125 (2) 多项式运算 p=1,11,55,125; %建立多项式p a=1:2:10 ; %向量a b=1,2;2,1; %方阵b polyval (p,a) %计算a对应元素的多项式值 ans = 192 416 800 1392 2240 polyval(p,b) %矩阵b对应元素多项式值 ans = 192 287 287 192 polyvalm(p,b) %按矩阵多项式计算 ans = 24

20、8 168 168 248 roots(p) %多项式p的所有根 ans = -5.0000 -3.0000 + 4.0000i -3.0000 - 4.0000i p=2 -5 6 -1 9; d=3 -90 -18; pd=conv(p,d) %多项式p,d相乘 pd = 6 -195 432 -453 9 -792 -162 p1=deconv(pd,d) %p1 为多项式pd 除 d(等于p) p1 = 2 -5 6 -1 9 p=1 2 3 4 5 6; q=3 2 1; s,r=deconv(p,q) %s 为商,r余项 s = 0.3333 0.4444 0.5926 0.790

21、1 r = 0 0 0 0 2.8272 5.2099 Dp=polyder(p) %对p求导所得多项式 Dp = 5 8 9 8 5 2拉格朗日插值法 (1) 算法实现 function p=Lag_polyfit(X,Y) %Matlab函数文件 Lag_polyfit.m %p=Lag_polyfit(X,Y) % X 拟合自变量 % Y 拟合函数值 % p 所得的拟合多项式系数 if size(X)=size(Y) error(变量不匹配); end %如果要拟合的函数值与自变量维数不一样,则退出报错 tic %开始记时 format long g %设置最合适的数字格式 r=size

22、(Y); n=r(2); %n为要拟合的数据长度 p=zeros(1,n); %保存所得多项式系数 p0=p; b=0 ; %工作变量 W=poly(X); %W为以X为根的多项式 dW=polyder(W); %dW 为对多项式W 求导后的多项式系数 z=polyval(dW,X); %z 为以 dW 为系数的多项式对X 的值 A=1 1; r =A ; %A,r 为长度为 2的(1,2)向量 for i=1:n %计算循环开始 A=1,-X (i); %A 为一次多项式x-x(i)系数 p0,r=deconv(W,A); %进行多项式除法W/A,p0 为商 b=Y (i)/z(i); p0

23、=b.*p0 ; %p0为累加项 p=p+p0 ; end %循环结束 disp(toc) %显示所用时间 (2) 例题 %建立Matlab命令文件 LagSin.m %用拉格朗日插值法拟合 0,2*pi上的sin函数 程序命令行: x0=linspace(0,2*pi,10); y0=sin(x0); %拟合数据采样 p=Lag_polyfit(x0,y0); %调用Lag_polyfit 计算拟合多项式 x=0 :0.2:2*pi; y1=sin(x); %sin 函数值 y2=polyval(p,x); %拟合多项式值 plot(x,y1,x,y2,r) %sin 函数(蓝色)与多项式(

24、红色)效果图 命令窗口中输入 lagsin观察图形输出窗口 lagsin %函数(文件)名不区分大小写 3牛顿插值法 (1) 均差表计算及算法实现 function p=Newton_Polyfit(X,Y) %Matlab函数文件 Newton_polyfit.m %牛顿插值法多项式拟合 %p=Newton_Polyfit(X,Y) % X 拟合自变量 % Y 拟合函数值 % p 所得的拟合多项式系数 if size(X)=size(Y) error(变量不匹配?);%如果要拟合的函数值与自变量维数不一样,则退出报错 end format long g %设置最合适的数字格式 r=size(

25、X); n=r(2); %n 为要拟合的数据长度 M=ones(n,n); %均差表工作矩阵 M(:,1)=Y; %设置均差表第一列为函数值 for i=2:n for j=i:n %高阶均差推算 M(j,i)=(M(j,i-1)-M(j-1,i-1)/ (X (j)-X (j-i+1); end end M %显示均差表 p0=zeros(1,n-1) M(1,1);p=p0 ; %拟合多项式存储向量及初值 for i=1:n-1 p1=M(i+1,i+1).*poly(X (1:i); %对应阶均差的多项式 p0=zeros(1,n-i-1) p1; p=p+p0 ; %对应项累加 end

26、 (2) 例题 %Matlab 命令文件 NewtonSin.m %用牛顿插值法拟合 0,2*pi上的 sin函数 x0=linspace(0,2*pi,10); y0=sin(x0); %拟合数据采样 p=Newton_polyfit(x0,y0); %调用Newton_polyfit 计算拟合多项式 x=0 :0.2:2*pi; y1=sin(x); %sin 函数值 y2=polyval(p,x); %拟合多项式值 plot(x,y1,x,y2,r) %sin 函数(蓝色)与多项式(红色)效果图 命令窗口中输入 newtonsin观察图形输出窗口 newtonsin 数值分析实验四第五章

27、 数值积分 1. 实验目的 1) 熟悉Matlab矩阵操作 2) 用Matlab实现数值积分Cores,Romberg及复化Gauss算法 3) 学会数值积分有关应用 2. 实验内容 (1) Cores积分 在使用牛顿-柯斯特公式时,通过提高阶为提高精度的途径并不能取得满意的效果.通常采用复化积分法.以复化柯斯特公式为例: 将每个区间 4 等分, 依此用柯斯特公式 function val=Cores_int(Y,u) % val=Cores_int(Y,u) %Y积分函数数值 % u区间间隔 % val返回积分值 r=size(Y); n=r(2); v=n; h=4*u; m=mod(n-1,4); if m=0 %如果取值点恰巧满足复化区间数 t=(n-1)/4; x=ones(t,1); val=(h/90)*(7*Y(1)+32*(Y(2:4:n-3)*x)+12*(Y(3:4:n-2)*x)+32*(Y(4:4:n-1)*x)+ .+14*(Y(5:4:n-4)*ones(size(5:4:n-4)+7*Y(n); e

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

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