• 大小: 374KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-11-25
  • 语言: C/C++
  • 标签:

资源简介

数值计算方法中的几个主要算法编程实现,内有程序(完全可运)和实验报告(不明白的可以参照),包括M次多项式曲线拟合、复合辛普森、龙贝格求积分算法、经典四阶龙格库塔法、泰勒公式、三次样条插值、用牛顿法解非线性方程组等十一个算法,希望对大家能够有所帮助。

资源截图

代码片段和文件信息

#include 
#include 
#include 

#define M 10

void polyfit(int ndouble *xdouble *yint poly_ndouble a[]);

main()
{
int ijnpoly_n=2;
double x[M]y[M];
double a[3];

printf(“Input n of xy:“);
scanf(“%d“&n);
printf(“Input x:“);
for(i=0;i scanf(“%d“&x[i]);
printf(“Input y:“);
for(i=0;i scanf(“%d“&y[i]);

system(“cls“);
polyfit(nxypoly_na);

for (i=0;i     printf(“a[%d]=%g\n“ia[i]);
getch();
}


/*==================polyfit(nxypoly_na)===================*/
/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/
/*===返回a0a1a2……a[poly_n],系数比项数多一(常数项)=====*/
void polyfit(int ndouble x[]double y[]int poly_ndouble a[])
{
int ij;
double *tempx*tempy*sumxx*sumxy*ata;
void gauss_solve(int ndouble A[]double x[]double b[]);
tempx=calloc(nsizeof(double));
sumxx=calloc(poly_n*2+1sizeof(double));
tempy=calloc(nsizeof(double));
sumxy=calloc(poly_n+1sizeof(double));
ata=calloc((poly_n+1)*(poly_n+1)sizeof(double));
for (i=0;i     {
      tempx[i]=1;
      tempy[i]=y[i];
     }
for (i=0;i<2*poly_n+1;i++)
     for (sumxx[i]=0j=0;j   {
    sumxx[i]+=tempx[j];
    tempx[j]*=x[j];
   }
for (i=0;i    for (sumxy[i]=0j=0;j   {
    sumxy[i]+=tempy[j];
    tempy[j]*=x[j];
   }
for (i=0;i     for (j=0;jata[i*(poly_n+1)+j]=sumxx[i+j];
gauss_solve(poly_n+1ataasumxy);

free(tempx);
free(sumxx);
free(tempy);
free(sumxy);
free(ata);
}

void gauss_solve(int ndouble A[]double x[]double b[])
{
int ijkr;
double max;
for (k=0;k     {
      max=fabs(A[k*n+k]); /*find maxmum*/
      r=k;
      for (i=k+1;i   if (max      {
       max=fabs(A[i*n+i]);
       r=i;
      }
      if (r!=k)
for (i=0;i      {
       max=A[k*n+i];
       A[k*n+i]=A[r*n+i];
       A[r*n+i]=max;
      }
      max=b[k];                    /*change array:b[k]&b[r]     */
      b[k]=b[r];
      b[r]=max;
      for (i=k+1;i   {
    for (j=k+1;j        A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k];
    b[i]-=A[i*n+k]*b[k]/A[k*n+k];
   }
     }

for (i=n-1;i>=0;x[i]/=A[i*n+i]i--)
     for (j=i+1x[i]=b[i];jx[i]-=A[i*n+j]*x[j];
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     837120  2009-06-27 21:24  数值计算\数值计算课程设计报告.doc

     文件       2698  2009-06-11 09:36  数值计算\数值分析程序代码\经典四阶龙格库塔法.c

     文件        966  2009-06-11 10:00  数值计算\数值分析程序代码\弦割法.c

     文件       2489  2009-06-11 12:15  数值计算\数值分析程序代码\M次多项式曲线拟合.c

     文件       1316  2009-06-11 21:02  数值计算\数值分析程序代码\高斯列主元.c

     文件       2294  2009-06-11 21:26  数值计算\数值分析程序代码\用牛顿法解非线性方程组.c

     文件       2383  2009-06-11 22:08  数值计算\数值分析程序代码\龙贝格求积分算法.c

     文件       1019  2009-06-11 22:15  数值计算\数值分析程序代码\三次样条插值.c

     文件       1146  2009-06-11 22:55  数值计算\数值分析程序代码\雅克比迭代.c

     文件        801  2009-06-19 13:58  数值计算\数值分析程序代码\泰勒公式.c

     文件        367  2009-06-19 14:17  数值计算\数值分析程序代码\复合辛普森.c

     文件        624  2009-06-28 05:32  数值计算\数值分析程序代码\二分法.c

     目录          0  2011-04-09 20:22  数值计算\数值分析程序代码

     目录          0  2011-04-09 20:21  数值计算

----------- ---------  ---------- -----  ----

               853223                    14


评论

共有 条评论