Madagascar与matlab间数据交互

使用Madagascar软件编写程序有时需要其他软件进行辅助运算,在调试时没法对madagascar程序的rsf数据直接进行处理,但Madagascar提供了一种可交互式的接口函数库。
  1. Matlab接口安装

安装madagascar时,输出安装文件规则文件时使用以下命令:

./configure ~/安装路径 

但实际上可以在后面加入参数以安装对应的接口库如matlab接口参数为:

./configure ~/安装路径 API=matlab
  1. Matlab接口函数库

主要使用的有:

  1. 获取RSF数据:维度rsf_dim(datain) #datain 为输入 .rsf数据名

  1. 读取RSF数据:rsf_read(data_matlab,datain)

#data_matlab为 输出.mat数据名 , datain 为 输入.rsf数据名

  1. 创建RSF数据:rsf_create(dataout,size(data_matlab))

#dataout 为输出.rsf数据名,data_matlab为输入的.mat数据名,以.mat规模创建RSF数据文件

  1. 写入RSF数据:rsf_write(data_matlab,dataout) #将数据写入RSF文件

  1. 函数使用实例

概念流程图

3.1 Madagascar程序编写

  1. 初始化matlab路径及.m文件路径

# INITIALIZATION
########################################################################
matlab         = WhereIs('matlab')    #获取matlab.exe路径
matROOT = '../Matfun'                 #.m文件目录
matfun= 'datin                        #''内为.m文件名字
matlabpath = os.environ.get('MATLABPATH',os.path.join(RSFROOT,'lib'))


if not matlab:
    sys.stderr.write('\nCannot find Matlab.\n')
    sys.exit(1)
############################################################
  1. 调用matlab

Flow('dout0',['c',os.path.join(matROOT,matfun+'.m')],   #dout0 - 输出文件名 ,c - 输入数据名
     '''MATLABPATH=%(matlabpath)s %(matlab)s 
     -nosplash -nojvm -r "addpath %(matROOT)s;%(matfun)s('${SOURCES[0]}','${TARGETS[0]}');quit"
     '''%vars(),stdin=0,stdout=-1)

3.2 matlab文件编写

function datin(datain,dataout)
% from Madagascar to Matlab
dims=rsf_dim(datain);                %获取维度
read_data=zeros(dims');              %以dim维度数组创建数据变量read_data
rsf_read(read_data,datain);          %将datain RSF数据写入read_data
%save read_data.mat read_data;       %可将.mat文件输出

% from Matlab to Madagascar
rsf_create(dataout,size(read_data)');%以read_data数据大小生成dataout文件
rsf_write(read_data,dataout);        %将read_data数据写入dataout
end
  1. 实例演示

4.1 手动导入.rsf文件进行mat文件转换

b为你要转换的RSF数据文件名(输入matlab程序),dout0为经matlab处理后的数据文件转换回rsf数据的文件名。

执行scons后生成mat数据

4.2 在madagascar环境下生成模型并转换成mat数据

执行程序

生成mat数据

使用vpconvert函数转换vpl文件到eps进行查看

查看结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值