2012-12-15 16 views
4

我試圖找到兩個函數的曲線下的區域,使得該區域的面積等於給定的數字m。例如,通過集成兩個功能:數值求解積分限制?

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

象徵性地從A到B,並且每個等同於m(例如米= 1/3)。該系統可以解決找到一個和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

現在,我的問題是:我怎麼能找到A和B,如果f和g作爲向量(或python中的數組)而不是符號函數被賦予給我?我知道如何使用trapz()來查找矢量的區域,但我不知道是否有方法使用它來查找上述問題中的數字爲ab

謝謝!

回答

2

您可以嘗試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] 
+0

對不起,應該是f(x)= 3x - 3x^2而不是3x - 3x^3。感謝代碼的順便說一下,但我實際上懂得如何在python/matlab中編寫代碼,當fx和gx是'符號'時。我的問題是,如果fx和gx僅作爲向量(即點)而不是符號函數給出,那麼如何獲得同等結果? – user1583416

+0

@ user1583416:你能改述你原來的問題嗎?原來的問題涉及符號 – Abhijit

+0

我用符號示例只是爲了顯示我想在數字中完成的等價操作(即找到a和b,使f和g的曲線下的區域等於值m,其中f和g是給定的作爲矢量(點))。 – user1583416