|
"Jan Simon" <matlab.THIS_YEAR@nMINUSsimon.de> wrote in message <hb7fje$d2q$1@fred.mathworks.com>...
> Dear Isaac!
>
> > M=matrix(100,1000);
> > for j=1:100
> > a = functionA(M(j,:))
> > b(j) = functionB(M(j,:))
> > end
> >
> > it seems the execution of theese functions destroy free memory :(
>
> Since these functions disturb your memory, it would be helpful to show us functionA and functionB ...
>
> Kind regards, Jan
you are right :)
the function i invoke in the cycle is:
function [selezioneavvenuta,vettoreesposizione,beta,numerocostituentsscelti] = modello_selezione(Matricebmk,Matricionaserie,esposizionedlongassegnata,numrapportominimodausare,numeromesirapportodausare,numerogiornirapportodausare,barrierarischiodausare,numeromesirischiodausare,tiposelezionedausare,moltiplicocorrelazionedausare,barrieracorrelazionedausare,numeromesibetadausare,tipomesibetadausare,numeromassimoselezionatidausare,pesomassimodausare)
datainizio=datenum('01/01/2000');
datafine=datenum('01/01/2010');
sizedausare=size(Matricionaserie);
numerocostituents=sizedausare(1)-1;
Matricebmkw=seriesettimanale(Matricebmk);
vettoreesposizione=zeros(1,numerocostituents);
vettorepunteggiobase=zeros(1,numerocostituents);
correlazione=zeros(1,numerocostituents);
beta=zeros(1,numerocostituents);
matricionarapporti=zeros(1,numerocostituents);
perfrapportobmk=rendimentoa(Matricebmk,0,numeromesirapportodausare,numerogiornirapportodausare);
deviazionerapportobmk = deviazionea(Matricebmk,0,numeromesirapportodausare,numerogiornirapportodausare,datainizio,datafine);
rapportobmk=perfrapportobmk/deviazionerapportobmk;
for j=1:numerocostituents
Matriceserie=[Matricionaserie(1,:); Matricionaserie(1+j,:)];
perfrapporto=rendimentoa(Matriceserie,0,numeromesirapportodausare,numerogiornirapportodausare);
deviazionerapporto = deviazionea(Matriceserie,0,numeromesirapportodausare,numerogiornirapportodausare,datainizio,datafine);
matricionarapporti(1,j)=perfrapporto/deviazionerapporto;
end
numrapporto=0;
for j=1:numerocostituents
if matricionarapporti(1,j)>rapportobmk
numrapporto=numrapporto+1;
end
end
if numrapportominimodausare==0 || numrapporto>numrapportominimodausare
if barrierarischiodausare>0
deviazionerischiobmk = deviazionea(Matricebmk,0,numeromesirischiodausare,0,datainizio,datafine);
for j=1:numerocostituents
Matriceserie=[Matricionaserie(1,:); Matricionaserie(1+j,:)];
deviazionerischiofasecostituents(1,j) = deviazionea(Matriceserie,0,numeromesirischiodausare,0,datainizio,datafine);
end
end
for j=1:numerocostituents
Matriceserie=[Matricionaserie(1,:); Matricionaserie(1+j,:)];
Matriceseriew=seriesettimanale(Matriceserie);
if tiposelezionedausare==1
[alphaa1m, betaa1m, r2a1m]=regressionea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphaa1m;
elseif tiposelezionedausare==2
[alphaa1m, betaa1m, r2a1m]=regressionea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
[alphaa3m, betaa3m, r2a3m]=regressionea(Matriceserie,Matricebmk,0,3,0,datainizio,datafine);
[alphaa6m, betaa6m, r2a6m]=regressionea(Matriceserie,Matricebmk,0,6,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphaa1m+alphaa3m+alphaa6m;
elseif tiposelezionedausare==3
[alphawa3m, betawa3m, r2wa3m]=regressionea(Matriceseriew,Matricebmkw,0,3,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphawa3m;
elseif tiposelezionedausare==4
[alphawa3m, betawa3m, r2wa3m]=regressionea(Matriceseriew,Matricebmkw,0,3,0,datainizio,datafine);
[alphawa6m, betawa6m, r2wa6m]=regressionea(Matriceseriew,Matricebmkw,0,6,0,datainizio,datafine);
[alphawa1y, betawa1y, r2wa1y]=regressionea(Matriceseriew,Matricebmkw,1,0,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphawa3m+alphawa6m+alphawa1y;
elseif tiposelezionedausare==5
[rapportopositivo, rapportonegativo, rapportototale]=rapportoperformancea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
vettorepunteggiobase(1,j)=rapportototale;
end
if tipomesibetadausare==1
correlazione(1,j) = correlazionea(Matriceserie,Matricebmk,0,numeromesibetadausare,0,datainizio,datafine);
[nn, beta(1,j), nn2] = regressionea(Matriceserie,Matricebmk,0,numeromesibetadausare,0,datainizio,datafine);
elseif tipomesibetadausare==2
correlazione(1,j) = correlazionea(Matriceseriew,Matricebmkw,0,numeromesibetadausare,0,datainizio,datafine);
[nn, beta(1,j), nn2] = regressionea(Matriceseriew,Matricebmkw,0,numeromesibetadausare,0,datainizio,datafine);
end
vettorepunteggio=vettorepunteggiobase.*(beta>0);
end
if barrieracorrelazionedausare>0
vettorepunteggio=vettorepunteggio.*(correlazione>barrieracorrelazionedausare);
end
if moltiplicocorrelazionedausare>0
vettorepunteggio=vettorepunteggio.*correlazione.*(correlazione>0);
end
if barrierarischiodausare>0
vettorebooleanorischio=zeros(1,numerocostituents);
for j=1:numerocostituents
if deviazionerischiofasecostituents(1,j)<deviazionerischiobmk*barrierarischiodausare
vettorebooleanorischio(1,j)=1;
end
end
vettorepunteggio2(1,:)=vettorepunteggio(1,:).*vettorebooleanorischio(1,:);
passati=0;
for j=1:numerocostituents
if vettorepunteggio2(1,j)>0
passati=passati+1;
end
end
vettorepunteggio(1,:)=vettorepunteggio2(1,:);
end
presi=0;
for j=1:numerocostituents
if vettorepunteggio(1,j)>0
presi=presi+1;
end
end
numerocostituentsscelti=min(presi,numeromassimoselezionatidausare);
if numerocostituentsscelti>0
selezioneavvenuta=1;
for j=1:numerocostituents
if isnan(vettorepunteggio(1,j))==1
vettorepunteggio(1,j)=-100;
end
end
[a,ordinecostituents(1,:)]=sort(vettorepunteggio(1,:),'descend');
sommabeta=0;
for k=1:numerocostituentsscelti
sommabeta=sommabeta+beta(1,ordinecostituents(1,k));
end
pesoassegnato=esposizionedlongassegnata/sommabeta;
while pesomassimodausare>0 && pesoassegnato>pesomassimodausare && numerocostituentsscelti<presi
numerocostituentsscelti=numerocostituentsscelti+1;
sommabeta=0;
for k=1:numerocostituentsscelti
sommabeta=sommabeta+beta(1,ordinecostituents(1,k));
end
pesoassegnato=esposizionedlongassegnata/sommabeta;
end
for k=1:numerocostituentsscelti
vettoreesposizione(1,ordinecostituents(1,k))=pesoassegnato;
end
else
selezioneavvenuta=0;
end
else
selezioneavvenuta=0;
numerocostituentsscelti=0;
for j=1:numerocostituents
Matriceserie=[Matricionaserie(1,:); Matricionaserie(1+j,:)];
Matriceseriew=seriesettimanale(Matriceserie);
if tiposelezionedausare==1
[alphaa1m, betaa1m, r2a1m]=regressionea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphaa1m;
elseif tiposelezionedausare==2
[alphaa1m, betaa1m, r2a1m]=regressionea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
[alphaa3m, betaa3m, r2a3m]=regressionea(Matriceserie,Matricebmk,0,3,0,datainizio,datafine);
[alphaa6m, betaa6m, r2a6m]=regressionea(Matriceserie,Matricebmk,0,6,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphaa1m+alphaa3m+alphaa6m;
elseif tiposelezionedausare==3
[alphawa3m, betawa3m, r2wa3m]=regressionea(Matriceseriew,Matricebmkw,0,3,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphawa3m;
elseif tiposelezionedausare==4
[alphawa3m, betawa3m, r2wa3m]=regressionea(Matriceseriew,Matricebmkw,0,3,0,datainizio,datafine);
[alphawa6m, betawa6m, r2wa6m]=regressionea(Matriceseriew,Matricebmkw,0,6,0,datainizio,datafine);
[alphawa1y, betawa1y, r2wa1y]=regressionea(Matriceseriew,Matricebmkw,1,0,0,datainizio,datafine);
vettorepunteggiobase(1,j)=alphawa3m+alphawa6m+alphawa1y;
elseif tiposelezionedausare==5
[rapportopositivo, rapportonegativo, rapportototale]=rapportoperformancea(Matriceserie,Matricebmk,0,1,0,datainizio,datafine);
vettorepunteggiobase(1,j)=rapportototale;
end
if tipomesibetadausare==1
correlazione(1,j) = correlazionea(Matriceserie,Matricebmk,0,numeromesibetadausare,0,datainizio,datafine);
[nn, beta(1,j), nn2] = regressionea(Matriceserie,Matricebmk,0,numeromesibetadausare,0,datainizio,datafine);
elseif tipomesibetadausare==2
correlazione(1,j) = correlazionea(Matriceseriew,Matricebmkw,0,numeromesibetadausare,0,datainizio,datafine);
[nn, beta(1,j), nn2] = regressionea(Matriceseriew,Matricebmkw,0,numeromesibetadausare,0,datainizio,datafine);
end
end
end
------------------------------------------------------------------------------------
the subfunction "regressionea" is
function [alphaa, betaa, r2a]=regressionea(Matriceserie,Matricebmk,annifa,mesifa,giornifa,datainizio,datafine)
Matricedate=datevec(Matriceserie(1,:));
ultimoanno=Matricedate(end,1);
ultimomese=Matricedate(end,2);
ultimogiorno=Matricedate(end,3);
vettoreoggi=[ultimoanno, ultimomese, ultimogiorno];
numerodate=size(Matriceserie);
numerodate=numerodate(2);
giornoriferimento=trovagiorno(datenum(vettoreoggi),annifa,mesifa,giornifa);
i=numerodate;
while Matriceserie(1,i)>giornoriferimento && Matriceserie(1,i)>datainizio & i>1
i=i-1;
end
j=1;
while Matriceserie(1,j)<datafine && j<numerodate
j=j+1;
end
datedariferimento=Matriceserie(1,i:j);
valoridariferimento=Matriceserie(2,i:j);
valoribmkdariferimento=Matricebmk(2,i:j);
[alphaa, betaa, r2a]=regressione(valoridariferimento,valoribmkdariferimento);
----------------------------------------------------------------------------------
the subfunction "regressione" is
function [alpha, beta, r2]=regressione(serie,seriebmk)
try
n=size(serie);
if n(1)==1
serie=serie';
seriebmk=seriebmk';
n=n(2);
else
n=n(1);
end
rendimentiserie=zeros(n-1,1);
rendimentiseriebmk=zeros(n-1,1);
rendimentiserie=serie(2:end,1)./serie(1:end-1,1)-1;
rendimentiseriebmk=seriebmk(2:end,1)./seriebmk(1:end-1,1)-1;
regress(rendimentiserie,[rendimentiseriebmk ones(n-1,1)]);
[B,BINT,R,RINT,STATS] = regress(rendimentiserie,[rendimentiseriebmk ones(n-1,1)]);
alpha=B(2);
beta=B(1);
r2=STATS(1);
catch
alpha=0;
beta=0;
r2=0;
end
|