常用的插值算法程序
空间插值算法汇总

空间插值算法:1、距离倒数乘方法 (Inverse Distanee to a Power ) 距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。
方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。
对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。
计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。
当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。
当一个观测点与一个格网结点重合时,该观测点被给予一个实际为1.0的权重,所有其它观测点被给予一个几乎为0.0的权重。
换言之,该结点被赋给与观测点一致的值。
这就是一个准确插值。
距离倒数法的特征之一是要在格网区域内产生围绕观测点位置的"牛眼"。
用距离倒数格网化时可以指定一个圆滑参数。
大于零的圆滑参数保证,对于一个特定的结点,没有哪个观测点被赋予全部的权值,即使观测点与该结点重合也是如此。
圆滑参数通过修匀已被插值的格网来降低"牛眼"影响。
2、克里金法 (Kriging)克里金法是一种在许多领域都很有用的地质统计格网化方法。
克里金法试图那样表示隐含在你的数据中的趋势,例如,高点会是沿一个脊连接,而不是被牛眼形等值线所孤立。
克里金法中包含了几个因子:变化图模型,漂移类型和矿块效应。
3、最小曲率法 (Minimum Curvature )最小曲率法广泛用于地球科学。
用最小曲率法生成的插值面类似于一个通过各个数据值的,具有最小弯曲量的长条形薄弹性片。
最小曲率法,试图在尽可能严格地尊重数据的同时生成尽可能圆滑的曲面。
使用最小曲率法时要涉及到两个参数:最大残差参数和最大循环次数参数来控制最小曲率的收敛标准4、多元回归法(Polynomial Regression )多元回归被用来确定你的数据的大规模的趋势和图案。
常见的插值方法及其原理

常见的插值方法及其原理这一节无可避免要接触一些数学知识,为了让本文通俗易懂,我们尽量绕开讨厌的公式等。
为了进一步的简化难度,我们把讨论从二维图像降到一维上。
首先来看看最简单的‘最临近像素插值’。
A,B是原图上已经有的点,现在我们要知道其中间X位置处的像素值。
我们找出X位置和A,B位置之间的距离d1,d2,如图,d2要小于d1,所以我们就认为X处像素值的大小就等于B处像素值的大小。
显然,这种方法是非常苯的,同时会带来明显的失真。
在A,B中点处的像素值会突然出现一个跳跃,这就是为什么会出现马赛克和锯齿等明显走样的原因。
最临近插值法唯一的优点就是速度快。
图10,最临近法插值原理接下来是稍微复杂点的‘线性插值’(Linear)线性插值也很好理解,AB两点的像素值之间,我们认为是直线变化的,要求X点处的值,只需要找到对应位置直线上的一点即可。
换句话说,A,B间任意一点的值只跟A,B有关。
由于插值的结果是连续的,所以视觉上会比最小临近法要好一些。
线性插值速度稍微要慢一点,但是效果要好不少。
如果讲究速度,这是个不错的折衷。
图11,线性插值原理其他插值方法立方插值,样条插值等等,他们的目的是试图让插值的曲线显得更平滑,为了达到这个目的,他们不得不利用到周围若干范围内的点,这里的数学原理就不再详述了。
图12,高级的插值原理如图,要求B,C之间X的值,需要利用B,C周围A,B,C,D四个点的像素值,通过某种计算,得到光滑的曲线,从而算出X的值来。
计算量显然要比前两种大许多。
好了,以上就是基本知识。
所谓两次线性和两次立方实际上就是把刚才的分析拓展到二维空间上,在宽和高方向上作两次插值的意思。
在以上的基础上,有的软件还发展了更复杂的改进的插值方式譬如S-SPline, Turbo Photo等。
他们的目的是使边缘的表现更完美。
插值(Interpolation),有时也称为“重置样本”,是在不生成像素的情况下增加图像像素大小的一种方法,在周围像素色彩的基础上用数学公式计算丢失像素的色彩。
空间插值算法汇总

空间插值算法:1、距离倒数乘方法(Inverse Distance to a Power)距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。
方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。
对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。
计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。
当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。
当一个观测点与一个格网结点重合时,该观测点被给予一个实际为 1.0 的权重,所有其它观测点被给予一个几乎为0.0 的权重。
换言之,该结点被赋给与观测点一致的值。
这就是一个准确插值。
距离倒数法的特征之一是要在格网区域内产生围绕观测点位置的"牛眼"。
用距离倒数格网化时可以指定一个圆滑参数。
大于零的圆滑参数保证,对于一个特定的结点,没有哪个观测点被赋予全部的权值,即使观测点与该结点重合也是如此。
圆滑参数通过修匀已被插值的格网来降低"牛眼"影响。
2、克里金法(Kriging)克里金法是一种在许多领域都很有用的地质统计格网化方法。
克里金法试图那样表示隐含在你的数据中的趋势,例如,高点会是沿一个脊连接,而不是被牛眼形等值线所孤立。
克里金法中包含了几个因子:变化图模型,漂移类型和矿块效应。
3、最小曲率法(Minimum Curvature)最小曲率法广泛用于地球科学。
用最小曲率法生成的插值面类似于一个通过各个数据值的,具有最小弯曲量的长条形薄弹性片。
最小曲率法,试图在尽可能严格地尊重数据的同时,生成尽可能圆滑的曲面。
使用最小曲率法时要涉及到两个参数:最大残差参数和最大循环次数参数来控制最小曲率的收敛标准。
4、多元回归法(Polynomial Regression)多元回归被用来确定你的数据的大规模的趋势和图案。
[转载]插值算法(一):各种插值方法比较
![[转载]插值算法(一):各种插值方法比较](https://img.taocdn.com/s3/m/807a27741fd9ad51f01dc281e53a580216fc500f.png)
[转载]插值算法(⼀):各种插值⽅法⽐较原⽂地址:插值算法(⼀):各种插值⽅法⽐较作者:稻草⼈确定性随机性确定性随机性趋势⾯(⾮精确)回归(⾮精确)泰森(精确)克⾥⾦(精确)密度估算(⾮精确)反距离权重(精确)薄板样条(精确)整体拟合利⽤现有的所有已知点来估算未知点的值。
局部插值使⽤已知点的样本来估算位置点的值。
确定性插值⽅法不提供预测值的误差检验。
随机性插值⽅法则⽤估计变异提供预测误差的评价。
对于某个数据已知的点,精确插值法在该点位置的估算值与该点已知值相同。
也就是,精确插值所⽣成的⾯通过所有控制点,⽽⾮精确插值或叫做近似插值,估算的点值与该点已知值不同。
1、反距离加权法(Inverse Distance Weighted)反距离加权法是⼀种常⽤⽽简单的空间插值⽅法,IDW是基于“地理第⼀定律”的基本假设:即两个物体相似性随他们见的距离增⼤⽽减少。
它以插值点与样本点间的距离为权重进⾏加权平均,离插值点越近的样本赋予的权重越⼤,此种⽅法简单易⾏,直观并且效率⾼,在已知点分布均匀的情况下插值效果好,插值结果在⽤于插值数据的最⼤值和最⼩值之间,但缺点是易受极值的影响。
2、样条插值法(Spline)样条插值是使⽤⼀种数学函数,对⼀些限定的点值,通过控制估计⽅差,利⽤⼀些特征节点,⽤多项式拟合的⽅法来产⽣平滑的插值曲线。
这种⽅法适⽤于逐渐变化的曲⾯,如温度、⾼程、地下⽔位⾼度或污染浓度等。
该⽅法优点是易操作,计算量不⼤,缺点是难以对误差进⾏估计,采样点稀少时效果不好。
样条插值法⼜分为张⼒样条插值法(Spline with Tension)规则样条插值法(Regularized Spline)薄板样条插值法 (Thin-Plate Splin)3、克⾥⾦法(Kriging)克⾥⾦⽅法最早是由法国地理学家Matheron和南⾮矿⼭⼯程师Krige提出的,⽤于矿⼭勘探。
这种⽅法认为在空间连续变化的属性是⾮常不规则的,⽤简单的平滑函数进⾏模拟将出现误差,⽤随机表⾯函数给予描述会⽐较恰当。
cfa插值算法

cfa插值算法CFA插值算法CFA插值算法是数字图像处理中一种常用的图像重建方法。
CFA (Color Filter Array)指的是彩色滤波阵列,是数字相机中一种常见的成像传感器,用于捕捉红、绿、蓝三种颜色通道的信息。
然而,由于成本和技术限制,相机传感器上通常只包含了一部分彩色滤光片。
这就导致了在成像过程中,某些像素只有一种颜色的信息,而其他颜色通道则需要通过插值算法进行估计。
CFA插值算法的目标是根据已知颜色通道的信息,估计未知颜色通道的像素值,从而得到完整的彩色图像。
常见的CFA插值算法有最近邻插值、双线性插值和基于统计的插值方法等。
最近邻插值是最简单的一种插值算法,它通过找到离目标像素最近的已知像素的颜色值来进行估计。
该算法的计算速度快,但由于只考虑了距离最近的像素,容易产生锯齿状的估计结果。
双线性插值是一种基于线性插值的算法,它考虑了目标像素周围四个已知像素的颜色值,并根据距离和权重进行加权平均。
这种算法能够得到比最近邻插值更平滑的估计结果,但处理边缘和细节时仍然存在一定程度的失真。
基于统计的插值方法是一种更高级的CFA插值算法,它利用了图像中的统计特征来进行颜色通道的估计。
例如,可以通过分析图像中的颜色分布和纹理信息,来推测未知颜色通道的像素值。
这种方法能够有效地提高插值的准确性和图像质量。
除了上述常见的CFA插值算法,还有一些其他的改进算法被提出,如基于深度学习的CFA插值算法。
这些算法通过利用神经网络模型,能够更好地学习和估计颜色通道之间的关系,从而得到更精确的插值结果。
CFA插值算法在数字图像处理中扮演着重要的角色。
通过合理选择和应用插值算法,可以有效地提高图像的质量和细节表达能力。
未来随着技术的不断进步,相信CFA插值算法将会得到更多的改进和应用,为我们带来更加逼真和精确的彩色图像。
常见插值方法及其介绍

常见插值方法及其介绍Inverse Distance to a Power(反距离加权插值法)”、“Kriging(克里金插值法)”、“Minimum Curvature(最小曲率)”、“Modified Shepard's Method(改进谢别德法)”、“Natural Neighbor(自然邻点插值法)”、“Nearest Neighbor(最近邻点插值法)”、“Polynomial Regression(多元回归法)”、“Radial Basis Function(径向基函数法)”、“Triangulation with Linear Interpolation(线性插值三角网法)”、“Moving Average(移动平均法)”、“Local Polynomial(局部多项式法)”1、距离倒数乘方法距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。
方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。
对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。
计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。
当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。
当一个观测点与一个格网结点重合时,该观测点被给予一个实际为 1.0 的权重,所有其它观测点被给予一个几乎为0.0 的权重。
换言之,该结点被赋给与观测点一致的值。
这就是一个准确插值。
距离倒数法的特征之一是要在格网区域内产生围绕观测点位置的"牛眼"。
用距离倒数格网化时可以指定一个圆滑参数。
大于零的圆滑参数保证,对于一个特定的结点,没有哪个观测点被赋予全部的权值,即使观测点与该结点重合也是如此。
圆滑参数通过修匀已被插值的格网来降低"牛眼"影响。
数值分析常用的插值方法

数值分析报告班级:专业:流水号:学号:姓名:常用的插值方法序言在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。
插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。
早在6世纪,中国的刘焯已将等距二次插值用于天文计算。
17世纪之后,牛顿、拉格朗日分别讨论了等距和非等距的一般插值公式。
在近代,插值法仍然是数据处理和编制函数表的常用工具,又是数值积分、数值微分、非线性方程求根和微分方程数值解法的重要基础,许多求解计算公式都是以插值为基础导出的。
插值问题的提法是:假定区间[a,b〕上的实值函数f(x)在该区间上n+1个互不相同点x0,x1……x n处的值是f(x0),……f(x n),要求估算f(x)在[a,b〕中某点的值。
其做法是:在事先选定的一个由简单函数构成的有n+1个参数C0,C1,……C n的函数类Φ(C0,C1,……C n)中求出满足条件P(x i)=f(x i)(i=0,1,…… n)的函数P(x),并以P(x)作为f(x)的估值。
此处f(x)称为被插值函数,x0,x1,……xn 称为插值结(节)点,Φ(C0,C1,……C n)称为插值函数类,上面等式称为插值条件,Φ(C0,……C n)中满足上式的函数称为插值函数,R(x)=f(x)-P(x)称为插值余项。
求解这类问题,它有很多种插值法,其中以拉格朗日(Lagrange)插值和牛顿(Newton)插值为代表的多项式插值最有特点,常用的插值还有Hermit 插值,分段插值和样条插值。
一.拉格朗日插值1.问题提出:已知函数()y f x =在n+1个点01,,,n x x x 上的函数值01,,,n y y y ,求任意一点x '的函数值()f x '。
说明:函数()y f x =可能是未知的;也可能是已知的,但它比较复杂,很难计算其函数值()f x '。
常用插值算法程序

if(t==s+1)return (d[t].y-d[s].y)/(d[t].x-d[s].x);elsereturn (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);}float Newton(float x,int count){int n;while(1){cout<<"请输入n值(即n次插值):";//获得插值次数cin>>n;if(n<=count-1)// 插值次数不得大于count-1次break;elsesystem("cls");}//初始化t,y,yt。
float t=1.0;float y=d[0].y;float yt=0.0;//计算y值for(int j=1;j<=n;j++){t=(x-d[j-1].x)*t;yt=f(0,j)*t;//cout<<f(0,j)<<endl;y=y+yt;}return y;}float lagrange(float x,int count){float y=0.0;for(int k=0;k<count;k++)//这儿默认为count-1次插值 {float p=1.0;//初始化pfor(int j=0;j<count;j++){//计算p的值if(k==j)continue;//判断是否为同一个数p=p*(x-d[j].x)/(d[k].x-d[j].x);}y=y+p*d[k].y;//求和}return y;//返回y的值}void main(){float x,y;int count;while(1){cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数cin>>count;if(count<=20)break;//检查输入的是否合法system("cls");}//获得各组数据for(int i=0;i<count;i++){cout<<"请输入第"<<i+1<<"组x的值:";cin>>d[i].x;cout<<"请输入第"<<i+1<<"组y的值:";cin>>d[i].y;system("cls");}cout<<"请输入x的值:";//获得变量x的值cin>>x;while(1){int choice=3;cout<<"请您选择使用哪种插值法计算:"<<endl;cout<<" (0):退出"<<endl;cout<<" (1):Lagrange"<<endl;cout<<" (2):Newton"<<endl;cout<<"输入你的选择:";cin>>choice;//取得用户的选择项if(choice==2){cout<<"你选择了牛顿插值计算方法,其结果为:";y=Newton(x,count);break;//调用相应的处理函数}if(choice==1){cout<<"你选择了拉格朗日插值计算方法,其结果为:";scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");printf("Input xx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f\n",xx,yy);getch();}(二)牛顿插值多项式#include <stdio.h>#include <conio.h>#include <alloc.h>void difference(float *x,float *y,int n){ float *f;int k,i;f=(float *)malloc(n*sizeof(float));for(k=1;k<=n;k++){ f[0]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");difference(x,(float *)y,n);printf("Input xx:");scanf("%f",&xx);yy=y[20];for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];printf("NewtonInter(%f)=%f",xx,yy);getch();}(三)高斯列主元消去法:#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];message();main(){float x[NUMBER]; /*´ËÊý×éÓÃÓÚ´æ·Å·½³Ì½â*/int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter.");printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:");for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);/*ʵÏÖ½«Ã¿Ò»ÐÐÖеÄϵÊýºÍÏòÁ¿Ò»´ÎÐÔÊäÈë£ÊýÖ®¼äÓÿոñ¸ñ¿ª£ÊäÍêºó»Ø³µÈ·¨*/for(j=1;j<=n+1;j++) /*½«¸Õ²ÅÊäÈëµÄÊý´æÈëÊý×é*/scanf("%f",&A[i][j]);}for(k=1;k<=n-1;k++){ark=max(k);if(ark==0) /*ÅÐÏ·½³ÌÊÇ·ñΪÏßÐÔ·½³Ì£¼´ÊÇ·ñºÏ·¨*/{printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++)me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k) /*½»»»Ðеľغ¯Êý*/ {int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k) /*±ÈУϵÊý´óСµÄº¯Êý*/ {int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}message() /*ʵÏֲ˵¥Ñ¡ÔñµÄº¯Êý*/{printf("\n\n Go on Enter ,Exit press Esc!");switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();}return ;}}}(五)牛顿迭代公式:#include<stdio.h>#include<math.h>#include<conio.h>#define N 100#define PS 1e-5#define TA 1e-5float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;int k=0;do{ x1= x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<PS)){ printf("\nFailed!");getch();exit();}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\n",k,x0);}while((fabs(d))>PS&&fabs(f(x1))>TA) ;return x1;}float f(float x){ return x*x*x+x*x-3*x-3; }float f1(float x){ return 3.0*x*x+2*x-3; }void main(){ float f(float);float f1(float);float x0,y0;printf("Input x0: ");scanf("%f",&x0);printf("x(0)=%f\n",x0);y0=Newton(f,f1,x0);printf("\nThe root is x=%f\n",y0);getch();}(六)牛顿-科特斯求积公式:#include<stdio.h>#include<math.h>int NC(a,h,n,r,f)float (*a)[];float h;int n,f;float *r;{ int nn,i;float ds;if(n>1000||n<2){ if (f)printf("\n Faild! Check if 1<n<1000!\n",n);return(-1);}if(n==2){ *r=0.5*((*a)[0]+(*a)[1])*(h);return(0);}if (n-4==0){ *r=0;*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);}if(n/2-(n-1)/2<=0)nn=n;elsenn=n-3;ds=(*a)[0]-(*a)[nn-1];for(i=2;i<=nn;i=i+2)ds=ds+4*(*a)[i-1]+2*(*a)[i];*r=ds*(h)/3;if(n>nn)*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);}main(){float h,r;int n,ntf,f;int i;float a[16];printf("Input the x[i](16):\n");for(i=0;i<=15;i++)scanf("%d",&a[i]);h=0.2;f=0;ntf=NC(a,h,n,&r,f);if(ntf==0)printf("\nR=%f\n",r);elseprintf("\n Wrong!Return code=%d\n",ntf);getch();}(七)雅克比迭代:#include <stdio.h>#include <math.h>#define N 20#define MAX 100#define e 0.00001int main(){ int n;int i,j,k;float t;float a[N][N],b[N][N],c[N],g[N],x[N],h[N];printf("\nInput dim of n:"); scanf("%d",&n);if(n>N){ printf("Faild! Check if 0<n<N!\n"); getch(); return 1; } if(n<=0){printf("Faild! Check if 0<n<N!\n"); getch(); return 1;} printf("Input a[i,j],i,j=0…%d:\n",n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("Input c[i],i=0…%d:\n",n-1);for(i=0;i<n;i++)scanf("%f",&c[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){ b[i][j]=-a[i][j]/a[i][i]; g[i]=c[i]/a[i][i]; }for(i=0;i<MAX;i++){ for(j=0;j<n;j++)h[j]=g[j];{ for(k=0;k<n;k++){ if(j==k) continue; h[j]+=b[j][k]*x[k]; }}t=0;for(j=0;j<n;j++)if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);printf("Input frequency:");scanf("%f",&x);r=qin(a,n,x);printf("Answer:%f",r);getch();}(九)幂法:#include<stdio.h>#include<math.h>#define N 100#define e 0.00001#define n 3float x[n]={0,0,1};float a[n][n]={{2,3,2},{10,3,4},{3,6,1}}; float y[n];main(){ int i,j,k;float xm,oxm;oxm=0;for(k=0;k<N;k++){ for(j=0;j<n;j++){ y[j]=0;for(i=0;i<n;i++)y[j]+=a[j][i]*x[i];}xm=0;for(j=0;j<n;j++)if(fabs(y[j])>xm) xm=fabs(y[j]);for(j=0;j<n;j++)y[j]/=xm;for(j=0;j<n;j++)x[j]=y[j];if(fabs(xm-oxm)<e){ printf("max:%f\n\n",xm);printf("v[i]:\n");for(k=0;k<n;k++) printf("%f\n",y[k]); break;}oxm=xm;}getch();}(十)高斯塞德尔:#include<math.h>#include<stdio.h>#define N 20#define M 99float a[N][N];float b[N];int main(){ int i,j,k,n;float sum,no,d,s,x[N];printf("\nInput dim of n:");scanf("%d",&n);if(n>N){ printf("Faild! Check if 0<n<N!\n "); getch();return 1;}if(n<=0){ printf("Faild! Check if 0<n<N!\n ");getch();return 1;} printf("Input a[i,j],i,j=0…%d:\n",n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("Input b[i],i=0…%d:\n",n-1);for(i=0;i<n;i++) scanf("%f",&b[i]);for(i=0;i<n;i++) x[i]=0;k=0;printf("\nk=%dx=",k);for(i=0;i<n;i++) printf("%12.8f",x[i]);do{ k++;if(k>M){printf("\nError!\n”);getch();}break;}no=0.0;for(i=0;i<n;i++){ s=x[i];sum=0.0;for(j=0;j<n;j++)if (j!=i) sum=sum+a[i][j]*x[j];x[i]=(b[i]-sum)/a[i][i];d=fabs(x[i]-s);if (no<d) no=d;}printf("\nk=%2dx=",k);for(i=0;i<n;i++) printf("%f",x[i]);}。