如何解决numpy 根负指数函数
我已经阅读了 numpy.roots,它可以计算出常见代数函数的 y 轴交点。
哪个
y = ax^n + bx^{n - 1} + cx^{n - 2} ...
指数总是自然数。
所以通过传入
[1,2,3]
我基本上在锻炼
y = x^2 + 2x + 3
但我需要引入负指数,例如
y = x^2 + 2x + 3 - x^{-1}
我想知道我是否可以为上面的实例构造一个字典
{2: 1,1: 2,0: 3,-1: 1}
哪些键是指数,哪些值是系数,并计算根。
任何建议将不胜感激。
解决方法
如果你得到一个负指数的“多项式”,它并不是真正的 多项式但是一个分数函数,所以要找到根,你可以简单地找到分子多项式的根。
在函数中
你可以分解出最后一项
等于
所以我们可以说
函数 g(x) 是 n+m
次多项式,找到 g(x) 的根,你将得到 f(x) 的根,因为分母不能为零(x=0 是在 f(x) 的域之外,当它为零时,你会得到一个奇点,在这种情况下,除以零是不可能的)。
编辑
我们可以图形化验证。例如,让我们用这些系数来做一个函数
import numpy as np
coeffs = [1,6,-6,-64,-27,90]
roots = np.roots(coeffs)
roots
array([-5.,3.,-3.,-2.,1.])
如你所见,我们得到了 5 个真正的根。
现在让我们用给定的系数和分数函数定义多项式
import matplotlib.pyplot as plt
def print_func(func,func_name):
fig,ax = plt.subplots(figsize=(12,.5))
ax.set_xticks([])
ax.set_yticks([])
ax.axis('off')
ax.text(0,.5,f"{func_name}\n"
fr"${func}$",fontsize=15,va='center'
)
plt.show()
def polynom(x,coeffs):
res = 0
terms = []
for t,c in enumerate(coeffs[::-1]):
res += c * x**t
terms.append(f"{c:+} x^{{{t}}}")
func = "".join(terms[::-1])
print_func(func,"polynomial")
return res
def fract(x,coeffs,min_exp):
res = 0
terms = []
for t,c in enumerate(coeffs[::-1]):
e = t + min_exp
res += c * x**e
terms.append(f"{c:+} x^{{{e}}}")
func = "".join(terms[::-1])
print_func(func,"fractional")
return res
x = np.linspace(-6,4,100)
这就是多项式
y1 = polynom(x,coeffs)
这是小数函数
y2 = fract(x,-2)
让我们绘制它们和找到的根
plt.plot(x,y1,label='polynomial')
plt.plot(x,y2,label='fractional')
plt.axhline(0,color='k',ls='--',lw=1)
plt.plot(roots,np.repeat(0,roots.size),'o',label='roots')
plt.ylim(-100,100)
plt.legend()
plt.show()
你看他们有相同的根源。
请注意,如果你有一个喜欢的分数
y2 = fract(x,-3)
即分母有一个奇数指数,你可以认为 x=0 也有根,只需看图
但这不是根,而是奇点,是±∞ 的垂直渐近线。指数分母为偶数时,奇点将趋向 +∞。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。