2011-01-24 9 views
2

如何将following MATLAB代码转换为Python? Here is my solution,但它不会产生相同的结果。例如,f在MATLAB代码中似乎总是正面的,但在我的Python代码中,f也会得到负值。f在MATLAB代码中似乎总是正面的,但在我的Python代码中,f也会得到负值

任何想法如何解决该方案?

大多数情况下,我很关注这些:
MATLAB:

for k = 1 : nx 
      j = k+2; 

的Python:

for k in range(1,nx+1): 
    j = k+2 

MATLAB:

[V,D] = eig(A, B); 
    DD = diag(D); 
    keep_idxs = find(~isinf(DD)); 
    D = diag(DD(keep_idxs)); 
    V = V(:, keep_idxs); 
    [lambda, idx] = min(diag(D)); 
    f = V(:,idx); 

的Python:

w,vr = scipy.linalg.decomp.eig(A,B) 
w = w.real 
vr = vr.real 
w = w[2:-1-2] 
lambda_ = w.min() 
idx = w.argmin() 
f = vr[:,idx] 

MATLAB:

f = f(3:end-2); 
    [nf, nf_idx] = max(abs(f)); % L_infty norm 
    n2 = f(nf_idx); % normalize sign away, too 
    f = f ./ n2; 

的Python:

f = f[2:-1-1] 
nf = max(np.absolute(f)) 
nf_idx = np.absolute(f).argmax() 
nf_idx = np.ma.argmax(f) 
n2 = f[nf_idx] 
f = f/n2 

MATLAB:

xx = -kappa:h:kappa; 

的Python:

xx = np.arange(-kappa, kappa+h, h) 

那些与对方等同吗?如果他们是,那他们为什么不产生完全相同的结果?

+0

您需要正确格式化您的代码,并更具体地了解您的问题。你在说什么? – Falmarri 2011-01-24 07:33:49

+0

语法完全不同。在MATLAB中,索引从1开始,在Python中,它们从0开始。我想知道是否出现了会产生不同结果的错误。 – user569474 2011-01-24 08:10:41

回答

3

我不知道MATLAB,但是对于蟒蛇代码

for k in range(1,nx+1): 
    j = k+2 

相同

j = nx+2 

这不是你的主要问题,但令人担忧的。