arrays - 内含二维积分的矢量化函数
问题描述
我在尝试编写带有内部积分的矢量化输入的二维函数时遇到了麻烦。
我的功能如下:
thick = 40e-9;
overlap = (@(E,T)integral2(@(x,y)exp(E.*T.*abs(x-y)),0,thick,0,thick));
如果我用标量输入调用函数,例如重叠(1,1),这很好用。
overlap(1,1)
ans = 1.6000e-15
但是,如果我使用 E 和 T 的向量输入调用函数,例如E=1:1:10
and T=1:1:10
,这不起作用。我得到以下信息:
Error using .*
Matrix dimensions must agree.
有谁知道如何使用矢量化输入进行这项工作?我正在寻找一种在内联函数本身中执行此操作的方法,而无需 for 循环。
解决方案
错误是指E
和T
具有不同的形状x
和y
,大概integral2
将数组传递给x
和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
由于双精度,这不是一个非常有趣的结果,但重要的是错误已经消失并且结果具有适当的大小。
但是您可以很容易地看到您甚至不必在函数内部进行积分,因为积分不再取决于您的函数输入。这将使您的函数调用更快:
>> thick = 1; % I don't like zeros
>> int = integral2(@(x,y)exp(abs(x-y)),0,thick,0,thick); % integrate only once!
>> overlap = @(E,T) int.^(E.*T);
>> overlap(1,1)
ans =
1.4366
>> overlap(1:2,1:2)
ans =
1.4366 4.2589
推荐阅读
- python - 当我尝试将它们传递给另一个类时,对象消失了
- python-3.x - 比较时间戳的时间部分以查看它是否在一个范围之间 - 在 Python 的数据框中并返回一个带有 True/False 的新列
- javascript - 当参数是不断变化的 DOM 变量时,为什么我的函数不起作用?
- nginx - Nginx 模块错误:dlopen() "/usr/share/nginx/modules/ngx_http_lua_module.so" 失败
- javascript - jquery中是否有任何替代函数,如sql server中的NULLIF()?
- r - 管道 df 到 mutate + 子字符串表达式
- swift - AVPlayer SwiftUI 检查状态 (MVVM)
- c - 如果发生多个渲染器切换,SDL_SetRenderTarget() 会挂起一段时间
- html - 绝对定位没有按我的意愿工作
- python - 如何使用python重复片段的部分n次