⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tenprograms.txt

📁 数值计算方法相关的十个程序.包括对分法、迭代法、牛顿法、割线法、高斯消元法、雅克比迭代法程序、幂法、线性拟合态、
💻 TXT
字号:
数值计算方法程序
一、	
利用对分法、迭代法、牛顿法、割线法求方程x*x*x-5*x/2+1=0在区间[0,1]上的根,要精确到三位小数。
1、对分法程序
#include<math.h>
main()
{float   a,b ,n,p;
float  x;
int  i;
float  f (float x);
printf("输入区间");
printf("x");
scanf("%f",&a);
printf("精确值");
sanf("%f",&b);
printf("精确值:");
scanf("%f",&p);
n=(log10(b-a)-log10(pow(10,-p)/2))/log10(2);
printf("%f",n) ;
for (i=0;i<n;i++)
{x=(a+b)/2;
if  (f(x)==0)
printf("实际是%f",x);
break;}
else if  (f(a)*f(b)<0)
b=x;
else a=x;
}
printf("实际是%f",x);
getch();
}
float  f(float x)
{float  z;
z=power(x,3)+3*pow(x,2)+3*x-2 ;
return(z); }


2、迭代法程序
#include<math.h>
main()
{float x,y,z,q;
Printf(“input x”);
Scanf(“%f”,&x);
do{
y=(2*pow(x,3)+2)/5;
printf(“z=%f”,y);
z=(2*pow(x,3)+2)/ 5;
printf(“x=%f”,x);
x=z-(y-z)*(y-z)/(z-2*y+x);
printf(“x=%f”,x);
printf(“\n”);
q=x-z;
}
while(fabs(q)>0.0005);
getch();
}

3、牛顿迭代法程序
#include<math.h>
main()
{float x,y,e,q;
Printf();
Scanf();
e=x;
do {y=e-(pow(e,3))-2.5*x+1}/(3*pow(e,2)-2.5);
e=y;
q=fabs(x-y);
x=y;
printf(“x=%f”,y);
}
while (q>0.0005);
Printf(“x=%f”,x);
}
4、割线法程序
#include<math.h>
main()
{floatx[10],q,f();
int  I;
printf();
scanf();
scanf();
I=1;
do{
x[i+1]=x[i]-(f(x[i])/(f(i)-f(i-1)))*(x[i]-x[i-1]);
printf(“x=%f”,x[i]);
q=fabs(x[i+1]-x[i]);
printf();
i=i+1;
}
while (q>0.005);
printf(“x=%f”,x[i]);
getch();}
float  f(float  i)
{
float  z;
z=pow(I,3)-2.5*i+1;
return(z);
}
二、其他六个程序
5、高斯消元法
#include <math.h>
#include <stdio.h>
#define n 3
#define eps 1e-3
main()
{int i,j,k,r;
 double c,a[n][n+1]={{2,2,3,3},{4,7,7,1},{-2,4,5,-7}};
  double static x[n];
  for(k=0;k<n-1;k++)
     {r=k;
        for(i=k;i<n;i++)
          if(fabs(a[i][k])>fabs(a[r][k]))r=i;
        if(fabs(a[r][k])<eps)
        {printf("\n there is a wrong!");
           exit(0);}
        if(r>k)
          {for(j=k;j<n+1;j++)
             {c=a[k][j];a[k][j]=a[r][j];a[r][j]=c;}
                }
        for(i=k+1;i<n;i++)
         {a[i][k]=a[i][k]/a[k][k];
            for(j=k+1;j<n+1;j++)
             a[i][j]=a[i][j]-a[i][k]*a[k][j];
             }
             }
a[n-1][n]=a[n-1][n]/a[n-1][n-1];
for(k=n-2;k>=0;k--)
{c=0;
  for(j=k+1;j<n;j++)
  c=c+a[k][j]*a[j][n];
  a[k][n]=(a[k][n]-c)/a[k][k];
 }
for(k=0;k<n;k++)
  printf("\nx[%d]=%12.8f \n",k,a[k][n]);    
}

