数值求解积分限制条件?

4

我正在尝试找到两个函数曲线下方的一个区域,使得该区域的面积等于给定的数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
现在,我的问题是:如果给我向量(或Python中的数组)f和g,而不是符号函数,如何找到a和b?我知道如何使用trapz()来查找向量的面积,但我不知道是否有一种方法可以在上述问题中数值地使用它来找到ab
谢谢!
2个回答

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

for

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

在...之内

[a,b]

抱歉,应该是f(x) = 3x - 3x^2而不是3x - 3x^3。顺便说一句,感谢您提供的代码,但我实际上知道如何在Python/Matlab中编写fx和gx为“符号”的代码。我的问题是,如果fx和gx仅以向量(即点)的形式给出而不是符号函数,如何获得等效的结果? - mhmhsh
@user1583416:你能重新表达一下你的原始问题吗?原始问题涉及符号。 - Abhijit
我只是使用符号示例来展示我想要在数值上实现的等效目标(即找到使得给定向量(点)f和g的曲线下面积相等于值m的a和b)。 - mhmhsh

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接