1.拉格朗日插值多项式 ,用于离散数据的拟合
2.牛顿插值多项式,用于离散数据的拟合
3.高斯列主元消去法,求解其次线性方程组
4.龙贝格求积公式,求解定积分
5.牛顿迭代公式,求方程的近似解
7.雅克比迭代,求解方程近似解
8.秦九昭算法
9.幂法
10.高斯塞德尔
转载的 源代码没有测试过
1
#include <stdio.h>
2
#include <conio.h>
3
#include <alloc.h>
4
float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/
5
{ int i,j;
6
float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/
7
a=(float *)malloc(n*sizeof(float));
8
for(i=0;i<=n-1;i++)
9
{ a[i]=y[i];
10
for(j=0;j<=n-1;j++)
11
if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
12
yy+=a[i];
13
}
14
free(a);
15
return yy;
16
}
17
main()
18
{ int i,n;
19
float x[20],y[20],xx,yy;
20
printf("Input n:");
21
scanf("%d",&n);
22
if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
23
if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
24
for(i=0;i<=n-1;i++)
25
{ printf("x[%d]:",i);
26
scanf("%f",&x[i]);
27
}
28
printf("\n");
29
for(i=0;i<=n-1;i++)
30
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
31
printf("\n");
32
printf("Input xx:");
33
scanf("%f",&xx);
34
yy=lagrange(x,y,xx,n);
35
printf("x=%f,y=%f\n",xx,yy);
36
getch();
37
}
38
#include <stdio.h>2
#include <conio.h>3
#include <alloc.h>4
float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/5
{ int i,j;6
float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/7
a=(float *)malloc(n*sizeof(float));8
for(i=0;i<=n-1;i++)9
{ a[i]=y[i];10
for(j=0;j<=n-1;j++)11
if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);12
yy+=a[i];13
}14
free(a);15
return yy;16
}17
main()18
{ int i,n;19
float x[20],y[20],xx,yy;20
printf("Input n:");21
scanf("%d",&n);22
if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}23
if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}24
for(i=0;i<=n-1;i++)25
{ printf("x[%d]:",i);26
scanf("%f",&x[i]);27
}28
printf("\n");29
for(i=0;i<=n-1;i++)30
{ printf("y[%d]:",i);scanf("%f",&y[i]);}31
printf("\n");32
printf("Input xx:");33
scanf("%f",&xx);34
yy=lagrange(x,y,xx,n);35
printf("x=%f,y=%f\n",xx,yy);36
getch();37
}38

2.牛顿插值多项式,用于离散数据的拟合
1
#include <stdio.h>
2
#include <conio.h>
3
#include <alloc.h>
4
void difference(float *x,float *y,int n)
5
{ float *f;
6
int k,i;
7
f=(float *)malloc(n*sizeof(float));
8
for(k=1;k<=n;k++)
9
{ f[0]=y[k];
10
for(i=0;i<k;i++)
11
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
12
y[k]=f[k];
13
}
14
return;
15
}
16
main()
17
{ int i,n;
18
float x[20],y[20],xx,yy;
19
printf("Input n:");
20
scanf("%d",&n);
21
if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
22
if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}
23
for(i=0;i<=n-1;i++)
24
{ printf("x[%d]:",i);
25
scanf("%f",&x[i]);
26
}
27
printf("\n");
28
for(i=0;i<=n-1;i++)
29
{ printf("y[%d]:",i);scanf("%f",&y[i]);}
30
printf("\n");
31
difference(x,(float *)y,n);
32
printf("Input xx:");
33
scanf("%f",&xx);
34
yy=y[20];
35
for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
36
printf("NewtonInter(%f)=%f",xx,yy);
37
getch();
38
}
39
#include <stdio.h>2
#include <conio.h>3
#include <alloc.h>4
void difference(float *x,float *y,int n)5
{ float *f;6
int k,i;7
f=(float *)malloc(n*sizeof(float));8
for(k=1;k<=n;k++)9
{ f[0]=y[k];10
for(i=0;i<k;i++)11
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);12
y[k]=f[k];13
}14
return;15
}16
main()17
{ int i,n;18
float x[20],y[20],xx,yy;19
printf("Input n:");20
scanf("%d",&n);21
if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}22
if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}23
for(i=0;i<=n-1;i++)24
{ printf("x[%d]:",i);25
scanf("%f",&x[i]);26
}27
printf("\n");28
for(i=0;i<=n-1;i++)29
{ printf("y[%d]:",i);scanf("%f",&y[i]);}30
printf("\n");31
difference(x,(float *)y,n);32
printf("Input xx:");33
scanf("%f",&xx);34
yy=y[20];35
for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];36
printf("NewtonInter(%f)=%f",xx,yy);37
getch();38
}39

