与线性表达式相乘时找到非线性表达式的根

数据挖掘 Python matlab
2022-02-26 23:43:12

这是一个简单的多项式方程:

b^2 + 2b + 1 = 0

我可以很容易地解决这个问题:

import numpy as np
from scipy.optimize import fsolve

eq = lambda b : np.power(b,2) + 2*b + 1
fsolve(eq, np.linspace(0,1,2))

同样,我可以求解任何项数有限的方程。但是如何求解具有无限项的方程,其给出为:

Gtλ=(1λ)n=1λn1Gt:t+n

上式可以写成:

(1 - l) * (5.5 + 4.0*l + 4*l^2 + 6*l^3 + 5*l^4 + 5*l^5 + 5*l^6 + 5*l^7 + 5*l^8 + 5*l^9 + 5*l^10   ) = 5

当 n 从 1 变为 10 时。但我想解决这个问题以获得足够大的值,n使得 LHS ~= RHS。

我知道 LHS 的值,G1 -> Ginf但不明白我怎么能在这里计算 lambda 的值。

我尝试查看numpy 多项式函数,但找不到与此处相关的函数。

2个回答

您可以将Wolfram 语言应用到您的项目中。有一个免费的Wolfram 引擎供开发人员使用,您可以通过Python 的 Wolfram 客户端库使用这些功能。

如果你有Gt:t+n作为 n 和/或 λ 的函数,则可以找到根(如果存在)。没有多少内存可以存储无限数量的预先计算的常数,所以一些公式Gt:t+n必须提供。

g[n_, λ_] := λ/n

Sum可以在极限中象征性地评估无限。通过Assuming一些条件λ来确保收敛。然后

Assuming[
 0 < λ < 1,
 (1 - λ) Sum[λ^(n - 1) g[n, λ], {n, 1, Infinity}]
 ]
-(1 - λ) Log[1 - λ]

如果使用Wolfram 的笔记本界面,则可以选择以数学符号输入这个问题。

数学图形

g没有假设的情况下从@Paul 获取。

g[n_,λ_] := 1/n!
res = Sum[λ^(n - 1) g[n, λ], {n, 1, Infinity}]
((-1+E^λ) (1-λ))/λ

然后对解决方案族使用Solve(或NSolve)on resReduce用于更容易找到逆解。

Solve[Reduce[res == 5], λ]

数学图形

解决方案族是作为一个ConditionalExpression返回c1在整数集合中。

希望这可以帮助。

我不认为这个方程一般可以解决。由于它是一个无限长的多项式,因此无法计算。只有在常量的情况下才能做到Gt:t+n遵循一个非常特定的模式,因此该系列等效于我们可以评估的已知函数。例如:

  • 如果Gt:t+n等于[1,12!,13!,14!,...](在哪里4!阶乘4),那么总和将等于 eλ
  • 如果Gt:t+n等于[1,0,13!,0,15!,...]那么总和将等于 sin(λ)

但一般来说,如果G如果是任何随机的常数集,则无法评估该函数。