C++实现合成地震记录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
using namespace std;
#define pi 3.14
#define dt 0.002
#define xl 0.060
#define hl 0.300
#define fm 30
void main()
{
double h[200];
double t,m,n;
int i,j;
m=xl/dt+1;
n=hl/dt+1;
int b=(int)m/2;
double x[31], y[246];
cout<<"设计的层数为层"<<'\n'<<"各层密度分别为2.0 2.3 2.3 2.6 2.0"<<'\n';
cout<<"各层速度分别为2000 2500 2100 2700 3000"<<'\n'<<"各层厚度分别为100 100 100 100 100"<<'\n';
ofstream out1("wavelet.txt");
for(i=0;i<=15;i++)///////////////////生成雷克子波
{
t=i*dt;
x[15-i]=(1.0-2.0*pow(pi*fm*t,2.0))*exp(-pow(pi*fm*t,2.0));
x[15+i]=x[15-i];
// cout< } for(i=0;i<31;i++) { cout< out1< } out1<< flush; out1.close(); double p[5]={2.0, 2.3, 2.3, 2.6, 2.0};/////////////////////////////////生成反射系数double v[5]={2000, 2500, 2100, 2700, 3000}; double th[5]={100, 100, 100, 100, 100}; double *w1, *w2, *w3, *w4, r[4],a[4]={0}; w1=p; w2=v; w3=r; for(i=0;i<4;i++) { r[i]=(w1[i+1]*w2[i+1]-w1[i]*w2[i])/(w1[i+1]*w2[i+1]+w1[i]*w2[i]); // cout<<*(e+i); // cout< } a[0]=2*th[0]/(v[0]*dt); for(i=1;i<4;i++) { a[i]=a[i-1]+2*th[i]/(v[i]*dt);