3.高斯列主元消去法,求解其次线性方程组
1
#include<stdio.h>
2
#include <math.h>
3
#define N 20
4
int main()
5
{ int n,i,j,k;
6
int mi,tmp,mx;
7
float a[N][N],b[N],x[N];
8
printf("\nInput n:");
9
scanf("%d",&n);
10
if(n>N)
11
{ printf("The input n should in(0,N)!\n");
12
getch();
13
return 1;
14
}
15
if(n<=0)
16
{ printf("The input n should in(0,N)!\n");
17
getch();
18
return 1;
19
}
20
printf("Now input a(i,j),i,j=0
%d:\n",n-1);
21
for(i=0;i<n;i++)
22
{ for(j=0;j<n;j++)
23
scanf("%f",&a[i][j]);}
24
printf("Now input b(i),i,j=0
%d:\n",n-1);
25
for(i=0;i<n;i++)
26
scanf("%f",&b[i]);
27
for(i=0;i<n-2;i++)
28
{ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)
29
if(fabs(a[j][i])>mx)
30
{ mi=j;
31
mx=fabs(a[j][i]);
32
}
33
if(i<mi)
34
{ tmp=b[i];b[i]=b[mi];b[mi]=tmp;
35
for(j=i;j<n;j++)
36
{ tmp=a[i][j];
37
a[i][j]=a[mi][j];
38
a[mi][j]=tmp;
39
}
40
}
41
for(j=i+1;j<n;j++)
42
{ tmp=-a[j][i]/a[i][i];
43
b[j]+=b[i]*tmp;
44
for(k=i;k<n;k++)
45
a[j][k]+=a[i][k]*tmp;
46
}
47
}
48
x[n-1]=b[n-1]/a[n-1][n-1];
49
for(i=n-2;i>=0;i--)
50
{ x[i]=b[i];
51
for(j=i+1;j<n;j++)
52
x[i]-=a[i][j]*x[j];
53
x[i]/=a[i][i];
54
}
55
for(i=0;i<n;i++)
56
printf("Answer:\n x[%d]=%f\n",i,x[i]);
57
getch();
58
return 0;
59
}
60
61
62
#include<math.h>
63
#include<stdio.h>
64
#define NUMBER 20
65
#define Esc 0x1b
66
#define Enter 0x0d
67
68
float A[NUMBER][NUMBER+1] ,ark;
69
int flag,n;
70
exchange(int r,int k);
71
float max(int k);
72
message();
73
74
main()
75
{
76
float x[NUMBER];
77
int r,k,i,j;
78
char celect;
79
clrscr();
80
81
printf("\n\nUse Gauss.");
82
printf("\n\n1.Jie please press Enter.");
83
printf("\n\n2.Exit press Esc.");
84
celect=getch();
85
if(celect==Esc)
86
exit(0);
87
printf("\n\n input n=");
88
scanf("%d",&n);
89
printf(" \n\nInput matrix A and B:");
90
for(i=1;i<=n;i++)
91
{
92
printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);
93
94
for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);
95
}
96
for(k=1;k<=n-1;k++)
97
{
98
ark=max(k);
99
if(ark==0)
100
{
101
printf("\n\nIt's wrong!");message();
102
}
103
else if(flag!=k)
104
exchange(flag,k);
105
for(i=k+1;i<=n;i++)
106
for(j=k+1;j<=n+1;j++)
107
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
108
}
109
x[n]=A[n][n+1]/A[n][n];
110
for( k=n-1;k>=1;k--)
111
{
112
float me=0;
113
for(j=k+1;j<=n;j++)
114
{
115
me=me+A[k][j]*x[j];
116
}
117
x[k]=(A[k][n+1]-me)/A[k][k];
118
}
119
for(i=1;i<=n;i++)
120
{
121
printf(" \n\nx%d=%f",i,x[i]);
122
}
123
message();
124
}
125
126
exchange(int r,int k)
127
{
128
int i;
129
for(i=1;i<=n+1;i++)
130
A[0][i]=A[r][i];
131
for(i=1;i<=n+1;i++)
132
A[r][i]=A[k][i];
133
for(i=1;i<=n+1;i++)
134
A[k][i]=A[0][i];
135
}
136
137
float max(int k)
138
{
139
int i;
140
float temp=0;
141
for(i=k;i<=n;i++)
142
if(fabs(A[i][k])>temp)
143
{
144
temp=fabs(A[i][k]);
145
flag=i;
146
}
147
return temp;
148
}
149
150
message()
151
{
152
printf("\n\n Go on Enter ,Exit press Esc!");
153
switch(getch())
154
{
155
case Enter: main();
156
case Esc: exit(0);
157
default:{printf("\n\nInput error!");message();}
158
}
159
}
#include<stdio.h>2
#include <math.h>3
#define N 204
int main()5
{ int n,i,j,k;6
int mi,tmp,mx;7
float a[N][N],b[N],x[N];8
printf("\nInput n:");9
scanf("%d",&n);10
if(n>N)11
{ printf("The input n should in(0,N)!\n");12
getch();13
return 1;14
}15
if(n<=0)16
{ printf("The input n should in(0,N)!\n");17
getch();18
return 1;19
}20
printf("Now input a(i,j),i,j=0
%d:\n",n-1);21
for(i=0;i<n;i++)22
{ for(j=0;j<n;j++)23
scanf("%f",&a[i][j]);}24
printf("Now input b(i),i,j=0
%d:\n",n-1);25
for(i=0;i<n;i++)26
scanf("%f",&b[i]);27
for(i=0;i<n-2;i++)28
{ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)29
if(fabs(a[j][i])>mx)30
{ mi=j;31
mx=fabs(a[j][i]);32
}33
if(i<mi)34
{ tmp=b[i];b[i]=b[mi];b[mi]=tmp;35
for(j=i;j<n;j++)36
{ tmp=a[i][j];37
a[i][j]=a[mi][j];38
a[mi][j]=tmp;39
}40
}41
for(j=i+1;j<n;j++)42
{ tmp=-a[j][i]/a[i][i];43
b[j]+=b[i]*tmp;44
for(k=i;k<n;k++)45
a[j][k]+=a[i][k]*tmp;46
}47
}48
x[n-1]=b[n-1]/a[n-1][n-1];49
for(i=n-2;i>=0;i--)50
{ x[i]=b[i];51
for(j=i+1;j<n;j++)52
x[i]-=a[i][j]*x[j];53
x[i]/=a[i][i];54
}55
for(i=0;i<n;i++)56
printf("Answer:\n x[%d]=%f\n",i,x[i]);57
getch();58
return 0;59
}60
61
62
#include<math.h>63
#include<stdio.h>64
#define NUMBER 2065
#define Esc 0x1b66
#define Enter 0x0d67
68
float A[NUMBER][NUMBER+1] ,ark;69
int flag,n;70
exchange(int r,int k);71
float max(int k);72
message();73
74
main()75
{76
float x[NUMBER]; 77
int r,k,i,j;78
char celect;79
clrscr();80
81
printf("\n\nUse Gauss.");82
printf("\n\n1.Jie please press Enter.");83
printf("\n\n2.Exit press Esc.");84
celect=getch();85
if(celect==Esc)86
exit(0);87
printf("\n\n input n=");88
scanf("%d",&n);89
printf(" \n\nInput matrix A and B:");90
for(i=1;i<=n;i++)91
{92
printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);93
94
for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);95
}96
for(k=1;k<=n-1;k++) 97
{98
ark=max(k);99
if(ark==0) 100
{101
printf("\n\nIt's wrong!");message();102
}103
else if(flag!=k)104
exchange(flag,k);105
for(i=k+1;i<=n;i++)106
for(j=k+1;j<=n+1;j++)107
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];108
}109
x[n]=A[n][n+1]/A[n][n];110
for( k=n-1;k>=1;k--)111
{112
float me=0;113
for(j=k+1;j<=n;j++)114
{115
me=me+A[k][j]*x[j];116
}117
x[k]=(A[k][n+1]-me)/A[k][k];118
}119
for(i=1;i<=n;i++)120
{121
printf(" \n\nx%d=%f",i,x[i]);122
}123
message();124
}125
126
exchange(int r,int k) 127
{128
int i;129
for(i=1;i<=n+1;i++)130
A[0][i]=A[r][i];131
for(i=1;i<=n+1;i++)132
A[r][i]=A[k][i];133
for(i=1;i<=n+1;i++)134
A[k][i]=A[0][i];135
}136
137
float max(int k) 138
{139
int i;140
float temp=0;141
for(i=k;i<=n;i++)142
if(fabs(A[i][k])>temp)143
{144
temp=fabs(A[i][k]);145
flag=i;146
}147
return temp;148
}149
150
message() 151
{152
printf("\n\n Go on Enter ,Exit press Esc!");153
switch(getch())154
{155
case Enter: main();156
case Esc: exit(0);157
default:{printf("\n\nInput error!");message();}158
}159
}4.龙贝格求积公式,求解定积分
1
#include<stdio.h>
2
#include<math.h>
3
#define f(x) (sin(x)/x)
4
#define N 20
5
#define MAX 20
6
#define a 2
7
#define b 4
8
#define e 0.00001
9
float LBG(float p,float q,int n)
10
{ int i;
11
float sum=0,h=(q-p)/n;
12
for (i=1;i<n;i++)
13
sum+=f(p+i*h);
14
sum+=(f(p)+f(q))/2;
15
return(h*sum);
16
}
17
void main()
18
{ int i;
19
int n=N,m=0;
20
float T[MAX+1][2];
21
T[0][1]=LBG(a,b,n);
22
n*=2;
23
for(m=1;m<MAX;m++)
24
{ for(i=0;i<m;i++)
25
T[i][0]=T[i][1];
26
T[0][1]=LBG(a,b,n);
27
n*=2;
28
for(i=1;i<=m;i++)
29
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
30
if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))
31
{ printf("Answer=%f\n",T[m][1]); getch();
32
return ;
33
}
34
}
35
}
36
#include<stdio.h>2
#include<math.h>3
#define f(x) (sin(x)/x)4
#define N 205
#define MAX 20 6
#define a 27
#define b 48
#define e 0.00001 9
float LBG(float p,float q,int n)10
{ int i;11
float sum=0,h=(q-p)/n;12
for (i=1;i<n;i++)13
sum+=f(p+i*h);14
sum+=(f(p)+f(q))/2;15
return(h*sum);16
}17
void main()18
{ int i;19
int n=N,m=0;20
float T[MAX+1][2];21
T[0][1]=LBG(a,b,n);22
n*=2;23
for(m=1;m<MAX;m++)24
{ for(i=0;i<m;i++)25
T[i][0]=T[i][1];26
T[0][1]=LBG(a,b,n);27
n*=2;28
for(i=1;i<=m;i++)29
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);30
if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))31
{ printf("Answer=%f\n",T[m][1]); getch();32
return ;33
}34
}35
}36

