Equazioni differenziali a coefficienti non costanti

di Anonimizzato9724 il
473 risposte

473 Risposte - Pagina 26

  • giug ha scritto:


    se non sbaglio quelle due condizioni le devi escludere, quindi devono essere diversi da 0, non uguali.
    Hai ragione, tanto per cambiare... il diverso lo vuole così: ~=?
  • 1keenan ha scritto:


    giug ha scritto:


    se non sbaglio quelle due condizioni le devi escludere, quindi devono essere diversi da 0, non uguali.
    Hai ragione, tanto per cambiare... il diverso lo vuole così: ~=?
    sembra di sì, se gli dico:
    find(v(:,:)==0)

    lui risponde:
    ans =

    Empty matrix: 0-by-1
  • Sì sì, il diverso è così.
  • Diciamo che io ora sta cosa la voglio usare come una funzione esterna per calcolare le componenti della velocità.
    La funzione accetterebbe in input solo il modulo di v che lo calcolo dal main e mi restituisce v_x, v_y, v_z.
    Però io ho 52000 e cocci puntini ma non così tante particelle, allora dò in input anche il numero di particelle.
    Poi è inutile che lui usa i puntini più distanti dall'asse z perchè saranno particelle tutte sparate a popo, quindi voglio dirgli anche quali versori usare, e dargli quindi in input lo spread angolare. Questo lo posso fare passandogli un numero, che chiamo z e gli dico di usare i versori che hanno versore(:,3) compresa tra 1 e z che gli passo.
    quindi l'intestazione della funzione dovrebbe essere:
    
    function [v_x, v_y, v_z]=Event_Stop_1(n,z, v_ion)
    
    e ancora non abbiamo finito.

    a questo punto lui dovrebbe estrarre dei puntini a caso da:

    versore_selezionato = find(versore(:,3)<=1 && versore(:,3)>=z)

    n puntini a caso e usare le coordinate per calcolare le componenti della velocità.
    Quindi devo capire come estrarre n riga a caso da versore_selezionato...
  • Puoi usare randperm per creare un vettore di numeri interi da 1 al numero di righe di versore_selezionato. E poi usi questi valori per indicizzare il versore_selezionato (prendendone il numero che ti serve).
  • Sì, ho trovato un esempio: http://www.mathworks.com/matlabcentral/newsreader/view_thread/165114

    è meglio procedere per gradi.

    Diciamo che dico:
    z=0.6
    e voglio prendere tutti i puntini che hanno v(:,3) compresa tra 1 e z.

    allora gli dico:
    vers=find(v(:,3)>=z);
    vers_select=versore(vers,:);

    ma qua si incazza.. che sbaglio?
  • 1keenan ha scritto:


    allora gli dico:
    vers=find(v(:,3)>=z);
    vers_select=versore(vers,:);

    ma qua si incazza.. che sbaglio?
    ho sbagliato, devo mettere versore al posto di v

    vers=find(versore(:,3)>=z);
    vers_select=versore(vers,:);
  • Ok, comunque, se matlab non è d'accordo, scrivimi anche l'errore che faccio prima a capire dov'è il problema.
  • Ho sbagliato io, che mi sono incasinato con le variabili.

    creato vers_select, che è il vettore dei versori che mi interessano gli dico

    r = randperm(size(vers_select,1));

    e lui mi fa un vettore di numeri random.
    Ora come lo indicizzo vers_select prendendone i primi n=100, ad esempio
  • R(1:100) sono gli indici che ti interessano.
    quindi vers_select(r(1:100),:)
    (o qualcosa di simile, non ho matlab e non lo posso provare)
  • giug ha scritto:


    r(1:100) sono gli indici che ti interessano.
    quindi vers_select(r(1:100),:)
    (o qualcosa di simile, non ho matlab e non lo posso provare)
    come non hai matlab O_o? :p

    Comunque sì, giusto, fa il vettori dei versori che mi serve.
    DOmani lo sistemo con l'intestazione e lo passo al main.

    Grazie.
  • Non ho matlab qui, adesso...
  • giug ha scritto:


    Non ho matlab qui, adesso...
    avevo capito
  • Ma ammetto che mi piacerebbe una versione di matlab... da polso...
  • giug ha scritto:


    ma ammetto che mi piacerebbe una versione di matlab... da polso...
    O_o
Devi accedere o registrarti per scrivere nel forum
473 risposte