数值分析插值matlab程序1..doc
文本预览下载声明
%高斯赛德尔迭代解线性方程组a=input(请输入系数矩阵a:) %输入系数矩阵a disp(a)[m,n]=size(a)if m~=n %若a不是方阵则显示错误disp(false)endde=det(a);if de==0 %判断矩阵a是否为奇异矩阵disp(矩阵奇异)endb=input(请输入b矩阵:) %输入矩阵bdisp(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-1s(i)=s(i)+a(i,j)*k(j);endfor j=i+1:nte(i)=te(i)+a(i,j)*x(j);x=k;endk(i)=(b(i)-s(i)-te(i))/a(i,i)endif norm(k(i)-x(i),inf)jindu %迭代终止条件的控制p=abs(k(i)-x(i));elsebreak
拉格朗日算法
#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);endendfor(i=1:n)fprintf(输入等号右边第%d个系数\n,i);y(i,1)=input(\n);endfor(i=1:n)fprintf(输入第%d个变量的初值\n,i);x(i,1)=input(\n);endfprintf(输入精确度\n);p=input(\n);for(i=1:n)for(j=1:n)if i~=jb(i,j)=-a(i,j)/a(i,i);elseb(i,j)=0;endg(i,1)=y(i,1)/a(i,i);endg(i,1)=y(i,1)/a(i,i);endwhile ep|e-px1=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;endfor(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;endD=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; endend
程序1:要求给出插值次数的多项式最小二乘法
syms x f;
xx=input(请输入插值节点
显示全部