Equazioni differenziali a coefficienti non costanti

di il
473 risposte

473 Risposte - Pagina 28

  • Re: Equazioni differenziali a coefficienti non costanti

    Al posto del repmat si può fare anche così, che forse è anche più carino:
    bsxfun(@times,matrice,vettore);
  • Re: Equazioni differenziali a coefficienti non costanti

    Il ciclo s=1:stati mi serve per dare energia e massa alle particelle con diversi stati di carica...
    Hai ragione è il primo pezzo che è molto lento, il resto no, ora vedo di sistemare.
    Il problema è che ste badduzze così non passano...
  • Re: Equazioni differenziali a coefficienti non costanti

    Tu dici di portare le istruzioni

    K_ion=normrnd(Ein_s,Ein_s/10);
    Etot_ion(i)=K_ion+((m_ions*uma1)/uma); % ho tutto in MeV
    betasquare_ion(i)=1-(((m_ions*uma1)/(uma*Etot_ion(i)))^2);
    v_ion(i)=sqrt(betasquare_ion(i)*c^2);

    fuori dal ciclo interno, quindi dovrei scrivere
    
    for s=1:stati
           Ein_s=s*Ein;
           m_ions=m_ion-(s*m_e);
           K_ion(1,n)=normrnd(Ein_s,Ein_s/10);
             Etot_ion=K_ion.+((m_ions*uma1)/uma);  
             betasquare_ion=1-(((m_ions*uma1)/(uma.*Etot_ion(i))).^2);
             v_ion=sqrt(betasquare_ion.*c^2);
    for i=1:n
    ...
    end
    end
    
    giusto?
  • Re: Equazioni differenziali a coefficienti non costanti

    Esatto. devi togliere tutti gli indici (i), (1,n).
    E porti fuori anche tutta la parte sotto fino all'ode.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    E porti fuori anche tutta la parte sotto fino all'ode.
    Sì, per gli indici hai ragione, (i) l'avevo dimenticato, (1,n) non lo so perchè l'ho messo...

    Per il resto aspetta un attimo. Il codice ora è cambiato, dentro al ciclo interno c'è tutta la storia degli angoli...
    
    for s=1:stati
        %Ein_s=Ein;
        Ein_s=s*Ein;
           m_ions=m_ion-(s*m_e);
    
           K_ion=normrnd(Ein_s,Ein_s/10);
             Etot_ion=K_ion+((m_ions*uma1)/uma); 
             betasquare_ion=1-(((m_ions*uma1)/(uma.*Etot_ion)).^2);
             v_ion=sqrt(betasquare_ion.*c^2);
             
             
       for i=1:n     
    
             v0=feval(@God_Speed,n,ang_spread,v_ion);
             
             
              r0=zeros(n,3);      %initial position
    
              y_sorgente=[r0,v0];  %vector of initial condition
              
              tspan=[0,100];
                        
              O=[0 0 0]';
              %%%Risolvo il moto
              f = @(t,ys) [ys(4:6); O];
              % the expression [y(4:6); O]
              % 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,ys)Event_Stop_Sorgente(t,ys,Pinhole1));   % opzione per risoluzione equazione differenziale:
              %set precisione calcolo---% Sintassi per utilizzare Event_Stop con Pinhole1 come variabile in input
              [t,ys] = ode23t(f,tspan,y_sorgente(i,:),options);
                        %oppure y_sorgente
              %decido quali particelle passano il pimo diaframma
              
         if (abs(ys(end,1)) <=r_pin1 && abs(ys(end,2))<=r_pin1) %%????? LA CONDIZIONE DEVE ESSERE && o || ??????
             
            %T(:,:,k)=ys;
                 Particella(k).ionizzazione=s;
                 Particella(k).stato_di_carica=s*q;
                 Particella(k).massa=m_ions;
                 Particella(k).q_over_m= s*q/m_ions;
                 Particella(k).energia_iniziale=Ein_s;
                 Particella(k).traiettoria=ys(:,1:3);
                 Particella(k).velocita=ys(:,4:6);
                 k=k+1;
          end
      end
               
    end
     
  • Re: Equazioni differenziali a coefficienti non costanti

    Posso portare fuori anche

    v0=feval(@God_Speed,n,ang_spread,v_ion);

    r0=zeros(n,3); %initial position

    y_sorgente=[r0,v0]; %vector of initial condition
  • Re: Equazioni differenziali a coefficienti non costanti

    In questo modo però K_ion è un numero e v_ion pure, quindi tutte le particelle con stato di carica s avranno la stessa velocità...
    A me servirebbe un vettore K_ion(1,n) (ecco perchè lo avevo messo l'indice, in modo che anche v_ion sia un vettore (1,n) con elementi tutti diversi.
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    in questo modo però K_ion è un numero e v_ion pure, quindi tutte le particelle con stato di carica s avranno la stessa velocità...
    A me servirebbe un vettore K_ion(1,n) (ecco perchè lo avevo messo l'indice, in modo che anche v_ion sia un vettore (1,n) con elementi tutti diversi.

    ho detto una fesseria...
    Mi si incazza la funzione invece...
  • Re: Equazioni differenziali a coefficienti non costanti

    Se tu scrivi
    K_ion(1:n)=normrnd(Ein_s,Ein_s/10);
    ti fa un vettore K_ion di n elementi tutti uguali.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Se tu scrivi
    K_ion(1:n)=normrnd(Ein_s,Ein_s/10);
    ti fa un vettore K_ion di n elementi tutti uguali.
    e allora che devo fare?
    ogni elemento di K_ion deve essere estratto random dalla distribuzione...

    gli dico K_ion=normrnd(Ein_s,Ein_s/10,n,1)?
  • Re: Equazioni differenziali a coefficienti non costanti

    Dovrebbe essere così:
    n2 = normrnd(Ein_s,Ein_s/10,[n 1])
  • Re: Equazioni differenziali a coefficienti non costanti

    Sembra ragionevole quello che fa se dico:

    K_ion=normrnd(Ein_s,Ein_s/10,n,1);
    Etot_ion=K_ion+((m_ions*uma1)/uma);
    betasquare_ion=1-(((m_ions*uma1)./(uma.*Etot_ion)).^2);
    v_ion=sqrt(betasquare_ion.*c^2);

    a questo punto posso davvero portare fuori la storia delle proiezioni e lasciare nel ciclo solo l'ode.
    Quindi dovrebbe essere:
    
    for s=1:stati
        
        %Ein_s=Ein;
        Ein_s=s*Ein;
        m_ions=m_ion-(s*m_e);
    
           K_ion=normrnd(Ein_s,Ein_s/10,n,1);
             Etot_ion=K_ion+((m_ions*uma1)/uma); 
             betasquare_ion=1-(((m_ions*uma1)./(uma.*Etot_ion)).^2);
             v_ion=sqrt(betasquare_ion.*c^2);
             
              v0=feval(@God_Speed,n,ang_spread,v_ion);
              r0=zeros(n,3);      %initial position
              %oppure r0=zeros(1,3)
              y_sorgente=[r0,v0];  %vector of initial condition
              
       for i=1:n     
    ...
    end
    end
    
    giusto?
    ora vedo se è tanto più veloce di prima
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    dovrebbe essere così:
    n2 = normrnd(Ein_s,Ein_s/10,[n 1])
    l'help dice:

    help ha scritto:


    R = normrnd(mu,sigma,m,n) generates random numbers from the normal distribution with mean parameter mu and standard deviation parameter sigma, where scalars m and n are the row and column dimensions of R.
    quindi per una volta horagione anche io!
    ammettilo, Ammettilo, AMMEttilo, AMMETTIlo, AMMETTILOOOOOOO!!!!
    :D
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:



    ora vedo se è tanto più veloce di prima
    effettivamente ora è una scheggia, fa tutto in un attimo, anche perchè palline ne fa passare 2 su 800....
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    giug ha scritto:


    dovrebbe essere così:
    n2 = normrnd(Ein_s,Ein_s/10,[n 1])
    l'help dice:

    help ha scritto:


    R = normrnd(mu,sigma,m,n) generates random numbers from the normal distribution with mean parameter mu and standard deviation parameter sigma, where scalars m and n are the row and column dimensions of R.
    quindi per una volta horagione anche io!
    ammettilo, Ammettilo, AMMEttilo, AMMETTIlo, AMMETTILOOOOOOO!!!!
    :D
    E' equivalente... io ho preso spunto dal secondo esempio (sempre nella stessa pagina dell'help.
    Pensavo che avessi fatto la domanda perché avevi visto che non funzionava, non perché cercavi conferma ancora prima di provare...
Devi accedere o registrarti per scrivere nel forum
473 risposte