Matlab: Esercizio con metodo di Eulero

di il
4 risposte

Matlab: Esercizio con metodo di Eulero

Salve ragazzi, da poco ho iniziato a programmare e riscontro un problema con la risoluzione di queste due equazioni differenziali per il calcolo delle funzioni 'V' e 'gamma' in funzione di 'H'. Se può servire il file 'USSA76' è composto da n=176 righe e 6 colonne.
Sarei felice se qualcuno potesse aiutarmi.
L'errore che persiste è il seguente:

Unable to perform assignment because the left and right sides have a different number of elements.
Error in Rientro_2 (line 56)
V(i+1)=V(i)+(((0.5*rho(i)*V(i))/(sin(gamma(i))))*B - g(i)/V(i))*Delta_H;

Mentre lo script è il seguente:

USSA76=importdata('USSA76.dat',',');
H=(USSA76.data(:,1))*1000; % [m]
g=USSA76.data(:,2); % [m/s^2]
T=USSA76.data(:,3); % [K]
rho=USSA76.data(:,4); % [Kg/m^3]
P=USSA76.data(:,5); % [K/Kmol]
lambda=USSA76.data(:,6); % [m]
R_0=6378000;
n=length(H);
V(1)=7500; % [m/s] valore iniziale velocità
gamma(1)=convang(1.5,'deg','rad'); %valore iniziale angolo
for i=1:(n-1)
Delta_H=H(i+1)-H(i);
R=R_0+H(i);
V(i+1)=V(i)+(((0.5*rho(i)*V(i))/(sin(gamma(i))))*B - g(i)/V(i))*Delta_H;
gamma(i+1)=gamma(i)*+(1/(R*(sin(gamma(i)))) ...
-((g(i)/(V(i)^2))*(1/(tan(gamma(i))))))*Delta_H;
end
gamma_deg=convang(gamma,'rad','deg'); %[deg]
figure(1)
plot(V,(H/1000),'k-','Linewidth',1.15)
figure(2)
plot(gamma_deg,(H/1000),'k-','Linewidth',1.15)

4 Risposte

  • Re: Matlab: Esercizio con metodo di Eulero

    Non hai pubblicato i dati di input contenuti nel file "USSA76.dat'" o, comunque un esempio significativo.
    Nella porzione di script che hai pubblicato non è definita la variabile B[/]

    Per queste ragioni non è possibile eseguire lo script.
    Assumendo che, solo per eseguire lo script i dati di input possano essere costituiti da una matrice (176 x 6) di numeri random, se la variabile "B" è una scalare il messaggio di errore non viene generato e l'istruzione

    V(i+1)=V(i)+(((0.5*rho(i)*V(i))/(sin(gamma(i))))*B - g(i)/V(i))*Delta_H;
    viene eseguita correttamente.
    Questo fa pensare che la variabile "B" sia un vettore od una matrice, ma dal momento che nel codice non è definita non è possibile verificarlo.

    Verifica la definizione od il calcolo della variabile "B"-
  • Re: Matlab: Esercizio con metodo di Eulero

    La variabile B è uno scalare e qui per mio errore non è stata riportata, ma nel codice che ho eseguito è presente. Inoltre il file importato è stato letto correttamente perché nel workspace è presente. Quale altra può essere la causa dell' errore?
  • Re: Matlab: Esercizio con metodo di Eulero

    Come scritto nella precedente risposta, se B è uno scalare, il codice viene eseguito senza errori usando come input una matrice (176 x 6) di numeri random al posto di quelli letti dal file di input (che no è disponibile).

    Il messaggio di errore che ricevi sembra abbastanza chiaro: il numero degli elementi a sinistra del segno "=" è diverso da quello a destra.
    Due cose:
    il messaggio di errore non sembra però il messaggio standard che si riceve quando si cerca di assegnare un vettore ad uno scalare
    nel codice crei la variabile "gamma": gamma è una funzione di MatLab; bisognerebbe sempre evitare di usare come nome delle variabili, i nomi delle funzioni di MatLab.
    Per verificare se il nome che intendi dare ad una variabile è quelle di una funzione od un termine riservato, puoi usare, nella command window, il comando "which"; ad esempio:
    
    which gamma
    
    Prova a cambiare il nome della variabile "gamma".

    A parte questo non c'è altro da fare che eseguire l codice in modalità debug inserendo un break point sulla riga alla quale viene generato il messaggio di errore e verificare tutti gli elementi dell'istruzione.
  • Re: Matlab: Esercizio con metodo di Eulero

    Grazie mille, ho risolto alla fine. C'era un errore nella definizione del valore di B: nel suo calcolo ho inserito un valore vettoriale piuttosto che uno scalare e quindi mi è venuto un valore vettoriale.
Devi accedere o registrarti per scrivere nel forum
4 risposte