资源简介
数值计算方法中的几个主要算法编程实现,内有程序(完全可运)和实验报告(不明白的可以参照),包括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;j ata[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];j x[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
- 上一篇:单片机水位检测程序
- 下一篇:浮点数c语言除法模拟源码
评论
共有 条评论