Matlab 是否可以为循环将其矢量化?

Matlab 是否可以为循环将其矢量化?,matlab,optimization,Matlab,Optimization,所以,我试图在Matlab上优化这段代码,我认为唯一能做的就是将其矢量化。问题是,我在矢量化代码中找到的所有指南都是针对非常简单的问题的,所以我不知道是否有可能对这个问题进行矢量化 h = zeros(1,length(t)); n = zeros(1,length(t)); b = zeros(1,length(t)); z = zeros(1,length(t)); V = zeros(1,length(t)); I = zeros(1,length(t)); delta_t = t(2)

所以,我试图在Matlab上优化这段代码,我认为唯一能做的就是将其矢量化。问题是,我在矢量化代码中找到的所有指南都是针对非常简单的问题的,所以我不知道是否有可能对这个问题进行矢量化

h = zeros(1,length(t));
n = zeros(1,length(t));
b = zeros(1,length(t));
z = zeros(1,length(t));
V = zeros(1,length(t));
I = zeros(1,length(t));
delta_t = t(2) - t(1);
% Initial conditions
h(1) = 0.978936;
n(1) = 0.0244296;
b(1) = 0.205115;
z(1) = 0.00139361;
V(1) = -71.8723;

for i=1:(length(t)-1)
    h(i+1) = h(i) + delta_t*feval(@h_prime,V(i),h(i));
    n(i+1) = n(i) + delta_t*feval(@n_prime,V(i),n(i));
    b(i+1) = b(i) + delta_t*feval(@b_prime,V(i),b(i));
    z(i+1) = z(i) + delta_t*feval(@z_prime,V(i),z(i));
    minf = m_inf(V(i));
    pinf = p_inf(V(i));
    ainf = a_inf(V(i));
    if (t(i) >= t_app(1) && t(i) <= t_app(2))
        I(i) = Iapp;
    else I(i) = 0;
    end;
    V(i+1) = V(i) + delta_t*feval(@V_prime,V(i),h(i),n(i),b(i),z(i),minf,pinf,ainf,I(i));
end;
这是h_素数

function dh = h_prime(V, h)

h_inf = 1/(1+exp((V+45)/7));
T_h   = 0.1+0.75*(1/(1+exp((V+40.5)/6)));

dh = (h_inf - h)/T_h;

什么是h_素数和其他素数?它们只是数学函数,我给出参数,它们返回一个值。我在其他函数上这样做了,所以我的主代码看起来会更好。我不认为也需要发布函数,因为它们只返回浮点值。如果我错了,请让我知道,在您决定矢量化是您的解决方案之前,您确实需要分析代码,以了解花费的时间。几年来,Matlab一直使用JIT编译器,这使得大多数向量化尝试都是徒劳的。可能还有其他的方法……对于矢量化,在某个迭代中,你的变量不能依赖于前一个,或者至少你必须能够将它们转换成前一个。你的情况与此完全相反。生物潜能本质上是递归的,它们取决于过去的情况。我不认为你可以用mex C代码来编写函数,而不是尝试矢量化,根据你提供的代码,这看起来并不太复杂,然后你可以在MATLAB中与其他代码一起使用。
function dh = h_prime(V, h)

h_inf = 1/(1+exp((V+45)/7));
T_h   = 0.1+0.75*(1/(1+exp((V+40.5)/6)));

dh = (h_inf - h)/T_h;