gpt4 book ai didi

python - 具有三个输出的 Matlab polyval 函数在 Python/Numpy 中等效

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:21 25 4
gpt4 key购买 nike

我在 Matlab 中有该代码,需要将其引入 Python。

x_cord = [58.2986 39.5842 23.0044 10.9427 3.0465]
y_cord = [0.9600 0.9700 0.9800 0.9900 1.0000]
[p,S,mu]=polyfit(x_cord, y_cord, 3); % p = [-0.002120716372462 0.004361710897014 -0.014104050472739 0.977080254892409]
result=polyval(p, 16.574651718139650, [], mu); % result = 0.9848

当我使用 numpy.polyfit(x_cord, y_cord, 3) 时,我得到的结果与示例中不同。另外,我在 Numpy 中找不到这种 polyval(具有两个以上输入参数)。

当我询问一个返回参数时,Matlab 和 Numpy 结果是相同的。

最佳答案

用于拟合多项式的 numpy 和 scipy 函数不包含像 Matlab 函数那样自动缩放输入的选项。

首先,以下是如何在不缩放的情况下适应数据的方法:

In [39]: x_cord = [58.2986, 39.5842, 23.0044, 10.9427, 3.0465]

In [40]: y_cord = [0.9600, 0.9700, 0.9800, 0.9900, 1.0000]

In [41]: c = np.polyfit(x_cord, y_cord, 3)

In [42]: c
Out[42]:
array([ -1.91755884e-07, 2.43049234e-05, -1.52570960e-03,
1.00431483e+00])

In [43]: p = np.poly1d(c)

In [44]: p(16.574651718139650)
Out[44]: 0.98483061114799408

In [45]: xx = np.linspace(0, 60, 500)

In [46]: plot(xx, p(xx))
Out[46]: [<matplotlib.lines.Line2D at 0x110c8d0f0>]

In [47]: plot(x_cord, y_cord, 'o')
Out[47]: [<matplotlib.lines.Line2D at 0x10d6f8390>]

plot

numpy 计算 agrees with Wolfram Alpha .

<小时/>

以下是如何非常接近实际的 Matlab 计算的方法。

为了方便起见,将 x_cord 从列表转换为 numpy 数组。

In [64]: x_cord = np.array(x_cord)

计算x_cord的平均值和标准差。

In [65]: mu = np.mean(x_cord)

In [66]: std = np.std(x_cord, ddof=1)

使用x_cord的移位和缩放版本调用np.polyfit()

In [67]: cscaled = np.polyfit((x_cord - mu)/std, y_cord, 3)

这些值非常接近 Matlab 代码注释中显示的数组 p

In [68]: cscaled
Out[68]: array([-0.00212068, 0.00436168, -0.01410409, 0.97708027])

创建一个可以调用的poly1d对象。

In [69]: pscaled = np.poly1d(cscaled)

pscaled 的输入必须使用 mustd 进行移位和缩放。

In [70]: pscaled((16.574651718139650 - mu)/std)
Out[70]: 0.98483061114799486

关于python - 具有三个输出的 Matlab polyval 函数在 Python/Numpy 中等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com