首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >积分积分的孤立积分法

积分积分的孤立积分法
EN

Stack Overflow用户
提问于 2022-11-22 00:48:53
回答 2查看 37关注 0票数 0

我想知道为什么同情不能解决以下问题:

代码语言:javascript
复制
from sympy import *
ss = symbols('s', real = True)
a = symbols('a', real = True)
f = Function('f')
g = Function('g')
eq = Integral(a*g(ss) + f(ss),(ss,0,oo))
solve(eq, a)

返回是一个空的解决方案列表。我想告诉你足够多的东西,这样我就可以得到一个解决方案:

代码语言:javascript
复制
-1*Integral(f(ss),(ss,0,oo))/Integral(g(ss),(ss,0,oo))

也就是说,它的安全假设积分收敛,是实值的,非零的.还有其他的假设/函数可以用来获得所需的输出吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-22 01:50:05

你对预期结果的假设仍然不准确。要使方程有一个解,必须保证Integral(g(ss),(ss,0,oo))是实的和非零的,这不是你的方程所暗示的,所以不返回结果。

此外,如果您想要求解涉及Integral的方程,则需要使用doit。看看下面

代码语言:javascript
复制
from sympy import *

x = symbols('x', real = True)
a = symbols('a', real = True)
f = Function('f')

eq = a+Integral(f(x), (x, 0, oo))
print('Eq.1', solve(eq, a))

eq2 = Integral(a+f(x), (x, 0, oo))
print('Eq.2', solve(eq2.doit(), a))

eq3 = Integral(a+f(x), (x, 0, 1))
print('Eq.3', solve(eq3.doit(), a))

eq4 = Integral(a+2, (x, 0, 3))
print('Eq.4', solve(eq4, a))
print('Eq.4', solve(eq4.doit(), a))

输出:

代码语言:javascript
复制
Eq.1 [-Integral(f(x), (x, 0, oo))]
Eq.2 []
Eq.3 []
Eq.4 []
Eq.4 [-2]

请注意,eq.1 可解的,因为它不在极限之内,所以您可以在方程的一侧移动a (具有无限界的积分是积分极限的缩写,其各自的界接近无穷大)。但是,eq.2和eq.3是不可解的,因为只有当它们收敛到一个实数时,和的极限才等于限制的和(在您的例子中,它们不能保证它们是可解的)。

最后,eq.4几乎是可解的,但您必须使用doit。在eq.1中,没有它你可以逃脱。

也就是说,您可以使用expand“克服”形式主义。看看下面。

代码语言:javascript
复制
from sympy import *

x = symbols('x', real = True)
a = symbols('a', real = True)
f = Function('f')
g = Function('g')

eq5 = a+Integral(a+f(x), (x, 0, 1))
print('Eq.5', solve(eq5.expand().doit(), a))

eq6 = Integral(a+f(x), (x, 0, 1))
print('Eq.6', solve(eq6.expand().doit(), a))

eq7 = Integral(a*g(x)+f(x), (x, 0, oo))
print('Eq.7', solve(eq7.expand().doit(), a))

输出:

代码语言:javascript
复制
Eq.5 [-Integral(f(x), (x, 0, 1))/2]
Eq.6 [-Integral(f(x), (x, 0, 1))]
Eq.7 [-Integral(f(x), (x, 0, oo))/Integral(g(x), (x, 0, oo))]

这是因为它允许某些操作,通过快速和松散地处理细节。但是,当结果明显错误时,它仍然不起作用(尝试使用oo作为eq.6或eq.7中的上限)。

票数 1
EN

Stack Overflow用户

发布于 2022-11-22 11:08:21

这是你的方程式:

代码语言:javascript
复制
In [9]: eq
Out[9]: 
∞                   
⌠                   
⎮ (a⋅g(s) + f(s)) ds
⌡                   
0 

您希望为a求解,使这个表达式等于零。我们可以重新排列这个表达式来提取a,以便solve了解如何隔离a

代码语言:javascript
复制
In [10]: eq.expand()
Out[10]: 
∞                   
⌠                   
⎮ (a⋅g(s) + f(s)) ds
⌡                   
0                   

In [11]: eq.expand(force=True)
Out[11]: 
∞             ∞        
⌠             ⌠        
⎮ a⋅g(s) ds + ⎮ f(s) ds
⌡             ⌡        
0             0        

In [12]: factor_terms(eq.expand(force=True))
Out[12]: 
  ∞           ∞        
  ⌠           ⌠        
a⋅⎮ g(s) ds + ⎮ f(s) ds
  ⌡           ⌡        
  0           0        

In [13]: solve(factor_terms(eq.expand(force=True)), a)
Out[13]: 
⎡ ∞         ⎤
⎢ ⌠         ⎥
⎢-⎮ f(s) ds ⎥
⎢ ⌡         ⎥
⎢ 0         ⎥
⎢───────────⎥
⎢ ∞         ⎥
⎢ ⌠         ⎥
⎢ ⎮ g(s) ds ⎥
⎢ ⌡         ⎥
⎣ 0         ⎦

我们必须使用force=True,因为expand不会假定具有oo上限的积分收敛并将积分分解为两个积分,可以将一个收敛积分转化为一个非收敛积分之和。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74526345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档