sympy - 象征性数量的元素的象征性和

时间:2017-09-29 15:54:09

标签: sympy symbolic-math linear-equation

中表达以下内容的最合适方式是什么?

样本的总和' x [i]'用' i'从混凝土走    0到符号' N'。 ' X [I]'本身应具有象征意义,即    总是显示为变量。

目标是在线性方程组中使用这些表达式。

示例(平凡的最小二乘法):

给定一组样本(x [i],y [i]),它们应该位于a上 由'y = m * x + a'给出的行。也就是说,确定估计的线 通过' m'并且' a'。样本与估计线之间的误差

可以给出
 error(m, a) = sum((m * x[i] + a - y[i])**2, start_i=0, end_i=N)

现在,搜索导数中的零转换&#d; dm错误(m,a)' 和&#d; da / da错误(m,a)'提供最小的距离。我怎么能找到 有同情心的解决方案?

1 个答案:

答案 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))