[MatLab] help ciclo "for"

mepg2000
ciao a tutti,
avrei bisogno di una mano per creare un ciclo "for" di questa equazione

potreste darmi una mano?
Grazie

Risposte
apatriarca
Ciao e benvenuto/a nel forum. Potresti iniziare a scrivere un ciclo for che generi valori di m nell'intervallo [1, M-1]. Hai idea di come farlo? Il resto del codice è praticamente solo una copiatura di quella espressione nel codice. C'è solo da considerare il caso particolare di \(m = 1\) perché se \(r\) è un vettore allora \(r^2_{m-1}\) non sarebbe definito (\(0\) non è un indice valido per un vettore).

mepg2000
ciao, purtroppo non sono molto pratico.
Tralasciando l'argomento di tesi a cui sto lavorando, ho cominciato a scrivere questo:
R=Dp/2;
r1=0;
for j=1:jmax-1
   r2=j*Dk;
   Z=r2*R;
   c=2*pi;
   h=1;
   Z=r2*R;
   j0=besselj(0,Z);
   j1=besselj(1,Z);
   a1=h/4;
   a2=(r2^2)-((2*r1)*(r2-r1))-(r1^2);
   I=a1*a2;
   Ps2(j)=c*j0*I;      % soluzione numerica (ring load)
   Pb2(j)=c*j1*I;      % soluzione numerica (disk load)    
   r1=r2;
end

praticamente sto lavorando alla risoluzione numerica della trasformata diretta di Hankel, relativa ad un carico distribuito su un anello e poi su un disco (pali di fondazione).
ho chiamato "m"="j", "M"="jmax" e sto lavorando per incrementi Dk=0.1
ho trovato questa soluzione https://documents.epfl.ch/users/l/le/leuteneg/www/MATLABToolbox/HankelTransform.html, ma non riesco trasferire in matlab "Im" :(

apatriarca
Non ho capito l'ultima frase.. Cosa intendi con "lm"? Che cosa non funziona del codice? È più complicato di quello che hai postato sopra e non ho ancora avuto il tempo di guardare il link con attenzione.

mepg2000
allora, io devo implementare in matlab questa sommatoria, in cui compare I[size=80]m[/size] (I pedice m)
https://sites.google.com/site/alanritterm9f/home/Immagine_.png
in cui J[size=80]n[/size] è la funzione di Bessel che matlab calcola direttamente.
Per fare la sommatoria faccio un ciclo "for" e nel codice che ho abbozzato, ho usato il pedice "j" anzichè "m".
il tutto lo faccio variare ad incrementi "Dk" che assegno io..
Sto andando avanti con il codice e per ora ho scritto questo:
function [Ps2] = HankelRL_2 (Dp, jmax, Dk);
R=Dp/2;
c=2*pi;
r1=0;
for j=0:jmax
   r2=j*Dk;
   r3=(j+1)*Dk;
   h=1;
   if r2==0, I=(h/4)*((r3-r2)^2); end
   if r2==jmax*Dk, I=(h/4)*((2*r2*r1)-r1); end
   Z=r2*R;
   t=j+1;
   j0=besselj(0,Z);
   a1=h/4;
   a2=(r3^2)-((2*r2)*(r3-r1))-(r1^2);
   I=a1*a2;
   Ps2(t)=c*j0*I;  
   r1=r2;
   r2=r3;
end

Il problema è che il ciclo "for" non funziona perchè si ferma al primo ciclo (mi restituisce una retta orizzontale passante per 0)
Grazie

mepg2000
risolto così:
function [Ps2] = HankelRL_2 (Dp, jmax, Dk);
R=Dp/2;     % raggio [m]
r0=0;               % r(j-1)
for j=0:jmax 
   r1=j*Dk;         % r(j)
   r2=(j+1)*Dk;     % r(j+1)
   Z=r1*R;   
   ps=1/((2*pi)*((r2-r1)^2));       
   a=(r2^2)-((2*r1)*(r2-r0))-(r0^2);
   Is=ps*a;
   j0=besselj(0,Z);
   t=j+1;
   Ps2(t)=j0*Is;
   r0=r2;
end

Grazie a tutti.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.