6、	雅克比迭代法程序
#include<math.h>
#include<stdio.h>
#define n 3
#define nmax 7
static double a[n][n]={{10,-1,-2},{-1,10,-2},{-1,-1,5}};
static double b[n]={7.2,8.3,4.2};
main()
{ int i,j,k;
   double sum,norm,d,s,x[n],y[n];
   for(i=0;i<n;i++) x[i]=0;
   k=0;
   printf("\nk=%2dx=",k);
   for(i=0;i<n;i++)  printf("%12.8f",x[i]);
   do 
     {k++;
      if(k>nmax){printf("\n the iteration failed!");break;}
      { for(i=0;i<n;i++)
         {sum=0.0;
          for(j=0;j<n;j++)
            if (j!=i) sum=sum+a[i][j]*x[j];
            y[i]=(b[i]-sum)/a[i][i];
           }
       for(i=0;i<n;i++)
          x[i]=y[i];
       printf("\nk=%2d x=",k);}
       for(i=0;i<n;i++)   printf("%f",x[i]);
       }while (x[i]>=0.1e-6);
          
}

7、	高斯---塞德尔迭代法程序
#include<math.h>
#include<stdio.h>
#define n 3
#define nmax 100
static double a[n][n]={{10,-1,-2},{-1,10,-2},{-1,-1,5}};
static double b[n]={7.2,8.3,4.2};
main()
{ int i,j,k;
   double sum,norm,d,s,x[n];
   for(i=0;i<n;i++) x[i]=0;
   k=0;
   printf("\nk=%2dx=",k);
   for(i=0;i<n;i++)  printf("%12.8f",x[i]);
   do 
     {k++;
      if(k>nmax){printf("\n the iteration failed!");break;}
      norm=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 (norm<d)norm=d;
          }
       printf("\nk=%2d x=",k);
       for(i=0;i<n;i++)   printf("%f",x[i]);
       }while (norm>=0.1e-6);
         if(norm<0.1e-6)
           {printf("\n\n the result is:\n");
            printf("\nk=%d",k);
            for (i=0;i<n;i++)
              printf("x[%d]=%12.8f",i,x[i]);
            }             
}

8、幂法
#include<stdio.h>
#include<math.h>
#define n 3
#define nmax 100
#define epsilon 0.001
static double a[n][n]={{2,3,2},{10,3,4},{3,6,1}};
static double x[n]={0,0,1};
static double y[n];
main()
{int i,j,k;
   double xmax,oxmax;
   oxmax=0;
   for(k=0;k<nmax;k++)
   {for(j=0;j<n;j++)
      {y[j]=0;
         for(i=0;i<n;i++)
         y[j]+=a[j][i]*x[i];
         }
         xmax=0;
         for(j=0;j<n;j++)
          if(fabs(y[j])>xmax) xmax=fabs(y[j]);
          for(j=0;j<n;j++)
          y[j]/=xmax;
           for(j=0;j<n;j++)
           x[j]=y[j];
           if(fabs(xmax-oxmax)<epsilon)
           {printf("最大特征根为:%f\n",xmax);
              printf("特征向量为:\n");
              for(k=0;k<n;k++) printf("%f\n",y[k]);
              break;
              }
              oxmax=xmax;
              }
}

9、线性拟合态
#include "stdio.h"
#define M 25
typedef struct pi
{ float x;
   float y;
   }p
main()
{int m,i;
   p point[M];
   float u11,u12,u21,u22,c1,c2;
   float a,b,t;
   printf("\ninput m value");
   scanf("%d",&m);
   printf("input the(x,y),i=1,2....%d\n",m);
   for(i=0;i<m;i++){
   scanf("%f",&t);
   point[i].x=t;
   scanf("%f",t);
   point[i].y=t;
   }
    
}
for(i=1;i<=m;i++){
u21=u21+point[i].x;
u22=u22+poiny[i].point[i];
c1=c1+point[i].y;
c2=c2+poiny[i].x*point[i].y;
}
u12=u21;
u11=m;
a=(cl*u22-c2*u12)/(u11*u22-u12*u21);
b=(cl*u21-c2*u11)/(u21*u12-u22*u11);
printf("p=%f+%fx\n",a,b);
return 0;
}
10、拉格朗日插值程序。
#include "stdio.h"
static double x[5]={1.615,1.634,1.702,1.828,1.921};
static double y[5]={2.41450,2.46459,2.65271,3.03035,3.34066};
main()
{int n,i,j;
 float x1,y1,t;
 printf("input numbers x1 n=\n");
 scanf("%f%d",&x1,&n);
 y1=0;
 for(i=0;i<n;i++)
   {t=1.0;
     for(j=0;j<n;j++)
       if(i!=j) t=t*(x1-x[j])/(x[i]-x[j]);
       y1=y1+t*y[i];}
 printf("y1=%f\n",y1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -