Correzione programmino matlab(help me!!)

di il
11 risposte

Correzione programmino matlab(help me!!)

Salve! Chiedo la cortesia di correggere il seguente programmino(che non funziona ); specifico che sono alle prime armi ed è il mio primo lavoro con il matlab! vi specifico dove si ferma:
clear all
clc
% Condizioni iniziali osservate:
% Coordinate del vettore posizione iniziale
x0=2;
y0=2;
z0=0;
% Coordinate del vettore velocità iniziale
X0=3;
Y0=4;
Z0=1;
r0=sqrt((x0)^(2)+(y0)^(2)+(z0)^(2));
R0=sqrt((X0)^(2)+(Y0)^(2)+(Z0)^(2));
% Calcolo di i(inclinazione dell'orbità) e w(longitudine del nodo ascendente):
C1=(y0*Z0)-(z0*Y0);
C2=(z0*X0)-(x0*Z0);
C3=(x0*Y0)-(y0*X0);
C=((C1)^(2)+(C2)^(2)+(C3)^(2));
i=acos(C3/C);
w=atan(-C1/C2);
% Dall'integrale della forza viva ricavo il semiasse maggiore a:
K^2=6.7000e-008;
M=2.0000e+033;
a=(r0/2)-(((K)^(2)*M)/(R0)^(2));
% Calcolo dell'eccentricità e:
e=(1-((C)^(2)/a*M*(K)^(2)));
% Calcolo di u0=W(argomento al perigeo)-v0(anomalia):
Rx(-i)=[1 0 0; 0 cos(i) sen(i); 0 -sen(i) cos(i)]; <----------------------SI FERMA QUI..... PERCHè???????
Rz(-w)=[cos(w) sen(w) 0; -sen(w) cos(w) 0; 0 0 1];
[X Y Z]= Rx(-i)*Rz(-w)*[x0 y0 z0];
uo=tan(Y/X);
% Calcolo di v0:
v0=acos((a*(1-(e)^(2)))-r0/e*r0);
% W(argomento al perigeo) vale:
W=u0-v0;
% Considerando con t0 il passaggio del corpo al perigeo risulta:
t0=0;
end
disp('I parametri orbitali sono')
disp(a)
disp(e)
disp(i)
disp(w)
disp(W)
disp(t0)

Quali sono gli errori!!! Grazie anticipatamente!!!

11 Risposte

  • Re: Correzione programmino matlab(help me!!)

    Controlla che i valori di "i" e "w" siano negativi perchè se sono positivi non può funzionare! Non puoi indicizzare un vettore con un indice negativo!

    X(1)=4 -->OK
    X(-1)=4 --> Errore
  • Re: Correzione programmino matlab(help me!!)

    [quote="R.F.McGyver"]Controlla che i valori di "i" e "w" siano negativi perchè se sono positivi non può funzionare! Non puoi indicizzare un vettore con un indice negativo!

    Grazie mille per la tua risposta!!!!
  • Re: Correzione programmino matlab(help me!!)

    Di niente...
  • Re: Correzione programmino matlab(help me!!)

    Sono felicissima! il mio primo programmino funziona!!!
    ma.....ci sarebbe un altro piccolo problemino: come devo fare affinchè il matlal quando effettua questa divisione mi dia semplicemente zero?
    -G =
    1.0e+013 *

    1.4957
    0.0000
    -0.0000

    - G(2)/G(1)

    ans =

    5.8281e-017
    Mi scuso anticipatamente per la mia ignoranza!
  • Re: Correzione programmino matlab(help me!!)

    Perchè probabilmente G(2) non è zero... fai così, digita nel command window:
    format long
    premi invio e poi digita
    G(2)
    e ripremi invio. Dovrebbe essere qualcosa di molto piccolo ma diverso da zero!

    P.S. per tornare alla visualizzazione classica poi digita di nuovo
    format short
  • Re: Correzione programmino matlab(help me!!)

    Mi sono spiegata male....so che non è zero ma c'e un modo per troncare o arrotondare ad esempio alla quinta cifra?
    Grazie mille McGyver per le tue risposte.
  • Re: Correzione programmino matlab(help me!!)

    Per arrotondare ad un determinato numero di cifre decimali si usa la funzione digits e vpa:

    a=1.00001;
    digits(3)
    y=vpa(a)

    restituisce 1.00 cioè le prime 3 cifre del numero. Però mi sembra che se il numero iniziale sia 0 la cosa non vale, prova e fammi sapere! In caso non funziona puoi provare con la funzione fi che è un pò più complicata da usare. Può essere che ci siano altri modi, ma al momento non me ne vengono in mente!
  • Re: Correzione programmino matlab(help me!!)

    Avevi ragione, purtroppo per lo zero non vale!!!!
    Come potrei provare la funzione fi di cui hai parlato???
    Non so se faccia qualche differenza ma sto utilizzando la versione 5.2.
    Grazie ancora per il tuo aiuto!!!
  • Re: Correzione programmino matlab(help me!!)

    Allora per il comando fi digita sul command window:
    help fi
    e segui le istruzioni riportate, anche se mi sembra che la versione che usi tu non supporta tale comando. Comunque non credo sia molto consigliato nel tuo caso usare questa funzione, io piuttosto proverei un'altra cosa! Crea un file con il codice che ti scrivo qui di seguito e salvalo così com'è senza cambiare niente nella tua cartella di lavoro con il nome trunc.m
    function numero_tronc = trunc(num_iniziale, cifre_da_visualizzare)

    digits(cifre_da_visualizzare);

    if abs(num_iniziale)<1
    if cifre_da_visualizzare > 5
    format long
    numero_tronc=vpa(num_iniziale+1)-1;
    else format short
    numero_tronc=vpa(num_iniziale+1)-1;
    end
    else
    numero_tronc=vpa(num_iniziale);
    end
    numero_tronc=double(numero_tronc);
    format short
    A questo punto dal command window fai qualche prova e vedi se funziona. In pratica ho creato una funzione che fa al caso tuo (magari esiste già, ma non la conosco). Per richiamarla basta inserire il file trunc.m nella cartella di lavoro (cioè dove salvi i file matlab che crei tu).
    Per provarla scrivi nel command window trunc(numero, cifre_da visualizzare) e dovrebbe funzionare sia per valori maggiori o minori di 1 in modulo. Per esempio:
    trunc(1.2345, 3)
    restituisce 1.2300 (ricorda che 3 è il numero di cifre totale e non solo quello decimale). Oppure il comando
    trunc(0.12345,4)
    restituisce 0.1230. Oltre la quarta cifra decimale l'ultimo numero visualizzato sarà arrotondato... Mi raccomando per usare questa funzione ricorda che il file da te creato deve essere presente nella cartella di lavoro, altrimenti non funziona. Spero ti posso servire!

    Se ci sono problemi fammi sapere!
  • Re: Correzione programmino matlab(help me!!)

    R.F.McGyver ha scritto:


    Allora per il comando fi digita sul command window:
    help fi
    Avevi ragione la mia versione è troppo vecchia!!!
    Cmq grazie al tuo aiuto ho concluso quel lavoro!!! Ti meriti un applauso
    Grazie mille
  • Re: Correzione programmino matlab(help me!!)

    Beh risolvendo il tuo problema mi tengo allenato pure io!
Devi accedere o registrarti per scrivere nel forum
11 risposte