Кажется, что f всегда положителен в коде MATLAB, но в моем коде Python f также получает отрицательные значения - PullRequest
2 голосов
/ 24 января 2011

Как преобразовать следующий код MATLAB в Python? Вот мое решение , но оно не дает таких же результатов. Например, 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)  

Они эквивалентны друг другу? Если это так, то почему они не дают одинаковые результаты?

1 Ответ

3 голосов
/ 27 января 2011

Я не знаю о Matlab, но для Python код

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

такой же, как

j = nx+2

Это не ваша главная проблема, но это беспокоит.

...