logo资料库

一维大地电磁反演.docx

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
大地电磁一维响应资料的马夸特法反演程序 2013 年 11 月 14 日 建立一维反演工程"Mao_MT1D_inv",在“项目”中的“加上现有项”,加入头文件 “Mao_MT1d_yacobi_axb.h”,在 Mao_MT1D_inv.cpp 文件中写入如下代码: #include #include #include #include #include "Mao_MT1d_yacobi_axb.h" #pragma comment( lib, "Static_MT_yacobi_AxB.lib" ) using namespace std; const double pi=3.1415926; // high是各层的厚度,单位是km void For1Dmao(int nFreq, int nlayer, double Freq[],double Res[], double high[], double app[]) { int i,j; double tmp1,tmp2,tmp3,Gm,eGm,Am,Bm,un,vn,p,q;
for(i=0;i0;j--) //对第j层(j=m)层循环计算 { //计算Lm+1,即求p、q的值 tmp1=sqrt(Res[j]/Res[j-1])*un; tmp2=sqrt(Res[j]/Res[j-1])*vn; tmp3=(1.0+tmp1)*(1.0+tmp1)+tmp2*tmp2; p=(1.0-tmp1*tmp1-tmp2*tmp2)/tmp3; q=-2.0*tmp2/tmp3; //计算Rm;即求um,vm的值 Gm=4.0*pi*high[j-1]/sqrt(10.0*Res[j-1]/Freq[i]); eGm=exp(-Gm); Am=eGm*(p*cos(Gm)-q*sin(Gm)); Bm=eGm*(q*cos(Gm)+p*sin(Gm));
tmp3=(1.0+Am)*(1.0+Am)+Bm*Bm; un=(1.0-Am*Am-Bm*Bm)/tmp3; vn=-2.0*Bm/tmp3; } app[i]=Res[0]*(un*un+vn*vn); //第i个频率点的视电阻率 for(i=0;i
e=d2[i]/d1[i]-1.0; y+=e*e; } return sqrt(y/double(n)); } // UT*C=Y: U[ma,na], C[ma,1], Y[na,1] void Mao1(int ma,int na,double A[][5],double C[],double Y[]) { int i,j; for(i=0;i
B[][5],double C[][5]) { int i,j,k; double cij; for(i=0;i
{ } for(j=0;j
app[nfre],x[nd],A[nd][nd],G[nd],eps0,eps1,d0[nfre],alfa, J[nfre][nd],ebs[nfre],Y[nd][nd],d1[nfre]; // 初始模型参数 double res0[]={50.0, 20.0, 50.0}; double high0[]={0.6, 1.5}; // 单位是公里。 // ebs是观测数据与理论响应之间的残差向量,J是雅克比矩 阵,A=JT*J, G=JT*ebs // 反演收敛标准之一,计算精度小于err cout<
cout<<"反演参数和反演数据。。。"<
分享到:
收藏