#include<iostream.h>
#include<fstream.h>
#include"math.h"
#include"stdlib.h"
#include"stdio.h"
#include "malloc.h"
#include "string.h"
#include "process.h"
#include<fstream.h>
//...............定义数组求解子函数....................//
void grad(int n,double a[],double b[],double ee,double x[])
{
int i,j,k;
double *p, *r, *g, *q, alpha, beta, d, e;
if((p=new double[n])==NULL){}
if((r=new double[n])==NULL){}
if((g=new double[n])==NULL){}
if((q=new double[n])==NULL){}
for(i=0;i<=n-1;i++)
{
x[i]=0.0;
p[i]=b[i];
r[i]=b[i];
}
i=0;
while(i<=n-1)
{
for(k=0;k<=n-1;k++)
{
g[k]=0.0;
for(j=0;j<=n-1;j++)
g[k]=g[k]+a[k*n+j]*p[j]; //............s[]=g[]...........//
}
d=0.0; e=0.0;
for(k=0;k<=n-1;k++)
{
d=d+r[k]*r[k];
e=e+p[k]*g[k];
}
alpha=d/e;
for(k=0;k<=n-1;k++)
{
x[k]=x[k]+alpha*p[k];
}
for(k=0;k<=n-1;k++)
{
q[k]=0.0;
for(j=0;j<=n-1;j++)
{
q[k]=q[k]+a[k*n+j]*x[j];
}
}
d=0.0;
for(k=0;k<=n-1;k++)
{
r[k]=b[k]-q[k]; //.........求解余量..............//
d=d+r[k]*g[k];
}
beta=d/e;
d=0.0;
for(k=0;k<=n-1;k++)
{
d=d+r[k]*r[k];
}
d=sqrt(d);
if(d<ee)
{
free(p);
free(r);
free(g);
free(q);
return;
}
for(k=0;k<=n-1;k++)
{
p[k]=r[k]-beta*p[k];
}
i=i+1;
}
free(p);
free(r);
free(g);
free(q);
return;
}
void main()
{
int i;
double ee;
double x[10];
double aa[100];
int m=0;
double a[10][10]={100,2,1,0,0,1,2,0,0,0,2,80,3,1,0,0,1,1,0,0,1,3,125,1,2,0,0,1,0,0,0,1,1,160,2,2,0,0,2,1,0,0,2,2,200,1,1,0,0,1,1,0,0,2,1,100,3,2,0,0,2,1,0,0,1,3,80,2,1,0,0,1,1,0,0,2,2,250,1,0,0,0,0,2,0,0,1,1,125,1,0,0,0,1,1,0,0,0,1,200};
for(int ii=0;ii<10;ii++)
{
for(int jj=0;jj<10;jj++)
{
aa[m++]=a[ii][jj];
}
}
double b[10]={206,88,13,175,606,15,173,258,382,407};
ee=0.000001;
grad(10,aa,b,ee,x);
for(i=0;i<=10;i++)
{
cout<<"x["<<i<<"]="<<x[i]<<endl;
}
}
gongetidu.rar_共轭梯度_油藏_油藏工程_油藏数值
版权申诉
48 浏览量
2022-09-20
20:22:29
上传
评论 1
收藏 280KB RAR 举报
weixin_42651887
- 粉丝: 80
- 资源: 1万+