Eidors使用

Eidors在编程中使用了cache,主要是用来重用缓存的值对于从而提高数值效率。但是这样就对新手阅读代码造成了一定的困扰。
关于如何将数据写进缓存,我们大可不必关心。
以fwd_model_parameters.m的一段程序为例。
在这里插入图片描述
还有calc_jacobian_bkgnd.m
在这里插入图片描述
给定输入参数(逆问题求解结构体,正问题结构体,电压数据),varargout = eidors_obj('get-cache', cache_obj, fstr );会先查看缓存里是否计算过重构电导率,倘若计算过,就不会再计算。直接将varargout输出。
在这里插入图片描述
倘若没计算过,varargout应该为空。
在这里插入图片描述
倘若计算过,varargout为非空,可以看到elem_data(这就是待求的电导率)是有值的,所以不用再进行逆问题求解,从而提高成像速度。
在这里插入图片描述

一、逆问题求解

在这里插入图片描述
这里以一个官网的最简单的单电阻模型例程为例。
考虑最简单的EIT系统。我们有一个电阻,我们想知道它的值。因此,我们将一个电极连接到每个端子上,并施加几个不同的测试电流(I1, I2, I3)和测量电压:(V1, V2, V3)从这些测量值计算出电阻的最小二乘估计。
在这里插入图片描述

r_mdl= eidors_obj('fwd_model','demo resistor model');
r_mdl = mdl_normalize( r_mdl, 0);

% Geometry
r_mdl.nodes= [1,1,1;  2,2,2];
r_mdl.elems= [1,2];
r_mdl.boundary= [1,2]; 

% Define Electrodes (there is only one)
r_mdl.electrode(1).z_contact= 10; % ohms
r_mdl.electrode(1).nodes=     1;
r_mdl.gnd_node= 2;

show_fem(r_mdl); view(-12,24);

% Define stimulation patterns
for i=1:3
    r_mdl.stimulation(i).stimulation= 'Amps';
    r_mdl.stimulation(i).stim_pattern= ( 0.001*i );
    r_mdl.stimulation(i).meas_pattern= 1; % measure electrode 1
end

r_mdl.solve=      @tutorial020_f_solve;

% Define an 'image'
resistor = eidors_obj('image', 'resistor');
resistor.elem_data= 1000;
resistor.fwd_model= r_mdl;

% Calculate data for 1k resistor
data_1k0 =fwd_solve( resistor );

% Now change resistor to be 1.2k
resistor.elem_data= 1800;
data_1k2 =fwd_solve( resistor );

% Solve resistor model
% $Id: tutorial020c.m 3127 2012-06-08 16:19:25Z bgrychtol $

% Now we complete the fwd_model
r_mdl.jacobian= @jacobian_perturb;

% Now create an inverse model
i_mdl= eidors_obj('inv_model','resistor inverse');
i_mdl.fwd_model= r_mdl;
i_mdl.jacobian_bkgnd.value= 1000;

% regulatization not needed for this problem
i_mdl.RtR_prior= @prior_tikhonov;
i_mdl.hyperparameter.value= 0;

i_mdl.reconst_type= 'difference';
i_mdl.solve= @inv_solve_diff_GN_one_step;

% Reconstruct resistor change
reconst= inv_solve(i_mdl, data_1k0, data_1k2)

这里对如何实现逆问题重构,将eidors主要计算过程展开。
从这里开始断点调试。

1、inv_solve

在这里插入图片描述

2、 imgc= eidors_cache( inv_model.solve, {inv_model, fdata1, fdata2},'inv_solve');


输入:
inv_model.solve:@inv_solve_diff_GN_one_step
{inv_model, fdata1, fdata2}:
在这里插入图片描述
在这里插入图片描述
‘inv_solve’:表示类型为逆问题求解
输出:imgc(该图像被进一步 处理为eidors_obj,作为最终的输出img)
在这里插入图片描述

