【问题标题】:solving for integration limits numerically?数值求解积分极限?
【发布时间】:2012-12-03 09:31:27
【问题描述】:

我试图在两个函数的曲线下定位一个区域,使该区域的面积等于给定数字m。例如,通过整合这两个功能:

f(x) = 3x - 3x^2
g(x) = x

象征性地从 a 到 b,并将每个等同于 m(例如 m=1/3)。系统可以解出a和b的值:

1.5 b^2 - b^3 - 1.5 a^2 + a^3 = 1/3
0.5 b^2 - 0.5 a^2 = 1/3

我对此的肯定解决方案大约是:a = 0.364823, b = 0.894294

现在,我的问题是:如果将 f 和 g 作为向量(或 python 中的数组)而不是符号函数提供给我,我如何找到 a 和 b?我知道如何使用trapz() 来查找向量的区域,但我不知道是否有办法使用它在上述问题中以数字方式查找ab

谢谢!

【问题讨论】:

    标签: python matlab integration area curve


    【解决方案1】:

    你可以试试sympy

    >>> from sympy import *
    >>> x,a,b = symbols('x a b')
    >>> fx = "3*x - 3*x**3"
    >>> gx = "x"
    >>> m = 1/3
    >>> int_fx = integrate(fx, (x,a,b))
    3*a**4/4 - 3*a**2/2 - 3*b**4/4 + 3*b**2/2
    >>> int_gx = integrate(gx, (x,a,b))
    -a**2/2 + b**2/2
    >>> solve([Eq(int_fx, m), Eq(int_gx, m)],(a, b))
    [(-0.577350269189626, -1.00000000000000), (-0.577350269189626, 1.00000000000000), (0.577350269189626, -1.00000000000000), (0.577350269189626, 1.00000000000000)]
    

    顺便说一句,我很难理解你是如何设法得到一个明确的积分解

    1.5 b^2 - b^3 - 1.5 a^2 + a^3 = 1/3
    

    f(x) = 3x - 3x^3
    

    [a,b]
    

    【讨论】:

    • 抱歉,应该是 f(x) = 3x - 3x^2 而不是 3x - 3x^3。顺便感谢您提供的代码,但我实际上了解当 fx 和 gx 是“符号”时如何在 python/matlab 中编写代码。我的问题是,如果 fx 和 gx 仅作为向量(即点)而不是符号函数给出,如何获得等效结果??
    • @user1583416:你能改写你原来的问题吗?原始问题涉及符号
    • 我使用符号示例只是为了显示我想要在数字中等效完成的内容(即找到使 f 和 g 的曲线下面积等于值 m 的 a 和 b,其中 f 和 g 是作为向量(点)给出)。
    【解决方案2】:

    我认为您需要查看积分方程:例如,Numerical RecipesSO

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 2015-03-30
      • 2012-11-27
      • 1970-01-01
      • 2015-08-19
      • 2015-12-16
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多