我正在尝试将一些Matlab代码复制到Python中,目前我正在开发一个单元测试来检查等价性。在下面的代码中,我得到了E-11顺序的错误,这表明它可能是一个舍入错误。
Matlab代码:
width = 200;
x = 1:100000;
b = ones(width,1)/width;
y = filter(b, 1, x);
save('mat_data')Python代码:
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)之间的二进制等价性至关重要,因此如果能帮助我解决这一差异,我将不胜感激。
提前谢谢你,
一个。
发布于 2018-12-13 06:16:00
你可以在python中尝试双精度浮点数而不是单精度浮点数。我认为这将显着减少累积舍入误差。
https://stackoverflow.com/questions/53750384
复制相似问题