matlab斯奈尔定律,实验一 基本地震学理论(斯奈尔定律)

C-2. 编写子函数:对于固-固介质界面,已知P波和S波速度以及入射角,求出P波和S波反射及透射角。(注意:该子函数可以计算并列出入射波的临界角)

一、 实验原理

1eaf56b5a19698ea9203c2852b86a680.png

二、程序源代码

function [ a1,a2,b1,b2] = snel( i,a,vp1,vp2,vs1,vs2 )%本程序一些地方有中文,在某些版本的matlab中可能无法正确显示,但不影响使用。

i=input('请输入波形,p波请输入1,S波请输入2,SH波请输入3:');%........................%

a=input('请输入入射角 a:');

vp1=input('上层p波速度 vp1:');

vp2=input('上层S波速度 vp2:');%如果作为子函数使用最好把这一块输入去掉,把输入调整到主函数中%

vs1=input('下层P波速度 vs1:');

vs2=input('下层S博速度 vs2:');%..........................................................%

if i==1 %P波

a1=a;

a2=asind(sind(a)*vs1/vp1);

b1=asind(sind(a)*vp2/vp1);

b2=asind(sind(a)*vs2/vp1);

fprintf('%f\t%f\t%f\t%f\n',a1,a2,b1,b2);

if vp2>vp1

r1=asind(vp1/vp2);

fprintf('p波临界角为:%f\n',r1);

else fprintf('p波没有临界角\n');

end

if vs2>vp1

r2=asind(vp1/vs2);

fprintf('sv波临界角为:%f\n',r2);

else fprintf('sv波没有临界角\n');

end

end

if i==2; %S波

a2=asind(sind(a)*vp1/vs1);

a1=asind(sind(a)*vs1/vs1);

b2=asind(sind(a)*vp2/vs1);

b1=asind(sind(a)*vs2/vs1);

fprintf('%f\t%f\t%f\t%f\n',a1,a2,b1,b2);

if vp2>vs1

r2=asind(vs1/vp2);

fprintf('p波临界角为:%f\n',r2);

else fprintf('p波没有临界角\n');

end

if vs2>vs1

r1=asind(vs1/vs2);

fprintf('sv波临界角为:%f\n',r1);

else fprintf('sv波没有临界角\n');

end

end

if i==3 %SH波

a2=asind(sind(a)*vs1/vs1);

b2=asind(sind(a)*vs2/vs1);

fprintf('%f\n%f\n',a2,b2);

end

end

三、 结果及分析

这个小问题并没有什么结果,特采用P波以30度角测试一下,选取模型,VP1=6.8km/s,VP2=8.0 km/s,VS1=3.9 km/s,VS2=4.8km/s。

30.000000 16.664362 36.031879 20.667316

p波临界角为:58.211669

sv波没有临界角

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值