[MatLab] help ciclo "for"
ciao a tutti,
avrei bisogno di una mano per creare un ciclo "for" di questa equazione

potreste darmi una mano?
Grazie
avrei bisogno di una mano per creare un ciclo "for" di questa equazione

potreste darmi una mano?
Grazie
Risposte
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).
ciao, purtroppo non sono molto pratico.
Tralasciando l'argomento di tesi a cui sto lavorando, ho cominciato a scrivere questo:
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"
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"

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.
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:
Il problema è che il ciclo "for" non funziona perchè si ferma al primo ciclo (mi restituisce una retta orizzontale passante per 0)
Grazie
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
risolto così:
Grazie a tutti.
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.