文档详情

数值分析插值matlab程序1..doc

发布:2017-01-10约2.4千字共6页下载文档
文本预览下载声明
%高斯赛德尔迭代解线性方程组 a=input(请输入系数矩阵a:) %输入系数矩阵a disp(a) [m,n]=size(a) if m~=n %若a不是方阵则显示错误 disp(false) end de=det(a); if de==0 %判断矩阵a是否为奇异矩阵 disp(矩阵奇异) end b=input(请输入b矩阵:) %输入矩阵b disp(b) x=input(请输入迭代初始值:) disp(x) k=x; jindu=10e-7 %迭代精度 p=jindu+1; while p=jindu %迭代次数控制条件 s=zeros(m,1); te=zeros(m,1); for i=1:m %迭代计算 for j=1:i-1 s(i)=s(i)+a(i,j)*k(j); end for j=i+1:n te(i)=te(i)+a(i,j)*x(j); x=k; end k(i)=(b(i)-s(i)-te(i))/a(i,i) end if norm(k(i)-x(i),inf)jindu %迭代终止条件的控制 p=abs(k(i)-x(i)); else break 拉格朗日算法 #includeiostream.h int main() { float x;//插值 float p[10][2];//已知(x0,y0),(x1,y1)... int n;//输入已知插值组数 float y,t; int k; cout输入插值组数:endl; cinn; cout输入n组已知插值数(X,Y)endl; for(int i=0;in;i++) { cinp[i][0]p[i][1]; } cout输入插值:endl; cinx; y=0; k=0; for(k=0;kn;k++) { t=1; for(i=0;in;i++) { if(i!=k) { t=t*(x-p[i][0])/(p[k][0]-p[i][0]); //key step } } y=y+p[k][1]*t; } cout插值结果:yendl; return 0; } clear; e=100; %误差初值 disp(输入方程组维数\n); n=input(\n); for(i=1:n) for(j=1:n) fprintf(输入方程组第%d行第%d列的系数(从左到右,从上到下)\n,i,j); a(i,j)=input(\n); end end for(i=1:n) fprintf(输入等号右边第%d个系数\n,i); y(i,1)=input(\n); end for(i=1:n) fprintf(输入第%d个变量的初值\n,i); x(i,1)=input(\n); end fprintf(输入精确度\n); p=input(\n); for(i=1:n) for(j=1:n) if i~=j b(i,j)=-a(i,j)/a(i,i); else b(i,j)=0; end g(i,1)=y(i,1)/a(i,i); end g(i,1)=y(i,1)/a(i,i); end while ep|e-p x1=b*x+g; e1=x1(1,1)-x(1,1); e2=x1(2,1)-x(2,1); e3=x1(3,1)-x(3,1); e4=min(e1,e2); e5=min(e1,e3); e=min(e4,e5); x=x1; end for(i=1:n) fprintf(x%d=%f\n,i,x(i,1)); end 雅克比迭代二 function [x,n]=jacobi(A,b,x0,eps,M) %雅可比迭代求解线性方程组 %x 解 n 达到所需精度实际用的步数 %对输入单数进行默认设置 x0初始值 eps精度 M限制步数 if nargin==3 eps=1.0e-6; M=200; elseif nargin==4 M=200; elseif nargin3 error; return; end D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; x=B*x0+f;%迭代公式 n=1; while norm(x-x0)=eps x0=x; x=B*x0+f; n=n+1; %如果不收敛从此退出 if(n=M) disp(迭代次数过多可能不收敛!!); return; end end 程序1:要求给出插值次数的多项式最小二乘法 syms x f; xx=input(请输入插值节点
显示全部
相似文档