資源簡(jiǎn)介
Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解Fredholm積分方程的數(shù)值解
代碼片段和文件信息
#include
#include
#define?N?7//復(fù)化梯形2602結(jié)點(diǎn),復(fù)化simpson?83個(gè)節(jié)點(diǎn)?高斯7個(gè)節(jié)點(diǎn)
void?main()
{
void?Doolittle(double?*A[]double?B[N+1]double?X[N+1]);//Doolittle分解法
void?ftrapezium(double?f[N+1]double?X[N+1]);//復(fù)化梯形算法
void?fsimpson(double?f[N+1]double?X[N+1]);//復(fù)化Simpson算法
void?GaussLegendre(double?f[N+1]double?X[N+1]);//Gausse型積分公式
double?K(double?xdouble?y);
????double?g(double?x);
????double?U(double?x);
int?i=1jk;double?X[N+1]f[N+1];
/*ftrapezium(fX);
do
{
printf(“精確值為%f“U(X[i]));printf(“數(shù)值解為:%f“f[i]);printf(“?“);printf(“結(jié)點(diǎn)值為:%f“X[i]);
printf(“\n“);i=i+10;
}while(i<=N);*/
/*fsimpson(fX);
????for(i=1;i<=N;i++)
{
printf(“精確值為%f“U(X[i]));printf(“數(shù)值解為:%f“f[i]);printf(“?“);printf(“結(jié)點(diǎn)值為:%f“X[i]);
printf(“\n“);
}*/
GaussLegendre(fX);
for(i=1;i<=N;i++)
{
printf(“精確值為%f“U(X[i]));printf(“數(shù)值解為:%f“f[i]);printf(“?“);printf(“結(jié)點(diǎn)值為:%f“X[i]);
printf(“\n“);
}
}
void?Doolittle(double?*A[]double?B[N+1]double?X[N+1])
{
int?ijktl;double?m=0n=0;double?Y[N+1];
for(k=1;k<=N;k++)//求D、U
?{
?for(j=k;j<=N;j++)//U
?{
?m=0;
?for(t=1;t<=k-1;t++)
?{m+=A[k][t]*A[t][j];}
?A[k][j]=A[k][j]-m;
?}
?for(i=k+1;i<=N;i++)//D
?{
?n=0;
?for(l=1;l<=k-1;l++)
?{n+=A[i][l]*A[l][k];}
?A[i][k]=(A[i][k]-n)/A[k][k];
?}
?} ?
?Y[1]=B[1];//回代過(guò)程1
?for(i=2;i<=N;i++)
?{
?m=0;
?for(t=1;t<=i-1;t++)
?m+=A[i][t]*Y[t];
?Y[i]=B[i]-m;
?}
?X[N]=Y[N]/A[N][N];//回代過(guò)程2
?for(i=N-1;i>=1;i--)
?{
?n=0;
?????for(t=i+1;t<=N;t++)
?n+=A[i][t]*X[t];
?X[i]=(Y[i]-n)/A[i][i];
?}?
}
double?K(double?xdouble?y)
{
return?exp(x*y);
}
double?g(double?x)
{
return?exp(4*x)+(exp(x+4)-exp((-1)*(x+4)))/(x+4);
}
double?U(double?x)
{
return?exp(4*x);
}
void?ftrapezium(double?f[N+1]double?X[N+1])//復(fù)化梯形算法
{
double?h=0;int?ijk;
????double**?A=new?double*[N+1];//動(dòng)態(tài)二維數(shù)組
for(i=1;i<=N;i++)
A[i]=new?double[N+1];
double?B[N+1];
h=2.0/(N-1);
for(i=1;i<=N;i++)
X[i]=-1+(i-1)*h;
for(i=1;i<=N;i++)//對(duì)矩陣的賦值
for(j=1;j<=N;j++)
{
if(j==i)
A[i][j]=1+h*exp(X[i]*X[i]);
????else
A[i][j]=h*exp(X[i]*X[j]);
}
for(i=1;i<=N;i++)
{
A[i][1]=(h/2)*exp(X[i]*X[1]);
A[i][N]=(h/2)*exp(X[i]*X[N]);
}
A[1][1]=1+(h/2)*exp(X[1]*X[1]);
A[N][N]=1+(h/2)*exp(X[N]*X[N]);
for(i=1;i<=N;i++)
B[i]=g(X[i]);
Doolittle(ABf);
????
double?t=0;
for(i=2;i<=N-1;i++)
t=t+h*fabs(f[i]-U(X[i]))*fabs(f[i]-U(X[i]));
t=t+0.5*h*fabs(f[1]-U(X[1]))*fabs(f[1]-U(X[1]));
t=t+0.5*h*fabs(f[N]-U(X[N]))*fabs(f[N]-U(X[N]));
printf(“t=%.12e“t);printf(“\n“);
}
void?fsimpson(double?f[N+1]double?X[N+1])//復(fù)化Simpson算法
{
double?h=0m;int?ijk;
????double**?A=new?double*[N+1];//動(dòng)態(tài)二維數(shù)組
for(i=1;i<=N;i++)
A[i]=new?double[N+1];
double?B[N+1];
h=2.0/(N-1);
m=(N-1)/2;
for(i=1;i<=N;i++)
X[i]=-1+(i-1)*h;
for(i=1;i<=N;i++)//對(duì)矩陣的賦值
for(j=1;j<=N;j++)
{
if(j==i)
{
if(
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4725??2009-05-31?09:25??第三次大作業(yè)\Cpp1.cpp
?????文件???????3377??2009-05-31?09:19??第三次大作業(yè)\Cpp1.dsp
?????文件????????516??2009-05-31?09:41??第三次大作業(yè)\Cpp1.dsw
?????文件??????50176??2009-05-31?09:41??第三次大作業(yè)\Cpp1.ncb
?????文件??????48640??2009-05-31?09:41??第三次大作業(yè)\Cpp1.opt
?????文件????????673??2009-05-31?09:41??第三次大作業(yè)\Cpp1.plg
?????文件?????217187??2009-05-31?09:25??第三次大作業(yè)\Debug\Cpp1.exe
?????文件??????15102??2009-05-31?09:41??第三次大作業(yè)\Debug\Cpp1.obj
?????文件?????476160??2009-05-31?09:25??第三次大作業(yè)\Debug\Cpp1.pdb
?????文件??????86016??2009-05-31?09:25??第三次大作業(yè)\Debug\vc60.pdb
?????目錄??????????0??2009-07-14?22:18??第三次大作業(yè)\Debug
?????目錄??????????0??2009-10-30?01:10??第三次大作業(yè)
-----------?---------??----------?-----??----
???????????????902572????????????????????12
評(píng)論
共有 條評(píng)論