📄 erfengfa.txt
字号:
二分法:
#include<stdio.h>
#include<math.h>
float f(float x)
{float y;
y=x*x+2*x+1;
return y;
}
main()
{float a,b,c,x;
printf("%s","input three numbers:\n");
scanf("%f%f%f",&a,&b,&c);
while(fabs(b-a)>=c)
{x=(a+b)/2;
if(f(x)!=0)
{if(f(a)*f(x)<0)
b=x;
else a=x;}
else a=x,b=x;
}
printf("%f\n",(a+b)/2);
}
龙贝格算法
#include<stdio.h>
#include<math.h>
#define f(x) 4/(1+(x)*(x))
float g(int k)
{int i,total;
total=1;
for(i=1;i<=k;i++)
total*=2;
return total;
}
main()
{int k0,k1,k,tag,i;
float a,b,e,e1,t[50],s[50],c[50],r[50],sum;
scanf("%f,%f,%f,%d,%d",&a,&b,&e,&k0,&k1);
t[0]=(b-a)*(f(0)+f(1))/2;
k=1;
tag=0;
do{if(k==1)
{t[1]=t[0]/2+(b-a)*f(a+(b-a)/2)/2;
s[0]=(4*t[1]-t[0])/3;
}
if(k==2)
{t[2]=t[1]/2+(b-a)*(f(a+(b-a)/4)+f(a+3*(b-a)/4))/4;
s[1]=(4*t[2]-t[1])/3;
c[0]=(16*s[1]-s[0])/15;
}
if(k>=3)
{sum=0;
for(i=1;i<=g(k-1);i++)
sum+=f(a+(2*i-1)*(b-a)/g(k));
t[k]=t[k-1]/2+(b-a)*sum/g(k);
s[k-1]=(4*t[k]-t[k-1])/3;
c[k-2]=(16*s[k-1]-s[k-2])/15;
r[k-3]=(64*c[k-2]-c[k-3])/63;
}
if(k>=k1)
{e1=fabs(r[k-3]-r[k-4]);
if(e1<e)
{printf("k=%d,T=%f\n",k,r[k-3]);
tag=1;
}
}
k++;
}while(tag==0&&k<k0);
if(tag==0||k>=k0)
printf("error!\n");
}
高斯消去法:
#include<stdio.h>
#include<math.h>
main()
{float a[10][10],b[10],m[10][10],x[10],sum;
int i,j,k,n;
printf("the top exp:");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[j]);
for(i=0;i<n;i++)
scanf("%f",&b);
for(k=0;k<n-1;k++)
{if(a[k][k]==0)
printf("error");
else for(i=k+1;i<n;i++)
{m[k]=a[k]/a[k][k];
a[k]=m[k];
b=b-m[k]*b[k];
for(j=k+1;j<n;j++)
a[j]=a[j]-m[k]*a[k][j];
}}
if(a[n-1][n-1]==0)
printf("error");
else x[n-1]=b[n-1]/a[n-1][n-1];
b[n-1]=x[n-1];
for(i=n-2;i>=0;i--)
{sum=0;
for(j=i+1;j<n;j++)
{sum+=a[j]*x[j];}
x=(b-sum)/a;
b=x;
}
for(i=0;i<n;i++)
printf("%f\n",x);
}
龙格库塔方法:
#include<stdio.h>
#include<math.h>
#define f(x,y) (x)-(y)+1
main()
{int n,k;
float a,b,y0,h,x,y,t[4];
scanf("%f,%f,%f,%d",&a,&b,&y0,&n);
h=(b-a)/n;
x=a;y=y0;
printf("%f,%f\n",x,y);
k=1;
do{t[0]=f(x,y);
x=x+h/2;
t[1]=f(x,y+h*t[0]/2);
t[2]=f(x,y+h*t[1]/2);
x=x+h/2;
t[3]=f(x,y+h*t[2]);
y=y+h*(t[0]+2*t[1]+2*t[2]+t[3])/6;
printf("%f,%f\n",x,y);
k++;
}while(k<=n);
}
牛顿插值多项式:
#include<stdio.h>
#include<math.h>
main()
{int i,j,k,n;
float x[10],y[10],a,b,p;
printf("input n\n");
scanf("%d",&n);
printf("input X\n");
for(i=0;i<=n;i++)
scanf("%f",&x);
printf("input Y\n");
for(i=0;i<=n;i++)
scanf("%f",&y);
printf("input x\n");
scanf("%f",&a);
b=0;
k=0;
do{p=1;
j=0;
do
{if(j!=k)
p=p*(a-x[j])/(x[k]-x[j]);
j++;
}while(j<n);
b=b+p*y[k];
k++;
}while(k<n);
printf("x=%f,y=%f",a,b);
}
雅可比迭代:
#include<stdio.h>
#include<math.h>
main()
{float a[10][10],b[10],x[10],y[10],e,sum,c;
int i,j,n,l;
printf("The top exp is ");
scanf("%d",&n);
printf("Now input array A\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[j]);
printf("Now input array B first and then array X\n");
for(i=0;i<n;i++)
scanf("%f,%f",&b,&x);
printf("Now input e\n");
scanf("%f",&e);
l=0;
do{for(i=0;i<n;i++)
{sum=0;
for(j=0;j<i;j++)
sum+=a[j]*x[j];
for(j=i+1;j<n;j++)
sum+=a[j]*x[j];
y=(b-sum)/a;
l+=1;
}
c=fabs(x[0]-y[0]);
for(i=0;i<n;i++)
if(c<fabs(x-y))
c=fabs(x-y);
for(i=0;i<n;i++)
x=y;
}while(c<e);
printf("%d\n",l);
for(i=0;i<n;i++)
printf("%f\n",y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -