2017-04-14 69 views
1

我一直在尝试解决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时= 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?

回答

0

从文档integral

对于标量值问题函数Y = FUN(X)必须接受的载体 参数X并返回一个向量结果Y,被积函数 在X每个元件进行评价。对于数组值问题(请参阅下面的 'ArrayValued'选项)FUN必须接受标量并返回一个值数组。

由于您正在嵌套调用integral,因此外部积分将向量传递到内部调用中。为了解决这个问题,内积分,g1必须配置为标量操作:

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

现在,该代码将在浮点返回2/3。您应该也可以使用fzero而不是fsolve来解决这个单变量查找问题。

+0

非常感谢! – user2011987