• 大小: 131.62 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-11-20
  • 语言: 其他
  • 标签: 数值分析  

资源简介

Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解Fredholm积分方程的数值解

资源截图

代码片段和文件信息

#include
#include
#define N 7//复化梯形2602结点,复化simpson 83个节点 高斯7个节点

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]);//复化梯形算法
void fsimpson(double f[N+1]double X[N+1]);//复化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(“数值解为:%f“f[i]);printf(“ “);printf(“结点值为:%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(“数值解为:%f“f[i]);printf(“ “);printf(“结点值为:%f“X[i]);
printf(“\n“);
}*/

GaussLegendre(fX);
for(i=1;i<=N;i++)
{
printf(“精确值为%f“U(X[i]));printf(“数值解为:%f“f[i]);printf(“ “);printf(“结点值为:%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];//回代过程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];//回代过程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])//复化梯形算法
{
double h=0;int ijk;
    double** A=new double*[N+1];//动态二维数组
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++)//对矩阵的赋值
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])//复化Simpson算法
{
double h=0m;int ijk;
    double** A=new double*[N+1];//动态二维数组
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++)//对矩阵的赋值
for(j=1;j<=N;j++)
{
if(j==i)
{
if(

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

     文件       4725  2009-05-31 09:25  第三次大作业\Cpp1.cpp

     文件       3377  2009-05-31 09:19  第三次大作业\Cpp1.dsp

     文件        516  2009-05-31 09:41  第三次大作业\Cpp1.dsw

     文件      50176  2009-05-31 09:41  第三次大作业\Cpp1.ncb

     文件      48640  2009-05-31 09:41  第三次大作业\Cpp1.opt

     文件        673  2009-05-31 09:41  第三次大作业\Cpp1.plg

     文件     217187  2009-05-31 09:25  第三次大作业\Debug\Cpp1.exe

     文件      15102  2009-05-31 09:41  第三次大作业\Debug\Cpp1.obj

     文件     476160  2009-05-31 09:25  第三次大作业\Debug\Cpp1.pdb

     文件      86016  2009-05-31 09:25  第三次大作业\Debug\vc60.pdb

     目录          0  2009-07-14 22:18  第三次大作业\Debug

     目录          0  2009-10-30 01:10  第三次大作业

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

               902572                    12


评论

共有 条评论