數值分析c語言(2)

牛頓插值多項式

#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;
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章