MATLAB: problema ciclo for
Salve, premetto che sono alle primissime armi con matlab e ho bisognoo di qualche info...Mi trovo questo codice:
for k2=9:22
q1(k2)=qbloc*(k2-1);
q2(k2)=(qbloc*k2).*(k2>=1&k2<=22);
Sx2(k2)=quad(f,Ri,Re)*quad(a,q1(k2),q2(k2));
Ac2(k2)=(q2(k2)-q1(k2)).*(Re^2-Ri^2)/2;
xg2(k2)=Sy2(k2)./Ac2(k2);
g12=atan((yg2(k2)-yc12)./(xg2(k2)-xc12));
end
Il risultato è composto da 14 vettori (tanti quanti k2), è possibile creare una matrice che abbia per righe questi vettori?
Mi servirebbe un modo per avere un solo oggetto con cui lavorare...Grazie!
for k2=9:22
q1(k2)=qbloc*(k2-1);
q2(k2)=(qbloc*k2).*(k2>=1&k2<=22);
Sx2(k2)=quad(f,Ri,Re)*quad(a,q1(k2),q2(k2));
Ac2(k2)=(q2(k2)-q1(k2)).*(Re^2-Ri^2)/2;
xg2(k2)=Sy2(k2)./Ac2(k2);
g12=atan((yg2(k2)-yc12)./(xg2(k2)-xc12));
end
Il risultato è composto da 14 vettori (tanti quanti k2), è possibile creare una matrice che abbia per righe questi vettori?
Mi servirebbe un modo per avere un solo oggetto con cui lavorare...Grazie!
Risposte
Ciao e benvenuto/a nel forum 
Allora non si capisce granché nel codice, comunque ho capito la tua idea e certo che si può fare,
esempio:
for i=1:N
x(i)=*codice*;
end
vettore=x';
così facendo ad ogni passo del ciclo for vai a riempire la i-esima componente di x con il risultato del codice (ovviamente se vuoi che nella i-esima casella ci vada un vettore dovrai fare questo gioco con due indici diversi, quindi due for al limite); ti ho messo anche il trasposto perché come ho scritto io il codice ti viene un vettore colonna e non riga.

Allora non si capisce granché nel codice, comunque ho capito la tua idea e certo che si può fare,
esempio:
for i=1:N
x(i)=*codice*;
end
vettore=x';
così facendo ad ogni passo del ciclo for vai a riempire la i-esima componente di x con il risultato del codice (ovviamente se vuoi che nella i-esima casella ci vada un vettore dovrai fare questo gioco con due indici diversi, quindi due for al limite); ti ho messo anche il trasposto perché come ho scritto io il codice ti viene un vettore colonna e non riga.
Innanzitutto grazie per la risposta veloce...però mi sfugge il modo per fare in modo che nella i-esima casella ci vada un vettore, potresti farmi un esempio con i due cicli for?
Il fatto è che nel mio codice ottengo 14 vettori che sono g12, vorrei invece che g12 fosse una matrice.Spero di comprendere da un esempio
Grazie per la pazienza!
Il fatto è che nel mio codice ottengo 14 vettori che sono g12, vorrei invece che g12 fosse una matrice.Spero di comprendere da un esempio

Grazie per la pazienza!
Cerco di scriverti un esempio veloce così su due piedi:
il risultato è :
$X=(( 2 , 4 , 6 ),( 4 , 8 , 12 ),( 6 , 12 , 18 ) )$
Praticamente il ciclo più esterno fissa la riga, mentre il ciclo interno col k scrive le colonne.
Spero di averti passato l'idea di come si ragiona, questo esempio non devi prenderlo alla lettera
for i=1:3 for k=1:3 X(i,k)=2*i*k end end
il risultato è :
$X=(( 2 , 4 , 6 ),( 4 , 8 , 12 ),( 6 , 12 , 18 ) )$
Praticamente il ciclo più esterno fissa la riga, mentre il ciclo interno col k scrive le colonne.
Spero di averti passato l'idea di come si ragiona, questo esempio non devi prenderlo alla lettera

Ma quando si crea una matrice con un ciclo for, secondo voi è bene sempre inizializzarla con valori zero prima del ciclo oppure è un passaggio superfluo?
Sarebbe meglio di sì in modo da allocare la memoria una singola volta all'inizio. Molti altri linguaggi scientifici non permettono in effetti di ingrandire una matrice in quel modo.
Grazie! @apatriarca sei sempre di grandissimo aiuto, sei un punto di riferimento per me!