问题描述
在 Python (3.8) 中,我尝试制作一个以函数 f(x)
作为输入的脚本,例如;
f(x) = 1/x
如果我们将定义y = f(x)
定义为欧氏空间上的一条线,我们可以计算出每个点d()
到原点(0,0)
的距离(x,f(x))
线为;
d(x,y) = sqrt(x^2+(f(x))^2)
我的目标是找到使上述距离最小化的 x
。这可以通过解决
2x+2f(x)*f'(x) = 0
我将不胜感激。谢谢。
解决方法
sympy
中的示例(不是 sympy
的专家);
from sympy import *
from sympy.solvers import solve
x,y,z = symbols('x y z')
g = 1/x
h = 2*x + (2*g) * (diff(g,x))
solve(h,x)
这将返回 [-1,1,-I,I]
所以 -1
和 1
应该是真正的答案;
distance = x**2 + g**2
distance.subs(x,1)
distance.subs(x,-1)
我没有 sqrt()
的距离,但我希望你知道如何在 sympy
中解决这个问题。这是 1 种方式,有包来近似导数,并找到根,这也应该有效。