首页 > 解决方案 > 从 MATLAB 转换的 Python 代码的不同输出

问题描述

我正在将以下代码从 MATLAB 转换为 Python。MATLAB代码如下:

for vfct=1:maxit
    

    EVmat = kron((reshape(Vold,pnum,mnum)*(pr_mat_m'))',ones(pnum,1));
   

    RHSmat = Rmat + beta*EVmat;
    

    [V,polind] = max(RHSmat,[],2);
    pol = pgrid(polind);
    
   
    solerr = max(abs(V(:)-Vold(:)));
    polerr = max(abs(pol(:)-polold(:)));
    

    if (mod(vfct,5)==1) 
        disp(['For iter ' num2str(vfct) ', VF error = ' num2str(solerr)])
    end
    

    if (solerr<soltol)
        break
    end
    

    Vold = V;
    polindold=polind;
    polold = pol;
end

我在下面尝试的 Python 代码:

for vfct in range(1,maxit+1):
  EVmat = np.kron((np.dot(Vold.reshape(pnum,mnum) , pr_mat_m.T)).T,np.ones((pnum,1))) 
    
  RHSmat = Rmat + beta*EVmat;

  V, polind = RHSmat.max(1),np.argmax(RHSmat,axis=1) 
  pol = pgrid[polind] 

  solerr = np.amax(abs(V[:]- Vold[:])) 
  polerr = np.amax(abs(pol[:]- polold[:]))

  if vfct % 5 == 1:   
    print(f"Error at iteration {vfct} is kkk {solerr}.")

  if solerr < soltol:
    break

  Vold = V;
  polindold=polind;
  polold = pol;

然而,我的结果与 MATLAB 产生的结果大不相同。但我找不到任何问题。是什么导致了输出的差异?

标签: pythonnumpymatlabfor-loop

解决方案


推荐阅读