对于一类H-J方程,可运用FSM进行求解
扫描顺序:
for(sx=-1;sx<=1:s1+=2)
for(sy=-1;sy<=1;sy+=2)
for(i=(sx<0?nx:0);(sx<0?i>=0:i<=nx);i+=sx)
for(j=(sy<0?ny:0);sy<0?j>=0:j<=ny;j+=sy)
对所有网格节点上的函数值φ,进行a,b,c三个步骤的搜索,在搜索过程中,当si>0时,每个节点函数值的搜索顺序是从小到大;si<0则从反向搜索(i=x,y)。
算法具体思路:
%所有节点的φ(i,j)同时进行
while (fai(n).-fai(n-1).<derta);
% n=1时
% 先将每个节点处的φ(i,j)赋予一个极大值A
phi=A*zeros[nx,ny];
for n=1:1:max
for sx=-1:1:2
for sy=-1:1:2
A=[sx,sy];
H(p(sx,sy),q(sx,sy))=r(i,j)
% a 二维条件下先进行(sx,sy)=(-1,1),(-1,-1),(1,-1),(1,1)的运算,
% 利用控制条件for(i=(sx<0?nx:0);(sx<0?i>=0:i<=nx);i+=sx)
% for(j=(sy<0?ny:0);sy<0?j>=0:j<=ny;j+=sy)
% 按顺序将φ(i,j)依次带入到H中解得φtmp,并且令M=φtmp-min(φ(i-sx,j),φ(i,j+sy))
% 建立逻辑等式TG1,TG2
% TG1=1&&TG2=1&&M>=0,φtmp=φ
% 将计算得到的φ存入列表phi_candidate中
% b 进行(sx,sy)=(1,0),(-1,0)即在x方向上进行搜索
% for sx=-1:0:1,sy=0
% 进行与a类似的运算
% 将计算得到的φ存入列表phi_candidate中
% c 进行(sx,sy)=(0,1),(0,-1)即在y方向上进行搜索
% for sx=0,sy=-1:0:1
% 进行与a类似的运算
% 将计算得到的fai存入列表phi_candidate中
A=[];
A=[;phi]
% phi为a,b,c中每次迭代算出的φ值
% 取列表phi_candidate中φ的最小值,使得φmin=φ(n),然后清空列表。