5.牛顿迭代公式,求方程的近似解
1
#include<stdio.h>
2
#include<math.h>
3
#include<conio.h>
4
#define N 100
5
#define PS 1e-5
6
#define TA 1e-5
7
float Newton(float (*f)(float),float(*f1)(float),float x0 )
8
{ float x1,d=0;
9
int k=0;
10
do
11
{ x1= x0-f(x0)/f1(x0);
12
if((k++>N)||(fabs(f1(x1))<PS))
13
{ printf("\nFailed!");
14
getch();
15
exit();
16
}
17
d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
18
x0=x1;
19
printf("x(%d)=%f\n",k,x0);
20
}
21
while((fabs(d))>PS&&fabs(f(x1))>TA) ;
22
return x1;
23
}
24
float f(float x)
25
{ return x*x*x+x*x-3*x-3; }
26
float f1(float x)
27
{ return 3.0*x*x+2*x-3; }
28
void main()
29
{ float f(float);
30
float f1(float);
31
float x0,y0;
32
printf("Input x0: ");
33
scanf("%f",&x0);
34
printf("x(0)=%f\n",x0);
35
y0=Newton(f,f1,x0);
36
printf("\nThe root is x=%f\n",y0);
37
getch();
38
}
#include<stdio.h>2
#include<math.h>3
#include<conio.h>4
#define N 1005
#define PS 1e-56
#define TA 1e-57
float Newton(float (*f)(float),float(*f1)(float),float x0 )8
{ float x1,d=0;9
int k=0;10
do11
{ x1= x0-f(x0)/f1(x0);12
if((k++>N)||(fabs(f1(x1))<PS))13
{ printf("\nFailed!");14
getch();15
exit();16
}17
d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);18
x0=x1;19
printf("x(%d)=%f\n",k,x0);20
}21
while((fabs(d))>PS&&fabs(f(x1))>TA) ;22
return x1;23
}24
float f(float x)25
{ return x*x*x+x*x-3*x-3; }26
float f1(float x)27
{ return 3.0*x*x+2*x-3; }28
void main()29
{ float f(float);30
float f1(float);31
float x0,y0;32
printf("Input x0: ");33
scanf("%f",&x0);34
printf("x(0)=%f\n",x0);35
y0=Newton(f,f1,x0);36
printf("\nThe root is x=%f\n",y0);37
getch();38
}6. 牛顿-科特斯求积公式,求定积分
1
#include<stdio.h>
2
#include<math.h>
3
int NC(a,h,n,r,f)
4
float (*a)[];
5
float h;
6
int n,f;
7
float *r;
8
{ int nn,i;
9
float ds;
10
if(n>1000||n<2)
11
{ if (f)
12
printf("\n Faild! Check if 1<n<1000!\n",n);
13
return(-1);
14
}
15
if(n==2)
16
{ *r=0.5*((*a)[0]+(*a)[1])*(h);
17
return(0);
18
}
19
if (n-4==0)
20
{ *r=0;
21
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
22
return(0);
23
}
24
if(n/2-(n-1)/2<=0)
25
nn=n;
26
else
27
nn=n-3;
28
ds=(*a)[0]-(*a)[nn-1];
29
for(i=2;i<=nn;i=i+2)
30
ds=ds+4*(*a)[i-1]+2*(*a)[i];
31
*r=ds*(h)/3;
32
if(n>nn)
33
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
34
return(0);
35
}
36
main()
37
{
38
float h,r;
39
int n,ntf,f;
40
int i;
41
float a[16];
42
printf("Input the x[i](16):\n");
43
for(i=0;i<=15;i++)
44
scanf("%d",&a[i]);
45
h=0.2;
46
f=0;
47
ntf=NC(a,h,n,&r,f);
48
if(ntf==0)
49
printf("\nR=%f\n",r);
50
else
51
printf("\n Wrong!Return code=%d\n",ntf);
52
getch();
53
}
#include<stdio.h>2
#include<math.h>3
int NC(a,h,n,r,f)4
float (*a)[];5
float h;6
int n,f;7
float *r;8
{ int nn,i;9
float ds;10
if(n>1000||n<2)11
{ if (f)12
printf("\n Faild! Check if 1<n<1000!\n",n);13
return(-1);14
}15
if(n==2)16
{ *r=0.5*((*a)[0]+(*a)[1])*(h);17
return(0);18
}19
if (n-4==0)20
{ *r=0;21
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);22
return(0);23
}24
if(n/2-(n-1)/2<=0)25
nn=n;26
else27
nn=n-3;28
ds=(*a)[0]-(*a)[nn-1];29
for(i=2;i<=nn;i=i+2)30
ds=ds+4*(*a)[i-1]+2*(*a)[i];31
*r=ds*(h)/3;32
if(n>nn)33
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);34
return(0);35
}36
main()37
{38
float h,r;39
int n,ntf,f;40
int i;41
float a[16];42
printf("Input the x[i](16):\n");43
for(i=0;i<=15;i++)44
scanf("%d",&a[i]);45
h=0.2;46
f=0;47
ntf=NC(a,h,n,&r,f);48
if(ntf==0)49
printf("\nR=%f\n",r);50
else51
printf("\n Wrong!Return code=%d\n",ntf);52
getch();53
}7.雅克比迭代,求解方程近似解
1
#include <stdio.h>
2
#include <math.h>
3
#define N 20
4
#define MAX 100
5
#define e 0.00001
6
int main()
7
{ int n;
8
int i,j,k;
9
float t;
10
float a[N][N],b[N][N],c[N],g[N],x[N],h[N];
11
printf("\nInput dim of n:"); scanf("%d",&n);
12
if(n>N)
13
{ printf("Faild! Check if 0<n<N!\n"); getch(); return 1; }
14
if(n<=0)
15
{printf("Faild! Check if 0<n<N!\n"); getch(); return 1;}
16
printf("Input a[i,j],i,j=0…%d:\n",n-1);
17
for(i=0;i<n;i++)
18
for(j=0;j<n;j++)
19
scanf("%f",&a[i][j]);
20
printf("Input c[i],i=0…%d:\n",n-1);
21
for(i=0;i<n;i++)
22
scanf("%f",&c[i]);
23
for(i=0;i<n;i++)
24
for(j=0;j<n;j++)
25
{ b[i][j]=-a[i][j]/a[i][i]; g[i]=c[i]/a[i][i]; }
26
for(i=0;i<MAX;i++)
27
{ for(j=0;j<n;j++)
28
h[j]=g[j];
29
{ for(k=0;k<n;k++)
30
{ if(j==k) continue; h[j]+=b[j][k]*x[k]; }
31
}
32
t=0;
33
for(j=0;j<n;j++)
34
if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);
35
for(j=0;j<n;j++)
36
x[j]=h[j];
37
if(t<e)
38
{ printf("x_i=\n");
39
for(i=0;i<n;i++)
40
printf("x[%d]=%f\n",i,x[i]);
41
getch();
42
return 0;
43
}
44
printf("after %d repeat , return\n",MAX);
45
getch();
46
return 1;
47
}
48
getch();
49
}
50
#include <stdio.h>2
#include <math.h>3
#define N 204
#define MAX 1005
#define e 0.000016
int main()7
{ int n;8
int i,j,k;9
float t;10
float a[N][N],b[N][N],c[N],g[N],x[N],h[N];11
printf("\nInput dim of n:"); scanf("%d",&n);12
if(n>N)13
{ printf("Faild! Check if 0<n<N!\n"); getch(); return 1; }14
if(n<=0)15
{printf("Faild! Check if 0<n<N!\n"); getch(); return 1;}16
printf("Input a[i,j],i,j=0…%d:\n",n-1);17
for(i=0;i<n;i++)18
for(j=0;j<n;j++)19
scanf("%f",&a[i][j]);20
printf("Input c[i],i=0…%d:\n",n-1);21
for(i=0;i<n;i++)22
scanf("%f",&c[i]);23
for(i=0;i<n;i++)24
for(j=0;j<n;j++)25
{ b[i][j]=-a[i][j]/a[i][i]; g[i]=c[i]/a[i][i]; }26
for(i=0;i<MAX;i++)27
{ for(j=0;j<n;j++)28
h[j]=g[j];29
{ for(k=0;k<n;k++)30
{ if(j==k) continue; h[j]+=b[j][k]*x[k]; }31
}32
t=0;33
for(j=0;j<n;j++)34
if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);35
for(j=0;j<n;j++)36
x[j]=h[j];37
if(t<e)38
{ printf("x_i=\n");39
for(i=0;i<n;i++) 40
printf("x[%d]=%f\n",i,x[i]);41
getch();42
return 0;43
}44
printf("after %d repeat , return\n",MAX);45
getch();46
return 1;47
}48
getch();49
}50

