我有一个问题,我需要求解一个次数随着每次迭代(循环)而增加的多项式,表达式为
(1/(1+x)^1)+(1/(1+x)^2)+(1/(1+x)^3)+(1/(1+x)^4)+(1/(1+x)^5)
正如你所看到的,指数随着每次迭代而增长,这个表达式将被用在函数“fsolve”中。我不想计算这个表达式,而是构建它以便在函数“fsolve”中使用它。(我正在使用scipy.optimize
导入fsolve
)提前感谢
编辑
def func(x):
return["Here i will have my mathematical expression in the question"]
print(fsolve(func, [0.05]))
其中0.05是当等于零时表达式的解的起始猜测。
编辑2
整个问题是:
C1 - (1-1/(1+x)^n - C2*sum[1/(1+x) + 1/(1+x)^2)+ ... + 1/(1+x)^n]
其中C1
和C2
是两个常数,n
是迭代次数The boundaries of the sum-expression is from 1 to n
。
4条答案
按热度按时间eiee3dmh1#
我想用一个理解:
为您提供:
ykejflvf2#
Scipy提供了期望数值函数作为参数的数值求解器。没有必要编写一个返回函数表示的字符串的函数,那将不起作用。
实现您所要求的一个简单方法是使用factory(这里我们将使用decorated function):
关键思想是将
order
参数传递给装饰器(factory
),装饰器将返回带有fsolve
兼容签名的装饰函数(wrapped
)。wrapped
函数是您的目标函数,它返回所需数量wrtorder
和x
值factory
函数是一种常用的order
参数化方法,每次您想要研究特定的order
时,都可以避免重写整个过程,此函数返回wrapped
修饰函数。@np.vectorize
decorator是一个numpy
的矢量化工具,它可以对数组元素进行操作,并返回每个值的结果。然后简单地迭代您的订单,以获得您想要求解的函数:
实际上,由于
fsolve
正在寻找根,而在您的设置中有没有真实的根的订单。Analyzing the function of order 5将显示there is no real roots,但当x
变为无穷大(不是根)时,我们仍然在实域中。对于偶数订单,根很容易通过上述过程找到。因此,您可能会有
float overflow
错误,有时高数字是毫无意义的w.r.t. a root finding problem为奇数订单。OP更新
基于您在文章中详细介绍的新函数,您可以向目标函数添加额外的参数,如下所示:
然后我们像往常一样求解几个订单,我选择了
(C1, C2) = (10,10)
:zyfwsgd63#
如果你可以放松对
fsolve
的使用,你也可以简单地通过使用numpy.polynomials
和做一些代数运算来解决复数的这个问题。首先认识到根的职能是根的分子是一个多项式:
然后只需对您要分析的每个订单应用
roots
方法:dtcbnfnu4#
你确定你只需要五项吗?从分析上讲,如果有无穷多项,你的整个表达式的计算结果是1 + 1/x,这是平凡可逆的。