資源簡介
數值計算方法中的幾個主要算法編程實現,內有程序(完全可運)和實驗報告(不明白的可以參照),包括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語言除法模擬源碼
評論
共有 條評論