数值分析c语言(2)
程序员文章站
2022-03-05 15:38:36
...
牛顿插值多项式
#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[i]);
printf("input Y\n");
for(i=0;i<=n;i++)
scanf("%f",&y[i]);
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>
#define N 100
float f(float x)
{float y;
y=x-cos(x);
return y;
}
main()
{float x0,x1,a;
int k;
scanf("%f,%f",&x0,&a);
for(k=0;k<N;k++)
{x1=x0-(x0-cos(x0))/(1+sin(x0));
if(fabs(x1-x0)<a)
{printf("%f,%d",x1,k);
break;
}
else x0=x1;
}
if(k>=N)
{printf("error");
}
}
牛顿下山
#include<stdio.h>
#include<math.h>
float f(float x)
{float y;
y=pow(x,3)-x-1;
return y;
}
float g(float x)
{float y;
y=3*pow(x,2)-1;
return y;
}
main()
{float x0,x1,b,e,a,x;
int k;
scanf("%f,%f",&x0,&a);
k=0;
if(fabs(g(x0))<a)
{printf("error");
}else
e=1.00;
while(fabs(f(x0))>=a)
{do{x1=x0-e*f(x0)/g(x0);
b=x0;
x0=x1;
e=e/2.00;
}while(fabs(f(x1))>=fabs(f(b)));
k+=1;e=1.00;
}
x=x0;
printf("%d,%f",k,x);
}
秦九韶
#include<stdio.h>
#include<math.h>
#define N 100
main()
{int m,i,j;
double sum,x,a[N];
printf("input the x and the top exp:");
scanf("%lf,%d",&x,&m);
printf("\ninput the a[i](0<i<100):");
for(i=0;i<=m;i++)
{scanf("%lf",&t);
a[i]=t;
}
sum=a[m];
for(j=m-1;j>=0;j--)
sum=x*sum+a[j];
printf("\nthe result is:%lf\n",sum);
}
三对角线追赶法
#include<stdio.h>
#include<math.h>
main()
{int i,j,k,n;
float d[10][10],g[10],a[10],b[10],c[10],x[10],y[10],f[10];
printf("the top exp is ");
scanf("%d",&n);
scanf("%f,%f,%f,%f",&d[0][0],&d[0][1],&d[n-1][n-2],&d[n-1][n-1]);
for(i=1;i<n-1;i++)
for(j=i-1;j<=i+1;j++)
scanf("%f",&d[i][j]);
for(i=0;i<n;i++)
scanf("%f",&g[i]);
for(i=1;i<n-1;i++)
a[i]=d[i][i-1];
for(i=0;i<n;i++)
b[i]=d[i][i];
for(i=0;i<n-1;i++)
c[i]=d[i][i+1];
f[0]=c[0]/b[0];
for(k=1;k<n-1;k++)
f[k]=c[k]/(b[k]-a[k]*f[k-1]);
y[0]=g[0]/b[0];
for(i=1;i<n;i++)
y[i]=(g[i]-a[i]*y[i-1])/(b[i]-a[i]*f[i-1]);
x[n-1]=y[n-1];
for(i=n-2;i>=0;i--)
x[i]=y[i]-f[i]*x[i+1];
for(i=0;i<n;i++)
printf("%f\n",x[i]);
}
系统
#include <stdio.h>
int main(void)
{
int a,b,CHECK;
printf("Input two nonzero intergers:");
scanf("%d,%d",&a,&b);
printf("%s%4d\n%s%4d\n%s%4d\n%s%4d\n%s%4d\n",
" a=",a,
" b=",b,
" a/b=",a/b,
" a%b=",a%b,
" CHECK=",(a/b)*b+a%b-a
);
return 0;
}
弦割法
#include<stdio.h>
#include<math.h>
float f(float x)
{float y;
y=pow(x,3)-x-1;
return y;
}
main()
{float x0,x1,x2,a;
int k,N;
k=0;
scanf("%f,%f,%f,%d",&x0,&x1,&a,&N);
for(k=0;k<N;k++)
{x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
if(fabs(x2-x1)<a)
{printf("%d,%f",k,x2);
break;
}
else x0=x1;
x1=x2;
}
if(k>=N)
{printf("error");
}
}
雅克比迭代
#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[i][j]);
printf("Now input array B first and then array X\n");
for(i=0;i<n;i++)
scanf("%f,%f",&b[i],&x[i]);
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[i][j]*x[j];
for(j=i+1;j<n;j++)
sum+=a[i][j]*x[j];
y[i]=(b[i]-sum)/a[i][i];
l+=1;
}
c=fabs(x[0]-y[0]);
for(i=0;i<n;i++)
if(c<fabs(x[i]-y[i]))
c=fabs(x[i]-y[i]);
for(i=0;i<n;i++)
x[i]=y[i];
}while(c<e);
printf("%d\n",l);
for(i=0;i<n;i++)
printf("%f\n",y[i]);
}
综合测评
#include<stdio.h>
#include<math.h>
float g(float a,float b,float c,float d,float e,float f)
{float y;
y=(a*36.0+b*35.0+c*65.0+d*48.0+e*21.0+f*18.0)/223.0;
return y;
}
main()
{float a,b,c,d,e,f,num[5],max;
int i,j,h,n;
for(i=1;i<=4;i++)
{printf("input your marks:\n");
scanf("%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f);
printf("your average mark:");
printf("[%d]\n",i);
printf("%6.3f\n",g(a,b,c,d,e,f));
num[i]=g(a,b,c,d,e,f);
}
for(j=1;j<=4;j++)
{max=num[1];
h=1;
for(i=1;i<=4;i++)
if(num[i]>=max)
{max=num[i];
h=i;
}
printf("%6.4f,%d\n",max,h);
num[h]=0;
}
}
上一篇: clinit和init(转载)
下一篇: Java网络编程笔记