python - f 在 MATLAB 代码中似乎总是正数,但在我的 Python 代码中,f 也得到负值

标签 python matlab matrix eigenvector

如何转换following MATLAB代码转为Python? Here is my solution ,但它并不完全产生相同的结果。例如,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)  

它们彼此等效吗?如果是,那么为什么它们不产生完全相同的结果?

最佳答案

我不了解 matlab,但对于 python 代码

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

相同
j = nx+2

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

关于python - f 在 MATLAB 代码中似乎总是正数,但在我的 Python 代码中,f 也得到负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4779522/

相关文章:

python - 在 Nose 测试类中定义 Nose 测试方法

python - 在正则表达式中转义字符

python - Windows 从 PyCharm 转发 PyQt5 GUI

java - 带有 Java 线性和对数滤波器的 MFCC

matlab - 如何在 Matlab 图形中使用非 ASCII 字符(用于 LaTeX 文档)?

r - 从 lmer 对象 (lme4, R) 中提取随机效应的原始模型矩阵

python - Python 中的 N 维矩阵数组(不同大小)

Python自省(introspection): get the argument list of a method_descriptor?

matlab - 根据输入在matlab中实现的异常行为算法

Matlab-将每隔一列替换为另一个向量