求解第三个变量的二重积分方程

Solving a double integral equation for a third variable

我一直在尝试在 matlab 中求解第三个变量的二重积分方程。

一个例子:

起初,我试图用符号来解决它(当k=1时)如下:

syms x y h
F = @(x,y,h) 2*x*y+4*h; 
f = @(x) x/2;
solve(int(int(F(x,y,h)*f(x),x,0,3)*f(y),y,0,1)-3, h)

代码给出正确答案,即当k=1时h=2/3。

然而,对于我的实际问题,函数 F 和 f 复杂得多。当我将上面的相同代码应用于复数 F 和 f 时,matlab 没有在适当的时间解决它。实际上我不知道它是否解决了 - 我让代码 运行 持续 30 分钟并强制它终止。我将不得不进一步探索这条路线,但现在,我正在尝试用数字来解决它。下面的代码是我试过的:

F = @(x,y,h) 2.*x.*y+4.*h; 
f = @(x) x./2;
g1 = @(y,h) integral(@(x) F(x,y,h).*f(x),0,3)
g2 = @(h) integral(@(y) g1(y,h).*f(y),0,1)-3
bsolve = fsolve(g2,0)

为什么这段代码给我错误的答案 0.5833?

来自 integral 的文档:

For scalar-valued problems the function Y = FUN(X) must accept a vector argument X and return a vector result Y, the integrand function evaluated at each element of X. For array-valued problems (see the 'ArrayValued' option below) FUN must accept a scalar and return an array of values.

因为您嵌套了对 integral 的调用,外部积分将向量传递到内部调用中。要解决此问题,内部积分 g1 必须配置为在标量上运行:

g1 = @(y,h)integral(@(x)F1(x,y,h).*f1(x),0,3,'ArrayValued',true)

代码现在 return 2/3 浮点数。对于这个单变量求根问题,您可能还应该使用 fzero 而不是 fsolve