【问题标题】:How do I integrate a function that returns a value in terms of another symbol如何集成一个根据另一个符号返回值的函数
【发布时间】:2019-12-16 07:40:55
【问题描述】:

我目前正在尝试使用scipy.integrate.quad整合一个函数,但是我的函数有两个变量,第一个是x,这是一个被整合出来的变量,第二个是G,我正在尝试集成完成后解决。

我已经尝试使用支持符号积分的sympy.integrate,但我的积分太复杂而无法评估。

我试图解决的积分示例如下所示:

C = integrate.quad(lambda x: x/(1+(3*G)*x)

我希望能够评估积分,以便我可以求解 G,因为 C 是一个常数值。

我希望输出是 G 的某个函数,然后我可以用它来求解 G,但是如果没有事先定义 G,我无法弄清楚如何集成该函数。

【问题讨论】:

    标签: python-3.x scipy integration sympy


    【解决方案1】:

    首先说明您的最终目标是:解决方程f(G)==C,其中f()是单个参数的函数。现在,它恰好是你的f是与第二变量集成的结果。因此,简单地定义单个参数函数,该函数计算如下:

    def f(G):
        return quad(lambda x: x/(1+(3*G)*x), 0, 10)[0]
    

    并致电scipy.optimize.root_scalar来解决方程(在这个例子中使用C==1 @ / p>

    root_scalar(lambda G: f(G)-1, x0=2, bracket = [0,5])
    
          converged: True
               flag: 'converged'
     function_calls: 10
         iterations: 9
               root: 3.1734489114921782
    

    【讨论】:

    • 非常感谢您的建议。如果我可以问另一个问题,你为什么选择起点和括号的那些值?谢谢。
    • 我现在也收到错误:“检测到循环误差的发生,这可以防止所请求的容忍度。错误可能低估。” span>
    • @ lam代码(包括集成限制)中的所有参数或多或少任意选择。我做了一个f(G)-1的情节,了解root的位置(在域名G>0) span>中
    • @ lam yeah,我也得到了这个警告,对于一些参数。显然,对于G的某些参数/值,该函数并不“表现”。这是您必须自己工作的东西(例如,选择您的函数和/或参数/域等,以便不会发生此问题或不会引入查找解决方案的问题)。但这与答案中描述的整体方法无关。 span>
    猜你喜欢
    • 2015-05-15
    • 2010-09-15
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多