我试图找到一种尽可能有效的方法来存储和调用我的 matlab 形状函数。我有一个区间x=linspace(0,20)
和一个位置向量
count = 10;
for i=1:count
pos(i)=rand()*length(x);
end
现在,我想在每个位置上放置pos(j)
形状函数,例如具有紧凑支持的高斯核或帽子函数或类似的东西(应该可以轻松更改原型函数)。该函数的支持由所谓的平滑长度控制h
。所以我在 .m 文件中构造了一个函数,例如(例如三次样条)
function y = W_shape(x,pos,h)
l=length(x);
y=zeros(1,l);
if (h>0)
for i=1:l
if (-h <= x(i)-pos && x(i)-pos < -h/2)
y(i) = (x(i)-pos+h)^2;
elseif (-h/2 <= x(i)-pos && x(i)-pos <= h/2)
y(i) = -(x(i)-pos)^2 + h^2/2;
elseif (h/2 < x(i)-pos && x(i)-pos <=h)
y(i) = (x(i)-pos-h)^2;
end
end
else
error('h must be positive')
end
然后在间隔上构造我的函数,x
比如
w = zeros(count,length(x));
for j=1:count
w(j,:)=W_shape(x,pos(j),h);
end
到目前为止一切都很好,但是当我制作x=linspace(0,20,10000)
and时count=1000
,我的计算机(Intel Core-i7)需要几分钟来计算整个东西。由于它应该是某种 PDE-Solver,因此必须在每个时间步(在特定情况下)执行此过程。我认为我的问题是,我将x
其用作函数调用的参数并存储每个函数,而不是仅存储一个函数并对其进行移位,但是我的 matlab 知识并不是那么好,所以有什么建议吗?仅供参考:我需要两个或多个功能支持相交的区域的积分......当我在 1D 中完成这个时,我想为 2D 功能做它,所以无论如何它必须是有效的