Equazioni differenziali a coefficienti non costanti

di il
473 risposte

473 Risposte - Pagina 13

  • Re: Equazioni differenziali a coefficienti non costanti

    Lunedì lo provo...
  • Re: Equazioni differenziali a coefficienti non costanti

    Una domanda: in una struttura tipo quella che ho fatto nello script, se voglio aggiungere dati ad un campo come faccio?

    Mi spiego meglio: prendo la particella, le faccio parcorrere un certo cammino risolvende al solito le equazioni differenziali, e poi i dati sul nuovo percorso li voglio andare ad aggiungere ai precendenti, scrivendoli nella struttura subito dopo, in sequenza, in modo che i campi "traiettoria" e velocità contengano tutti i dati del primo e del secondo percorso.
  • Re: Equazioni differenziali a coefficienti non costanti

    Vuoi modificare la matrice traiettoria, ad esempio aggiungendo colonne?
    In questo caso devi fare come se fosse una matrice normale. ad esempio, se vuoi aggiungere la quarta colonna:
    Particella(1).traiettoria(:,4)=[2 2];
  • Re: Equazioni differenziali a coefficienti non costanti

    Ok.

    Poi un consiglio.
    Questo ultimo script dovrebbe collimare le particelle che poi l'altro, quello con cui è partita questa discussione, deve trasportare.
    Mi conviene unificarli in un unico script o usare il secondo come una funzione che è richiamata dal main che fa solo il trasporto?
  • Re: Equazioni differenziali a coefficienti non costanti

    Credo che la "convenienza" sia solo dal punto di vista della lettura del codice.
    Ma è una scelta "personale" e dipende anche da quanto altro codice devi scrivere. Se hai finito secondo me può anche andare bene così.
    Magari la funzione avrebbe anche troppi ingressi e sarebbe meno leggibile del codice in un unico script.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Vuoi modificare la matrice traiettoria, ad esempio aggiungendo colonne?
    In questo caso devi fare come se fosse una matrice normale. ad esempio, se vuoi aggiungere la quarta colonna:
    Particella(1).traiettoria(:,4)=[2 2];
    Io dovrei aggiungere righe a partire dall'ultima, solo che in linea di principio non so qual'è ultima riga e non so quante sono quelle che voglio aggiungere.
    Se voglio aggiungere una matrice A(?,6) alla traiettoria che è una matrice traiettoria(?,6)
    e gli dico sempre
    Particella(i).traiettoria(end, : ) = A;
    non sovrascrivo l'ultima riga?
    dovrei dirgli end+1 o si incazza?
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Credo che la "convenienza" sia solo dal punto di vista della lettura del codice.
    Ma è una scelta "personale" e dipende anche da quanto altro codice devi scrivere. Se hai finito secondo me può anche andare bene così.
    Magari la funzione avrebbe anche troppi ingressi e sarebbe meno leggibile del codice in un unico script.

    Ok, faccio un unico script.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Vuoi modificare la matrice traiettoria, ad esempio aggiungendo colonne?
    In questo caso devi fare come se fosse una matrice normale. ad esempio, se vuoi aggiungere la quarta colonna:
    Particella(1).traiettoria(:,4)=[2 2];

    Io dovrei aggiungere righe a partire dall'ultima, solo che in linea di principio non so qual'è ultima riga e non so quante sono quelle che voglio aggiungere.
    Se voglio aggiungere una matrice A(?,6) alla traiettoria che è una matrice traiettoria(?,6)
    e gli dico sempre
    Particella(i).traiettoria(end, : ) = A;
    non sovrascrivo l'ultima riga?
  • Re: Equazioni differenziali a coefficienti non costanti

    End+1?
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    end+1?

    Che ne so... non ti seccare anche tu, ti prego...
    come gli dico di aggiungere le nuove righe subito dopo l'ultima senza fargli sovrascrivere nulla...
  • Re: Equazioni differenziali a coefficienti non costanti

    Non mi sono seccata, era una proposta.
    a=1:10;
    a(end+1)=11;
  • Re: Equazioni differenziali a coefficienti non costanti

    Si può usare (end+1)? O_o

    Io pensavo di aver detto una fesseria (infatti lo avevo scritto ma poi l'ho cancellato per vergona)... e non ho voluto provare perchè ormai quando mi dice
    ??? index execedes matrix dimension
    mi viene da piangere. Me lo sogno la notta che mi insegue e me lo urla...
  • Re: Equazioni differenziali a coefficienti non costanti

    Fammi vedere la riga di codice dove lo usi...
  • Re: Equazioni differenziali a coefficienti non costanti

    
    for i=1:p   
        %Campi nulli
        B=[0 0 0]'; 
        E=[0 0 0]';
        
        % v0 = [0 0 v_H]';  %initial velocity column vector
        % r0 = [0 0 0]'; %initial position of particle column vector 
        % y0 = [r0; v0]; %Concatena i due vettori colonna r0 e v0 e crea il vettore 
                         %colonna delle condizioni iniziali
        
        y0(i,:) = [Part_trasp(i).traiettoria(end,:),Part_trasp(i).velocita(end,:)];            
        %%%Risolvo il moto
        f = @(t,y1) [y1(4:6); (q_over_m).*cross(y1(4:6),B)+(q_over_m).*E]; 
                                                 % the expression [y(4:6); (q/m)*cross(y(4:6),B)]
                                                 % combines two vectors of length 3 to make a vector of 
                                                 % length 6(as long as y is a column vector).
                                                 
        options=odeset('RelTol',1e-7,'Events',@(t,y)Event_Stop_1(t,y,Deriva1));   % opzione per risoluzione equazione differenziale:
                    %set precisione calcolo---% Sintassi per utilizzare Event_Stop con Deriva1 come variabile in input
        [t,y1] = ode23t(f,tspan,y0(i,:),options);
           
        %traiettoria= y1; % aggiorno la traiettoria
        
        
    end
    
    Prima dell'end vorrei che aggiungesse alla traiettoria tutte le righe delle prime tre colonne di y1 e alla velocità tutte le righe delle altre 3 colonne di y1

    gli ho detto:
    Part_trasp(i).traiettoria(end+1,1:3)=y1(:,1:3);

    e lui si mussia e dice:
    ??? Subscripted assignment dimension mismatch.

    P.S.: mussia = storce il muso, si incazza...
  • Re: Equazioni differenziali a coefficienti non costanti

    Non mi gira il codice perchè mi mancano dei pezzi, comunque immagino che il problema sia che y1 non ha una sola riga... magari ne ha due... quindi devi scrivere così (o qualcosa di simile a seconda del numero di righe):
    Part_trasp(i).traiettoria(end+1:end+2,1:3)=y1(:,1:3);
Devi accedere o registrarti per scrivere nel forum
473 risposte