これは、ベクトル化場所の一例です(オール・イン・ワンの操作)は、MATLAB効率の面で大きなメリットをもたらすことができるコーディング:
c=-0.5;
b=0.5;
L=0:1:100;
K=0:1:100;
% slow loop-based method - shouldn't use meshgridded L and K here
Z = zeros(length(L), length(K));
for i=1:length(L)
for q=1:length(K)
if L(i)/K(q)>=-c
Z(i,q) = (K(q)^b)*(L(i)+(b*c)*K(q))^(1-b);
else
Z(i,q) =((-1/c)^b)*(1-b)*(1-b);
end
end
end
figure(1)
surf(L,K,Z)
% much faster vectorized approach
ZZ = zeros(length(L), length(K));
[KK,LL]= meshgrid(K, L); % corrected order of meshgrid inputs and outputs
% ---alternatively you could use [LL,KK]=ndgrid(L,K);
case1 = LL ./ KK >= -c;
case2 = ~case1;
ZZ(case1) = KK(case1).^b .* (LL(case1) + (b*c) .* KK(case1)) .^ (1 - b);
ZZ(case2) = ((-1/c)^b)*(1-b)*(1-b);
figure(2)
surf(L,K,ZZ)
出典
2016-11-13 17:50:22
jez