- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有办法计算两个变量的多项式模型的参数。它们是独立的,因此:
z = a + bx + cx^2 + dy + ey^2
有人告诉我,您可以为此使用 numpy.polyfit
,但它只能支持两个变量,而不是我需要的三个变量。我的数据目前存储在三个 numpy 数组中,这样数组中每条数据的索引都与其他变量中该索引处的数据相关联。即
Y = [1 2 3 4 5]
X = [3 5 7 9 11]
Z = [2 4 6 2 6]
1 与 3 和 2 关联;2 与 5 和 4 关联,依此类推。我该如何解决这个问题?
最佳答案
polyfit
假定一个变量。但是,您要做的是求解一般线性方程组。
你有一个等式:
z = a + bx + cx^2 + dy + ey^2
以及观察 x、y 和 z 的 5 个点。这给了我们 5 个等式:
z1 = a + bx1 + cx1^2 + dy1 + ey1^2
z2 = a + bx2 + cx2^2 + dy2 + ey2^2
z3 = a + bx3 + cx3^2 + dy3 + ey3^2
z4 = a + bx4 + cx4^2 + dy4 + ey4^2
z5 = a + bx5 + cx5^2 + dy5 + ey5^2
最容易将其视为线性代数问题。我们可以将方程组重写为矩阵乘法:
|z1| |1 x1 x1^2 y1 y1^2| |a|
|z2| |1 x2 x2^2 y2 y2^2| |b|
|z3| = |1 x3 x3^2 y3 y3^2| x |c|
|z4| |1 x4 x4^2 y4 y4^2| |d|
|z5| |1 x5 x5^2 y5 y5^2| |e|
我们知道 x1..5
、y1..5
和 z1..5
,但是 a、b、 c、d、e
是未知数。我们分别称这些矩阵为 B
、A
和 x
:
B = A x
我们想要求解 x
,它是我们的 a、b、c、d、e
参数的矩阵。
但是,我们有一个问题。您为 x
、y
和 z
提供的确切数字会生成 A
的奇异矩阵。换句话说,行不是独立的。我们实际上已经将同一个等式输入了两次。事实上,在这种情况下,我们只有 3 个等式。其他两个只是前三个的组合。
无法使用您提供的 X、Y、Z 数据求解方程组。
考虑到这一点,让我们将问题更改为使用 5 个随机 x、y、z 点。
在这种特定情况下,我们正好有 5 个未知数和 5 个方程。因此,我们可以准确地解决这个问题(例如使用 np.linalg.solve
)。这被称为“偶数确定问题”。
import numpy as np
np.random.seed(1)
# Each array with have 5 random points
x, y, z = np.random.random((3, 5))
# A is going to look like:
# |1 x1 x1^2 y1 y1^2|
# |1 x2 x2^2 y2 y2^2|
# |1 x3 x3^2 y3 y3^2|
# |1 x4 x4^2 y4 y4^2|
# |1 x5 x5^2 y5 y5^2|
A = np.column_stack([np.ones(len(x)), x, x**2, y, y**2])
# And "B" will just be our "z" array
B = z
# Now we can solve the system of equations Ax = B
a, b, c, d, e = np.linalg.solve(A, B)
但是,假设我们有 10 个或 100 个观测值。在这种情况下,我们就会遇到一个超定问题。我们无法精确求解,而是需要使用最小二乘拟合。
在那种情况下,您仍然会用矩阵乘法来表达事物并求解 Ax = B
。但是,A
不会是方阵。因此,我们需要使用不同的工具来解决问题。对于 numpy
,它是 np.linalg.lstsq
而不是 np.linalg.solve
:
我将很快对此进行详细说明(可能会有点),但目前:
import numpy as np
np.random.seed(1)
# Each array with have 20 random points this time
x, y, z = np.random.random((3, 20))
# We're solving Ax = B
A = np.column_stack([np.ones(len(x)), x, x**2, y, y**2])
B = z
# Solve the system of equations.
result, _, _, _ = np.linalg.lstsq(A, B)
a, b, c, d, e = result
如果您想从等式中删除 bx
和 dy
项,您可以将它们从 A
中删除:
import numpy as np
np.random.seed(1)
x, y, z = np.random.random((3, 20))
# Note that we've remove the `x` and `y` terms.
# We're solving `z = a + cx^2 + ey^2`
A = np.column_stack([np.ones(len(x)), x**2, y**2])
B = z
# Solve the system of equations.
result, _, _, _ = np.linalg.lstsq(A, B)
a, c, e = result
关于python - 使用 numpy polyfit 在 python 中使用具有多个变量的 polyfit 将数据拟合到曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746724/
这个问题在这里已经有了答案: Relationship between SciPy and NumPy (8 个答案) 关闭 6 年前。 我开始知道 numpy 和 scipy 都有 polyfit
为什么要 numpy.polyfit 和 numpy.polynomial.polynomial.polyfit 在下面的测试中产生不同的图? import numpy as np from nump
有没有办法计算两个变量的多项式模型的参数。它们是独立的,因此: z = a + bx + cx^2 + dy + ey^2 有人告诉我,您可以为此使用 numpy.polyfit,但它只能支持两个变量
有什么区别 https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html 和 https://docs.scipy.o
我使用了 numpy 的 polyfit 并获得了两个数组 x 和 y 的非常好的拟合(使用 7 阶多项式)。我的关系是这样的; y(x) = p[0]* x^7 + p[1]*x^6 + p[2]*
我正在尝试将二次方程拟合到一些实验数据并在 numpy 中使用 polyfit。我希望得到一条凹曲线,因此要确保二次项的系数为负,并且拟合本身也是加权的,因为点上有一些权重。有没有简单的方法来做到这一
我有一个对象以抛物线模式抛出的信息。从开始位置到结束位置以特定间隔总共拍摄了 30 张图像。 现在我已经设法提取了在所有 30 个图像中抛出的对象的 x,y 坐标...... 我认为使用 polyfi
我正在模拟三体问题并绘制 3D 轨迹图。我试图弄清楚如何通过使用 np.polyfit 扩展绘图线来预测这些行星的轨迹。我有使用数据框和 2D 图执行此操作的经验,但没有在 3D 中且不使用任何类型的
我正在尝试使用np.polyfit,但我不断收到错误: TypeError: polyfit() got an unexpected keyword argument 'w' documentatio
我有一个包含 20 列的数据框。我希望创建散点图,每个散点图都有一条最合适的线。 x 列将保持不变,我想使用 for 循环遍历数据框中的每个其他列。结果将是 19 个散点图。 我当前的设置看起来像这样
当用一条直线拟合一组数据并用误差加权时,我期望 polyfit 返回一个 2x2 协方差矩阵,我可以从中对对角线元素求平方根以找到系数中的不确定性,但我没有. 这是一个最小的工作示例: from nu
我找不到调整数据的曲线(列出“chi”和“m”)。我使用 polyfit 生成曲线,但它不足以捕捉点的行为。 前面的代码有一个图表,显示了数据和调整之间的差异。 import matplotlib.p
我想向量化以下函数 def nppolyfit(pnp_array, **kwargs): """ Moving polyfit """ win_size = kwargs['length
我浏览了文档,但无法正确解释 在我的代码中,我想找到一条通过 2 个点 (x1,y1), (x2,y2) 的直线,所以我使用了 np.polyfit((x1,x2),(y1,y2),1)因为它是一个
在用numpy的polyfit创建一条best fit时,可以指定参数full为True。除了系数之外,这会返回 4 个额外的值。这些值是什么意思,它们告诉我函数与我的数据的拟合程度如何? https
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
这只是一个基本问题。我正在使用 polyfit 拟合线以散点。在某些情况下,我的散点具有相同的 X 值,而 polyfit 无法为其拟合一条线。必须有一些东西可以处理这种情况。毕竟,它只是一个线条配合
我正在尝试适应这些值: 这是我的代码: for i in range(-area,area): stDev1= [] for j in range(-area,area):
关于此:polynomial equation parameters我得到平方函数的 3 个参数 y = a*x² + b*x + c 现在我只想得到描述我的平方函数的 first 参数函数 y =
Polyfit 是一个很好的工具,可以将一条线拟合到一组点上。然而,我的数据具有不同程度的统计显着性。 例如,对于一个点 (x1,y2) 我可能只有 10 个观测值,而对于另一个点 (x2,y2) 我
我是一名优秀的程序员,十分优秀!