Я пытаюсь скопировать некоторый код Matlab в Python, и в данный момент я разрабатываю модульный тест для проверки эквивалентности.В приведенном ниже коде я получаю ошибки в порядке E-11, который указывает мне, что это может быть ошибкой округления.
Matlab Code:
width = 200;
x = 1:100000;
b = ones(width,1)/width;
y = filter(b, 1, x);
save('mat_data')
Python Code:
import numpy as np
from scipy.io import loadmat
from scipy import signal
def plot_fig(x, y=None):
import matplotlib.pyplot as plt
if y is None:
y = x
x = np.arange(0, len(y))
plt.figure()
plt.plot(x, y)
plt.show()
def mat_data(param):
data = loadmat('mat_data.mat')
return np.squeeze(data[param])
y = signal.lfilter(mat_data('b'), 1, mat_data('x'), axis=0)
plot_fig(mat_data('y') - y)
Я использовал функцию loadmat
, чтобы обеспечить эквивалентность между числовыми массивами, которые я использую в качестве входов функции,В результате получается:
график различий
Я вижу, что ошибка невелика, поэтому возможны ошибки округления, но, похоже, накапливается, что меня беспокоит.
В данный момент приложение, над которым я работаю, имеет решающее значение для обеспечения бинарной эквивалентности между двумя кодами (matlab и python), поэтому я был бы очень признателен за любую помощь в устранении этого несоответствия.
Заранее спасибо,
A.