python - Scipy优化器找到最小误差和
问题描述
我的目标是使用 Scipy 优化来找到 P1 和 P2 的正确值,以便我的 V3 等于 V1,V3= P1+ P2。我正在寻找一种方法来尝试 P1 和 P2 的不同值以获得 abs(误差总和)= abs(V3-V1)的最小可能值
但不是为每一行设置不同的 P1 和 P2 值,我想要一个组合,使 V3 尽可能接近 V1,并且可能存在最小误差和。
解决方案
看,我想我理解你想要达到的目标,你真的不需要 scipy 来做到这一点。对于初学者,您对 P1 和 P2 的值并不真正感兴趣,因为您确实只想优化它们的总和 V3,因此实际上任何两个总和为最佳 V3 的数字都可以完成这项工作。现在我们要找到V3了。这实际上很容易做到,因为上述最佳值将是两个数字之一,其中只有一位有效小数位最接近平均值。在代码中:
def find_minimum_error_sum(V1):
error = lambda x: sum(abs(i-x) for i in V1)
adjusted_mean = (sum(V1)*10//len(V1))/10
if error(adjusted_mean) <= error(adjusted_mean+0.1):
return adjusted_mean
else:
return adjusted_mean+0.1
在包含您的 V1 值的数组上调用该函数,您正在寻找的 V3 将被返回。再说一次,任何 2 个总和为 V3 的数字都可以是您的 P1 和 P2。但要小心:只有当数组中的每个数字都包含一个有效的十进制数字时,该函数才会起作用!
编辑:正如 Joseph Budin 巧妙地指出的那样,您只需计算数组的中位数即可直接找到 V3:
from statistics import median
V3 = median([0.5, 0.3, 0.6, 0.5, 0.7, 0.2, 0.1])
就是这样。
推荐阅读
- php - 如何仅列出一个月中添加和删除特定数据的日期?
- centos - 屏幕分辨率 CentOS 8 - VMware
- javascript - Angular RouterReuseStrategy,如何仅从特定路由重用?
- javascript - Firebase 云功能
- matlab - 代码错误,一种计算sqrt的方法(a)
- java - AMQP 中的通道和链接有什么区别?
- unity3d - Unity World Anchors 如何在 HoloLens 上工作?
- flutter - 如何在 Flutter 中设置凸起按钮的背景颜色透明?
- python - 如何检查值是否在一个单元格中的两个数字之间
- python - 在python中调用两个同步调用芹菜任务的方法