8.秦九昭算法
1
#include <math.h>
2
float qin(float a[],int n,float x)
3
{ float r=0;
4
int i;
5
for(i=n;i>=0;i--)
6
r=r*x+a[i];
7
return r;
8
}
9
main()
10
{ float a[50],x,r=0;
11
int n,i;
12
do
13
{ printf("Input frequency:");
14
scanf("%d",&n);
15
}
16
while(n<1);
17
printf("Input value:");
18
for(i=0;i<=n;i++)
19
scanf("%f",&a[i]);
20
printf("Input frequency:");
21
scanf("%f",&x);
22
r=qin(a,n,x);
23
printf("Answer:%f",r);
24
getch();
25
}
26
#include <math.h>2
float qin(float a[],int n,float x)3
{ float r=0;4
int i;5
for(i=n;i>=0;i--)6
r=r*x+a[i];7
return r;8
}9
main()10
{ float a[50],x,r=0;11
int n,i;12
do13
{ printf("Input frequency:");14
scanf("%d",&n);15
}16
while(n<1);17
printf("Input value:");18
for(i=0;i<=n;i++)19
scanf("%f",&a[i]);20
printf("Input frequency:");21
scanf("%f",&x);22
r=qin(a,n,x);23
printf("Answer:%f",r);24
getch();25
}26

