数值分析编程及运行结果高斯顺序消元法资料_第1页
数值分析编程及运行结果高斯顺序消元法资料_第2页
数值分析编程及运行结果高斯顺序消元法资料_第3页
数值分析编程及运行结果高斯顺序消元法资料_第4页
数值分析编程及运行结果高斯顺序消元法资料_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高斯消元法1.程序:clearformat ratA=input('输入增广矩阵A=')m,n=size(A);for i=1:(m-1)numb=int2str(i);disp('第',numb,'次消元后的增广矩阵')for j=(i+1):mA(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);endAend%回代过程disp('回代求解')x(m)=A(m,n)/A(m,m);for i=(m-1):-1:1x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i);endx

2、2.运行结果:高斯选列主元消元法1. 程序:clearformat ratA=input('输入增广矩阵A=')m,n=size(A);for i=1:(m-1) numb=int2str(i);disp('第',numb,'次选列主元后的增广矩阵')temp=max(abs(A(i:m,i); a,b=find(abs(A(i:m,i)=temp);tempo=A(a(1)+i-1,:);A(a(1)+i-1,:)=A(i,:);A(i,:)=tempodisp('第',numb,'次消元后的增广矩阵') for

3、 j=(i+1):m A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i); end Aend%回代过程 disp('回代求解') x(m)=A(m,n)/A(m,m);for i=(m-1):-1:1 x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i); end x2.运行结果:追赶法1. 程序:function x,L,U=zhuiganfa(a,b,c,f) a=input('输入矩阵-1对角元素a=');b=input('输入矩阵对角元素b=');c=input('输入矩阵+

4、1对角元素c=');f=input('输入增广矩阵最后一列元素f=');n=length(b);% 对A进行分解 u(1)=b(1); for i=2:n if(u(i-1)=0) l(i-1)=a(i-1)/u(i-1); u(i)=b(i)-l(i-1)*c(i-1); else break; end end L=eye(n)+diag(l,-1); U=diag(u)+diag(c,1); x=zeros(n,1); y=x; % 求解Ly=b y(1)=f(1); for i=2:n y(i)=f(i)-l(i-1)*y(i-1); end % 求解Ux=y i

5、f(u(n)=0) x(n)=y(n)/u(n); end for i=n-1:-1:1 x(i)=(y(i)-c(i)*x(i+1)/u(i); end 2.运行结果:高斯-塞德尔迭代格式1.程序:function x=Gauss_Seidel(a,b)a=input('输入系数矩阵a=')b=input('输入增广矩阵最后一列b=');e=0.5e-7;n=length(b);N=50;x=zeros(n,1);t=zeros(n,1);for k=1:N sum=0; E=0; t(1:n)=x(1:n); for i=1:n x(i)=(b(i)-a(i

6、,1:(i-1)*x(1:(i-1)-a(i,(i+1):n)*t(i+1):n)/a(i,i); end if norm(x-t)<e k break; endend2. 运行结果:雅戈比迭代格式1.程序:function x=Jocabi(a,b)a=input('输入系数矩阵a=');b=input('输入增广矩阵最后一列b=');e=0.5e-7;n=length(b);N=100;x=zeros(n,1);y=zeros(n,1);for k=1:N sum=0; for i=1:n y(i)=(b(i)-a(i,1:n)*x(1:n)+a(i,

7、i)*x(i)/a(i,i); end for i=1:n sum=sum+(y(i)-x(i)2; end if sqrt(sum)<e k break; else for i=1:n x(i)=y(i); end endendif k=N warning('未能找到近似解');end2.运行结果:逐次超松弛法(SOR)1.程序:function n,x=sor22(A,b,X,nm,w,ww)%用超松弛迭代法求解方程组Ax=b%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w为误差精度,ww为松弛因子%输出:x为求得

8、的方程组的解构成的列向量,n为迭代次数A=input('输入系数矩阵A=');b=input('输入方程组右端的列向量b=');X=input('输入迭代初值构成的列向量X=');nm=input('输入最大迭代次数nm=');w=input('输入误差精度w=');ww=input('输入松弛因子ww=');n=1;m=length(A);D=diag(diag(A); %令A=D-L-U,计算矩阵DL=tril(-A)+D; %令A=D-L-U,计算矩阵LU=triu(-A)+D; %令A=D-

9、L-U,计算矩阵UM=inv(D-ww*L)*(1-ww)*D+ww*U); %计算迭代矩阵g=ww*inv(D-ww*L)*b; %计算迭代格式中的常数项%下面是迭代过程while n<=nm x=M*X+g; %用迭代格式进行迭代 if norm(x-X,'inf')<w disp('迭代次数为');n disp('方程组的解为');x return; %上面:达到精度要求就结束程序,输出迭代次数和方程组的解 end X=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)d

10、isp('在最大迭代次数内不收敛!');disp('最大迭代次数后的结果为');2.运行结果:二分法求解方程的根1.程序:%其中a,b表示查找根存在的范围,M表示要求解函数的值%f(x)表示要求解根的方程%eps表示所允许的误差大小function y=er_fen_fa(a,b,M)k=0;eps=0.05while b-a>eps x=(a+b)/2; %检查是否大于值 if (x3)-3*x-1)>M b=x else a=x end k=k+1end2.运行结果:Newton 迭代法(切线法)1.程序:function x=nanewton(

11、fname,dfname,x0,e,N)%newton迭代法解方程组%fname和dfname分别表示F(x)及其导函数的M函数句柄或内嵌函数,x0为迭代初值,e为精度要求x=x0;x0=x+2*e;k=0;if nargin<5,N=500;endif nargin<4 e=1e-4;endwhile abs(x0-x)>e&k<N, k=k+1; x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); disp(x)endif k=N,warning('已达迭代次数上限');end2.运行结果:割线方式迭代法1

12、.程序:function x=ge_xian_fa(fname,dfname,x0,x1,e,N)%割线方式迭代法解方程组%fname和dfname分别表示F(x)及其导函数的M函数句柄或内嵌函数,x0,x1分别为迭代初值,e为精度要求k=0;a=x1;b=x0;if nargin<5,N=500;endif nargin<4 e=1e-4;endwhile abs(a-b)>e&k<N, k=k+1; x=x1-(x1-x0)/(feval(fname,x1)-feval(fname,x0)*feval(fname,x1); if feval(fname,x)

13、*feval(fname,x0)>0, x0=x;b=x0; else x1=x;a=x1; end x=x1-(x1-x0)/(feval(fname,x1)-feval(fname,x0)*feval(fname,x1); numb=int2str(k); disp('第',numb,'次计算后x=') fprintf('%fnn',x); endif k=N,warning('已达迭代次数上限');end2.运行结果:Newton插值1.程序:%保存文件名为New_Int.m%Newton基本插值公式%x为向量,全部的

14、插值节点%y为向量,差值节点处的函数值%xi为标量,是自变量%yi为xi出的函数估计值function yi=newton_chazhi(x,y,xi)n=length(x);m=length(y);if n=merror('The lengths of X ang Y must be equal!');return;end%计算均差表YY=zeros(n);Y(:,1)=y'for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i)<epserror('the DATA is error!');return;endY(i,k

15、+1)=(Y(i+1,k)-Y(i,k)/(x(i+k)-x(i);endend%计算牛顿插值公式yi=0;for i=1:nz=1;for k=1:i-1z=z*(xi-x(k);endyi=yi+Y(1,i)*z;end2.运行结果:Lagrange插值1.程序:function y0 = Language(x,y,x0)syms t l;if length(x)=length(y) n = length(x);else disp('x和y的维数不相等!'); return; %检错endh=sym(0);for i=1:n l=sym(y(i); for j=1:i-1 l=l*(t-x(j)/(x(i)-x(j); end; for j=i+1:n l=l*(t-x(j)/(x(i)-x(j); end; h=h+l;endsimplify(h);if nargin = 3 y0 = subs (h,'t',x0); %计算插值点的函数值else y0=collect(h); y0 = vpa(y0,6); %将插值多项式的系数化成6位精度的小数end2.运行结果:最小二乘法1.程序:function p=nafit(x,y,m)%多项式拟合% x, y为已知数据点向量, 分别表示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论