在 样本的总和' x [i]'用' i'从混凝土走
0到符号' N'。 ' X [I]'本身应具有象征意义,即
总是显示为变量。 目标是在线性方程组中使用这些表达式。 示例(平凡的最小二乘法): 给定一组样本(x [i],y [i]),它们应该位于a上
由'y = m * x + a'给出的行。也就是说,确定估计的线
通过' m'并且' a'。样本与估计线之间的误差
现在,搜索导数中的零转换&#d; dm错误(m,a)'
和&#d; da / da错误(m,a)'提供最小的距离。我怎么能找到
有同情心的解决方案? error(m, a) = sum((m * x[i] + a - y[i])**2, start_i=0, end_i=N)
答案 0 :(得分:3)
考虑到你后来的问题,我假设你已经想到了大部分问题,但为了清楚起见,样本被认为是函数(有意义,给定的集实际上是覆盖集合域的函数[主要是整数的一部分] ]),因此符号类似于x(i)
,并且可以使用summation
函数或Sum
构造函数实现求和(第一个更好,因为它会自动扩展不变的加数,例如summation(x, (i, 0, n))
)。
>>> from sympy import *
>>> m, a, x, y, i, n = symbols('m a x y i n')
>>> err = summation((m * x(i) + a - y(i)) ** 2, (i, 0, n))
>>> pprint(err)
n
___
╲
╲ 2
╱ (a + m⋅x(i) - y(i))
╱
‾‾‾
i = 0
在您提供加数函数加法表达式和(index, lower bound, upper bound)
之后,您可以继续使用总和:
>>> diff(err, m)
Sum(2*(a + m*x(i) - y(i))*x(i), (i, 0, n))
>>> diff(err, a)
Sum(2*a + 2*m*x(i) - 2*y(i), (i, 0, n))