9.幂法
1
#include<stdio.h>
2
#include<math.h>
3
#define N 100
4
#define e 0.00001
5
#define n 3
6
float x[n]={0,0,1};
7
float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};
8
float y[n];
9
main()
10
{ int i,j,k;
11
float xm,oxm;
12
oxm=0;
13
for(k=0;k<N;k++)
14
{ for(j=0;j<n;j++)
15
{ y[j]=0;
16
for(i=0;i<n;i++)
17
y[j]+=a[j][i]*x[i];
18
}
19
xm=0;
20
for(j=0;j<n;j++)
21
if(fabs(y[j])>xm) xm=fabs(y[j]);
22
for(j=0;j<n;j++)
23
y[j]/=xm;
24
for(j=0;j<n;j++)
25
x[j]=y[j];
26
if(fabs(xm-oxm)<e)
27
{ printf("max:%f\n\n",xm);
28
printf("v[i]:\n");
29
for(k=0;k<n;k++) printf("%f\n",y[k]);
30
break;
31
}
32
oxm=xm;
33
}
34
getch();
35
}
36
#include<stdio.h>2
#include<math.h>3
#define N 1004
#define e 0.000015
#define n 36
float x[n]={0,0,1};7
float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};8
float y[n];9
main()10
{ int i,j,k;11
float xm,oxm;12
oxm=0;13
for(k=0;k<N;k++)14
{ for(j=0;j<n;j++)15
{ y[j]=0;16
for(i=0;i<n;i++)17
y[j]+=a[j][i]*x[i];18
}19
xm=0;20
for(j=0;j<n;j++)21
if(fabs(y[j])>xm) xm=fabs(y[j]);22
for(j=0;j<n;j++)23
y[j]/=xm;24
for(j=0;j<n;j++)25
x[j]=y[j];26
if(fabs(xm-oxm)<e)27
{ printf("max:%f\n\n",xm);28
printf("v[i]:\n");29
for(k=0;k<n;k++) printf("%f\n",y[k]);30
break;31
}32
oxm=xm;33
}34
getch();35
}36

