⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsfemmatrix.m

📁 MATLAB二维电阻抗断层成像算法!用于医学成像,里面包括有限元剖分正问题,及反问题的算法.并且附有网络剖分数据表!
💻 M
字号:
function [Agrad,Kb,M,S,C]=FemMatrix(Node,Element,z);%FemMatrix Computes the blocks of the system matrix for 2D EIT with linear and quadratic basis% Function [Agrad,Kb,M,S,C]=FemMatrix(Node,Element,z); % computes the matrices needed in the finite element approximation of the 2D EIT forward problem. %% INPUT% Node = nodal data structure% Element = element data structure% z = a vector of (complex) contact impedances%% OUTPUT% Agrad = the gradient part of the system matrix % Kb,M and S = other blocks of the system matrix % C = voltage reference matrixNel=max(size(z));                           %电极数NNode=max(size(Node));                      %节点数NElement=max(size(Element));                %单元数M=sparse(NNode,Nel);            %以稀疏阵初始化MKb=sparse(NNode,NNode);         %以稀疏阵初始化KbAgrad=sparse(NNode^2,NElement); %以稀疏阵初始化Agrads=zeros(Nel,1);                 %电极的电导率列向量g=reshape([Node.Coordinate],2,NNode)';      %节点坐标矩阵for ii=1:NElement               %对每个单元进行  A=sparse(NNode,NNode);        %Agrad的预处理矩阵  ind=(Element(ii).Topology);   %第ii单元的拓朴结构 节点号  gg=g(ind,:);                  %第ii单元的拓朴节点坐标矩阵 3x2 or 6x2  if max(size(gg))==3           % 一阶单元   grint=grinprodgaus(gg,1);    % 一阶单元梯度计算  else   grint=grinprodgausquad(gg,1);% 二阶单元梯度计算  end if any([Element(ii).Face{:,3}]),      %如果ii单元在电极下(Element.Face中的信息)则:    [In,Jn,InE]=find([Element(ii).Face{:,3}]);     bind=Element(ii).Face{Jn,1};% 单元在边界上的边的节点    ab=g(bind(:),:);            % 单元在边界上的边的节点坐标    if max(size(bind))==2       % 一阶单元边?     bb1=bound1([ab]);Bb1=zeros(max(size(ind)),1);%计算bound1     bb2=bound2([ab]);Bb2=zeros(max(size(ind)));  %计算bound2     s(InE)=s(InE)+1/z(InE)*2*bb1; % 2*bb1 = length of the electrode.             eind=[find(bind(1)==ind),find(bind(2)==ind)];       else				    % Second order basis      bb1=boundquad1([ab]);Bb1=zeros(max(size(ind)),1);      bb2=boundquad2([ab]);Bb2=zeros(max(size(ind)));      s(InE)=s(InE)+1/z(InE)*electrlen([ab]);       eind=[find(bind(1)==ind),find(bind(2)==ind),find(bind(3)==ind)];    end     Bb1(eind)=bb1;       M(ind,InE)=M(ind,InE)-1/z(InE)*Bb1;%计算M矩阵        Bb2(eind,eind)=bb2;    A(ind,ind)=grint;    Agrad(:,ii)=A(:);                  %封装构成Agrad矩阵    Kb(ind,ind)=Kb(ind,ind)+1/z(InE)*Bb2; %计算Kb矩阵 else                                     %如果单元不在边界上则:计算。。.    A(ind,ind) = grint;     Agrad(:,ii)=A(:);  endend  S=sparse(diag(s));		 %计算S矩阵           [II1,C]=Current(Nel,NNode,'adj'); %为计算电压参考C矩阵C=C(:,1:Nel-1);                   C=sparse(C(:,1:Nel-1));                             S=C'*S*C;M=M*C;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -