求解第三个变量的二重积分方程
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
。
我一直在尝试在 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 argumentX
and return a vector resultY
, the integrand function evaluated at each element ofX
. 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
。