10.高斯塞德尔
1
#include<math.h>
2
#include<stdio.h>
3
#define N 20
4
#define M 99
5
float a[N][N];
6
float b[N];
7
int main()
8
{ int i,j,k,n;
9
float sum,no,d,s,x[N];
10
printf("\nInput dim of n:");
11
scanf("%d",&n);
12
if(n>N)
13
{ printf("Faild! Check if 0<n<N!\n "); getch();
14
return 1;
15
}
16
if(n<=0)
17
{ printf("Faild! Check if 0<n<N!\n ");getch();return 1;}
18
printf("Input a[i,j],i,j=0…%d:\n",n-1);
19
for(i=0;i<n;i++)
20
for(j=0;j<n;j++)
21
scanf("%f",&a[i][j]);
22
printf("Input b[i],i=0…%d:\n",n-1);
23
for(i=0;i<n;i++) scanf("%f",&b[i]);
24
for(i=0;i<n;i++) x[i]=0;
25
k=0;
26
printf("\nk=%dx=",k);
27
for(i=0;i<n;i++) printf("%12.8f",x[i]);
28
do
29
{ k++;
30
if(k>M){printf("\nError!\n”);getch();}
31
break;
32
}
33
no=0.0;
34
for(i=0;i<n;i++)
35
{ s=x[i];
36
sum=0.0;
37
for(j=0;j<n;j++)
38
if (j!=i) sum=sum+a[i][j]*x[j];
39
x[i]=(b[i]-sum)/a[i][i];
40
d=fabs(x[i]-s);
41
if (no<d) no=d;
42
}
43
printf("\nk=%2dx=",k);
44
for(i=0;i<n;i++) printf("%f",x[i]);
45
}
46
while (no>=0.1e-6);
47
if(no<0.1e-6)
48
{ printf("\n\n answer=\n");
49
printf("\nk=%d",k);
50
for (i=0;i<n;i++)
51
printf("\n x[%d]=%12.8f",i,x[i]);
52
}
53
getch();
54
}
55
#include<math.h>2
#include<stdio.h>3
#define N 204
#define M 995
float a[N][N];6
float b[N];7
int main()8
{ int i,j,k,n;9
float sum,no,d,s,x[N];10
printf("\nInput dim of n:");11
scanf("%d",&n);12
if(n>N)13
{ printf("Faild! Check if 0<n<N!\n "); getch();14
return 1;15
}16
if(n<=0)17
{ printf("Faild! Check if 0<n<N!\n ");getch();return 1;}18
printf("Input a[i,j],i,j=0…%d:\n",n-1);19
for(i=0;i<n;i++)20
for(j=0;j<n;j++)21
scanf("%f",&a[i][j]);22
printf("Input b[i],i=0…%d:\n",n-1);23
for(i=0;i<n;i++) scanf("%f",&b[i]);24
for(i=0;i<n;i++) x[i]=0;25
k=0;26
printf("\nk=%dx=",k);27
for(i=0;i<n;i++) printf("%12.8f",x[i]);28
do29
{ k++;30
if(k>M){printf("\nError!\n”);getch();}31
break;32
}33
no=0.0;34
for(i=0;i<n;i++)35
{ s=x[i];36
sum=0.0;37
for(j=0;j<n;j++)38
if (j!=i) sum=sum+a[i][j]*x[j];39
x[i]=(b[i]-sum)/a[i][i];40
d=fabs(x[i]-s);41
if (no<d) no=d;42
}43
printf("\nk=%2dx=",k);44
for(i=0;i<n;i++) printf("%f",x[i]);45
}46
while (no>=0.1e-6);47
if(no<0.1e-6)48
{ printf("\n\n answer=\n");49
printf("\nk=%d",k);50
for (i=0;i<n;i++)51
printf("\n x[%d]=%12.8f",i,x[i]);52
}53
getch();54
} 55

转载的 源代码没有测试过
浙公网安备 33010602011771号