1)eval(sprintf(‘%s = %s’, output, ‘cache_shorthand(command, varargin{:});’));
  • sprintf(‘%s = %s’, output, ‘cache_shorthand(command, varargin{:});’)
ans =

'[varargout{1} ] = cache_shorthand(command, varargin{:});'

输入:
command:调用的函数或者说求解的方法
在这里插入图片描述
varargin{:}:包含了逆模型结构体、用于差分成像的电压数据(vh,vi)、求解类型
在这里插入图片描述
输出:
varargout{1}:计算结果
在这里插入图片描述

  • cache_shorthand(command, varargin{:})进一步探究之eval(sprintf(‘%s = %s’, output, ‘feval(fhandle,args{:});’));
    输入:
    在这里插入图片描述
    sprintf(‘%s = %s’, output, ‘feval(fhandle,args{:});’)
ans =

    '[varargout{1} ] = feval(fhandle,args{:});'
    %fhandle:@inv_solve_diff_GN_one_step
    %args{:}:

args{:}:
在这里插入图片描述

  • eval(sprintf(‘%s = %s’, output, ‘feval(fhandle,args{:});’));

    • 调用inv_solve_diff_GN_one_step.m
      在这里插入图片描述
    • sol = eidors_cache(@get_RM, inv_model,‘inv_solve_diff_GN_one_step’ ) * dv;
      eidors_cache(@get_RM, inv_model,‘inv_solve_diff_GN_one_step’ ) 计算出重构矩阵RM
      所以sol = RM*dv
      • eval(sprintf(‘%s = %s’, output, ‘cache_shorthand(command, varargin{:});’));
        在这里插入图片描述
        在这里插入图片描述

        • eval(sprintf(‘%s = %s’, output, ‘feval(fhandle,args{:});’));
          两个输入
          在这里插入图片描述
          在这里插入图片描述
          执行完的结果
          在这里插入图片描述

输出:

在这里插入图片描述

J= jacobian_adjoint( fwd_model, img)

注:eval的用法

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
你好!很高兴能为您提供关于EIDORS使用教程。 EIDORS(Electrical Impedance and Diffuse Optical Tomography Reconstruction Software)是一个用于电阻抗成像和散射光学成像重建的开源软件。以下是一些基本的使用指南: 1. 安装EIDORS:首先,您需要在您的计算机上安装EIDORS软件包。您可以从EIDORS官方网站(https://eidors3d.sourceforge.io/)下载最新版本,根据您的操作系统选择适当的安装包。 2. 数据准备:在使用EIDORS进行成像重建之前,您需要准备好所需的数据。这可能包括电阻抗或散射光学测量数据,以及有关待测物体的几何形状和边界条件的信息。 3. 创建模型:使用EIDORS,您可以创建一个表示待测物体的有限元模型。您可以使用内置的几何形状生成器或导入外部几何模型文件。 4. 选择正向算法:在进行成像重建之前,您需要选择合适的正向算法。EIDORS提供了多种正向算法,例如有限元方法(FEM)、有限差分方法(FDM)等。根据您的实际情况选择适当的算法。 5. 选择反演算法:一旦选择了正向算法,您需要选择一个合适的反演算法来重建成像。EIDORS提供了多种反演算法,包括最小二乘法、正则化方法等。根据您的实际需求选择适当的算法。 6. 运行重建:设置好模型、选择好正向和反演算法后,您可以使用EIDORS进行成像重建了。运行相应的命令或函数,将测量数据和模型作为输入,得到成像结果。 7. 分析和可视化:最后,根据您的需求,您可以对重建结果进行分析和可视化。EIDORS提供了一些工具和函数来帮助您分析和展示成像结果。 请注意,以上只是一个简单的EIDORS使用教程概述。EIDORS有着丰富的功能和配置选项,您可能需要参考官方文档或其他资源来深入了解和使用EIDORS。祝您在使用EIDORS时取得成功!如果您有更具体的问题,我会很乐意为您解答。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

irober

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值