Je voudrais vectoriser ces deux lignes de code. J'ai récemment appris la vectorisation. Je sais comment vectoriser la ligne sumsurface mais je ne sais pas comment inclure la déclaration if, je voudrais vraiment vectoriser l'ensemble pour la boucle et m'en débarrasser. Je veux vectoriser pour améliorer l'exécution le code que j'ai en ce moment fonctionne très lentement. J'ai préalloué les tableaux, ce qui aide à améliorer l'exécution. J'avais oublié de le faire auparavant. Si je pouvais obtenir de l'aide, ce serait très apprécié.Comment vectoriser en Matlab?
pH = linspace(2,12, 6000);
for j = 1:300
nAsp = randi([10, 30],[1,1]);%865
nGlu = randi([12, 38],[1,1]);%1074
nLys = randi([11, 33],[1,1]);%930
nArg = randi([10, 30],[1,1]);%879
nCys = randi([2, 8],[1,1]); %214
nTyr = randi([5, 17],[1,1]); %462
nHis = randi([4, 12],[1,1]); %360
for i = 1: len;
sumsurface(i) = (nAsp).*(-(10.^((pH(i)-asp))./(10.^((pH(i)-asp))+1)))+ (nGlu).*(-(10.^((pH(i)-glu))./(10.^((pH(i)-glu))+1)))+(nCys).*(-(10.^((pH(i)-cys))./(10.^((pH(i)-cys))+1)))+ (nTyr).* (-(10.^((pH(i)-tyr))./(10.^((pH(i)-tyr))+1)))+ (nHis).*(1./(10.^((pH(i)-his))+1))+ (nLys).*(1./(10.^((pH(i)-lys))+1))+ (nArg).*(1/(10.^((pH(i)-arg))+1));
if sumsurface(i) < .01 && sumsurface(i) > -.01
%disp(sumsurface(i));
disp(pH(i));
x(1+end) = pH(i);
aspl(1+end) = nAsp;
glul(1+end) = nGlu;
cysl(1+end) = nCys;
tyrl(1+end) = nTyr;
hisl(1+end) = nHis;
lysl(1+end) = nLys;
argl(1+end) = nArg;
end
end
end
J'ai mis à jour mon code, j'ai réalisé que j'avais omis une partie importante. J'ai un double pour la boucle mais les longueurs des vecteurs sont différentes. Je ne veux pas que le vecteur pH ait la même longueur que le vecteur nAsp = randi ([10, 30], [len, 1]). Sera-t-il encore possible de le vectoriser? merci pour les pointeurs –