我有一个复数值函数func(x, y)
,它适用于任何x
和y
值。
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);
哪里出了问题,我该如何解决?
答案 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
实际上是一个与x
和y
大小相同的向量。之前您只是为if
语句使用此向量的第一个值,因为缺少any
或all
。新的单行代码在适当的位置返回一个15&s和1的向量。
答案 1 :(得分:0)
我认为你不能直接在Matlab中做到这一点,因为integral2
期望一个实值函数。
您可以单独集成功能的实际部分和复杂部分,然后将它们相加。