我在编写带有内部积分的矢量化输入的2d函数时遇到麻烦。
我的功能如下:
thick = 40e-9;
overlap = (@(E,T)integral2(@(x,y)exp(E.*T.*abs(x-y)),0,thick,0,thick));
如果我使用标量输入调用函数,例如overlay(1,1),可以正常工作。
overlap(1,1)
ans = 1.6000e-15
但是,如果我用E和T的向量输入来调用该函数,例如E=1:1:10
和T=1:1:10
,这不起作用。我得到以下信息:
Error using .*
Matrix dimensions must agree.
有人知道如何使用矢量化输入来实现此目的吗?我正在寻找一种无需内联循环就可以在内联函数本身中实现此目标的方法。
答案 0 :(得分:0)
错误是指E
和T
的形状与x
和y
不同,大概是integral2
将数组传递给x
和{ {1}}。此便捷功能未配备集成数组值的功能,因此可以随意使用数组值的输入。
有一个简单的解决方法:将幂运算移到积分之外:
y
由于双精度,结果不是很有趣,但是重要的是错误已经消失并且结果具有适当的大小。
但是随后您可以轻松地看到您甚至不必在函数内部进行集成,因为积分不再取决于您的函数输入。这将使您的函数调用更快很多:
>> overlap = @(E,T)integral2(@(x,y)exp(abs(x-y)),0,thick,0,thick).^(E.*T);
>> overlap(1,1)
ans =
1.6000e-15
>> overlap(E,T)
ans =
1.0e-14 *
0.1600 0.0000 0.0000 0.0000 0 0 0 0 0 0