Проблемы с преобразованием числовых операторов Matlab в Python

У меня проблема с преобразованием этого кода Matlab в python. w2_A, w2_B и w2 плюс Tk [1] и Tk [2] дают те же результаты, что и в коде Matlab, но когда код достигает Tk [m] результаты немного отличаются, и это вызывает проблемы в моем коде после. Я пробовал много разных способов конвертировать код, но получаю такие же разные результаты. В чем может быть проблема?

К вашему сведению, nmax и N равны 128

Код Matlab

nmax= 128
N= 128
x = 0:N - 1;
w = 2*x-N+1;
w1= sqrt((N*N-1)/3); 

Tk( 1, : ) = ones( 1, length( x ) )/sqrt(N);
Tk( 2, : ) = (w ./ w1).*Tk( 1, : ); 

    for m = 3:nmax  
        ni=m-1; 
        
        w2_A = N^2-ni^2;
        w2_B = (2*ni+1)*(2*ni-1); 
        w2   = ni*sqrt(w2_A/w2_B);
         
        Tk(m,:) = w./w2.*Tk(m-1,:) - w1/w2*Tk(m-2,:);  
     end 

Код Python

 nmax= 128
 N= 128
 x = np.arange(0, N)
 w = 2*x-N+1
 w1 = np.sqrt((N * N - 1) / 3)

 Tk = np.zeros((nmax, len(x)))

 Tk[1] = np.ones((1, len(x))) / np.sqrt(N)
 Tk[2] = np.multiply(np.divide(w, w1), Tk[1])

    for m in range(3, nmax):
        ni = m-1
        w2_A = N**2 - ni**2 
        w2_B = (2 * ni + 1) * (2 * ni - 1)
        w2 = ni * np.sqrt(w2_A / w2_B)

        Tk[m] = np.multiply(np.divide(w, w2), Tk[m - 1]) - w1 / w2 * Tk[m - 2]

Пожалуйста, определите все переменные в коде (например, N не определен) и опубликуйте действительный код (например, в цикле Matlab отсутствует end), чтобы фрагменты кода можно было скопировать и вставить в командное окно. Кроме того, range(3,nmax) Python не эквивалентен 3:nmax Matlab.

Luis Mendo 30.03.2021 18:11

Спасибо за вашу помощь, я исправил некоторые ошибки. Я почти не могу понять результаты в Tk [m]. Поскольку w2_A и w2_B абсолютно одинаковы (я это тестировал), как, например, np.divide (w, w2) может давать разные результаты, чем w./w2 в Matlab?

Kostas Keremis 30.03.2021 18:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
25
0

Другие вопросы по теме