在MATLAB中将复值函数集成到平方上时出错?

时间:2014-05-16 13:59:49

标签: matlab

我有一个复数值函数func(x, y),它适用于任何xy值。

func = @(x, y) (eps_func(x, y)*[1+1i, 1-2i, 3])*([4+3i, 6-2i, 3+1i])';

其中eps_func()基本上是二进制函数。如果(x, y)落入一个圆圈,则返回15.否则,返回1.

function eps_val = eps_func(x, y)

SQ_SIDE_LEN = 2;
C_RADIUS = 0.11*SQ_SIDE_LEN;

dist_from_origin = sqrt(x.^2+y.^2);
if dist_from_origin <= C_RADIUS % inside the circle
    eps_val = 15;
else % outside the circle
    eps_val = 1;
end
end

我现在希望将其整合到MATLAB中的x-y方(-1 ≤ x ≤ 1-1 ≤ y ≤ 1)上。我做了

U1 = integral2(func, -1, 1, -1, 1);

返回此错误

Error using integral2Calc>integral2t/tensor (line 242)
Integrand output size does not match the input size.

Error in integral2Calc>integral2t (line 56)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);

Error in integral2Calc (line 10)
    [q,errbnd] =
    integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);

Error in integral2 (line 107)
    Q =
    integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);

Error in chern (line 24)
            U1 = integral2(func, -1, 1, -1, 1);

哪里出了问题,我该如何解决?

2 个答案:

答案 0 :(得分:1)

我不确定问题是由于复杂性造成的。我知道integral处理复杂的集成就好了。实际问题可能是您的被积函数不符合integral2文档中指定的要求。帮助说明

  

所有输入功能必须接受数组作为输入并操作
      按元素。函数Z = FUN(X,Y)必须接受
的数组X和Y.       相同的大小并返回一组相应的值。

您的函数eps_val当然接受数组,但无论输入的大小如何,它总是返回一个标量。 integral2已经过优化,可以利用矢量化,因此它可以同时传递多个值,并希望看到相应的输出,这在您的情况下不会发生。

您可以通过更改此块来解决此问题

if dist_from_origin <= C_RADIUS % inside the circle
    eps_val = 15;
else % outside the circle
    eps_val = 1;
end

eps_val = 14*(dist_from_origin <= C_RADIUS) + 1;

dist_from_origin实际上是一个与xy大小相同的向量。之前您只是为if语句使用此向量的第一个值,因为缺少anyall。新的单行代码在适当的位置返回一个15&s和1的向量。

答案 1 :(得分:0)

我认为你不能直接在Matlab中做到这一点,因为integral2期望一个实值函数。

您可以单独集成功能的实际部分和复杂部分,然后将它们相加。