Equazioni differenziali a coefficienti non costanti

di il
473 risposte

473 Risposte - Pagina 24

  • Re: Equazioni differenziali a coefficienti non costanti

    Sì mi serve solo la superfice.

    Ora guardo anche io la funzine sphere.

    intanto ho fatto la nuvoletta cubica, mi dici se così va bene?
    
    A=-1; B=1;
     x=A+(B-A)*rand(100000,1);
    >> y=A+(B-A)*rand(100000,1);
    >> z=A+(B-A)*rand(100000,1);
    >> plot3(x,y,z,'.','MarkerSize',1)
    
  • Re: Equazioni differenziali a coefficienti non costanti

    Non mi piace vedere le righe tutte uguali... scriverei così:
    v=A+(B-A)*rand(100000,3);
    plot3(v(:,1),v(:,2),v(:,3),'.','MarkerSize',1)
    Comunque, non sono convinta che ti serva fare "fisicamente" questa nuvola cubica, comunque prosegui, magari mi sbaglio.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    non mi piace vedere le righe tutte uguali... scriverei così:
    v=A+(B-A)*rand(100000,3);
    plot3(v(:,1),v(:,2),v(:,3),'.','MarkerSize',1)
    Comunque, non sono convinta che ti serva fare "fisicamente" questa nuvola cubica, comunque prosegui, magari mi sbaglio.
    Bho? comincio a dubitarne anche io... però i puntini sembrano distribuiti uniformemente, intanto vediamo che succede.

    Per prendere i puntini dentro la sfera gli dico:
    
    for i=1:length(v)
     if v(i,1)^2+v(i,2)^2+v(i,3)^2<=1
       V(i,:)=v(i,:);
     end
    end
    
    o no?
    ancora devo vedere la funzione sphere, poi mi dimentico a mettere i ; e lui comincia a scrivere un mare di numeri e ci sta due ore a fare le cose.
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:



    Per prendere i puntini dentro la sfera gli dico:
    
    for i=1:length(v)
     if v(i,1)^2+v(i,2)^2+v(i,3)^2<=1
       V(i,:)=v(i,:);
     end
    end
    
    o no?
    Evidentemente no, perchè lui V lo fa lungo quanto v, se lo plotto fa la stessa cosa del plot di v.
    Però se gli dico:
    >>i = 20

    >> v(i,1)^2+v(i,2)^2+v(i,3)^2

    lui risponde:

    MatLAb ha scritto:


    ans =

    1.2518
    Ma se lo sa che v(20,:) è più grande di 1 perchè lo salva?
  • Re: Equazioni differenziali a coefficienti non costanti

    Lo so che la tentazione è quella di scrivere cicli for.... ma in questo caso non serve neanche l'if...
    Ti crei un vettore unico:
    d = v(:,1).^2 + v(:,2).^2 + v(:,3).^2;
    trovi le posizioni degli elementi del vettore che sono minori di 1:
    posizioni=find(d<=1);
    e ora puoi usare queste posizioni per andare a recuperare le righe di v che soddisfano la condizione:
    gli_elementi_di_v_che_soddisfano_la_condizione=v(posizioni,:)
    Così non fai cicli ed è tutto molto più veloce.
    Quando matlab gira e lo vuoi interrompere perché ci mette ore a farti vedere tutti i numeri, premi CTRL+C per bloccarlo.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Lo so che la tentazione è quella di scrivere cicli for.... ma in questo caso non serve neanche l'if...
    Ti crei un vettore unico:
    d = v(:,1).^2 + v(:,2).^2 + v(:,3).^2;
    trovi le posizioni degli elementi del vettore che sono minori di 1:
    posizioni=find(d<=1);
    e ora puoi usare queste posizioni per andare a recuperare le righe di v che soddisfano la condizione:
    gli_elementi_di_v_che_soddisfano_la_condizione=v(posizioni,:)
    Così non fai cicli ed è tutto molto più veloce.
    Quando matlab gira e lo vuoi interrompere perché ci mette ore a farti vedere tutti i numeri, premi CTRL+C per bloccarlo.
    poi gli dico
    
    plot3(condizione(:,1),condizione(:,2),condizione(:,3),'.','MarkerSize', 1)
    
    e lui fa la nuvoletta, che effettivamente non ha punti accumulati come quella fatta ieri plottando le coordinate sferiche dei punti, ti ricordi?
  • Re: Equazioni differenziali a coefficienti non costanti

    Beh, certo... stai facendo una cosa completamente diversa... hai prima definito un insieme di punti uniformemente distribuiti, poi hai scelto quelli che stavano all'interno della sfera... che continuano ad essere uniformemente distribuiti.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    poi hai scelto quelli che stavano all'interno della sfera... che continuano ad essere uniformemente distribuiti.
    Allora lo ammetti che quelli di prima non erano buoni!


    Pensavo: se voglio prendere solo la superfice, come dicevi tu ieri dovrei imporre una sorta di condizione di tolleranza e buttare altri punti... se invece li normalizzo questi puntini, quindi gli dico di dividere ogni componente di una riga di "condizione" per il modulo del punto non dovrei ottenere una sorta di guscio dove tutti i puntini interni sono schiacciati sulla superfice di una sfera... è come se mi calcolassi i versori, no?

    quindi gli dico:
    
    versore_condizione=condizione(i,:)/((condizione(i,1)^2+condizione(i,2)^2+condizione(i,3)^2)
    [code]
    giusto?
  • Re: Equazioni differenziali a coefficienti non costanti

    Mmm... eh?!?! non ti seguo...
    Io intendevo una cosa del genere:
    posizioni=find(d>0.99999 & d<1.00001);
    questo per trovare tutti i punti del cubo che stanno sulla superficie sferica.
    Ma sicuramente anche quello che hai scritto tu ha un senso... prova a rispiegarmelo...
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    quindi gli dico:
    
    versore_condizione=condizione(i,:)/((condizione(i,1)^2+condizione(i,2)^2+condizione(i,3)^2)
    [code]
    giusto?[/quote]
    
    
    non va bene questa cosa, non significa nulla.
    Intanto uso un ciclo, poi vedo di usare una sola istruzione.
  • Re: Equazioni differenziali a coefficienti non costanti

    Ah ecco...
    comunque te l'ho scritto sopra, secondo me devi solo cambiare la condizione.
  • Re: Equazioni differenziali a coefficienti non costanti

    giug ha scritto:


    Ah ecco...
    comunque te l'ho scritto sopra, secondo me devi solo cambiare la condizione.
    Se cambio la condizione trovo i punti sulla superfice e perdo quelli di dentro.
    Siccome non voglio perderli pensavo di normalizzarli, cioè divido ogni elemento di una riga di "condizione", per il modulo di quella riga.
    In questo modo dovrei trovare una superfice sferica che ha raggio pari al versore e tutti i punti dovrebbero essere schiacciati su questa superficie, quindi non elimino altri punti...

    Quindi gli dico così:
    
    modulo=condizione(:,1).^2+condizione(:,2).^2+condizione(:,3).^2;
    
    for i=1:length(condizione)
        versore(i,:)=condizione(i,:)./modulo(i);
    end
    
    sto cercando di capire come evitare il ciclo for.
  • Re: Equazioni differenziali a coefficienti non costanti

    1keenan ha scritto:


    sto cercando di capire come evitare il ciclo for.
    Se gli dico così:
    
    versore=[condizione(:,1)./modulo(:) condizione(:,2)./modulo(:) condizione(:,3)./modulo(:)] ;
    
    è giuto?
  • Re: Equazioni differenziali a coefficienti non costanti

    Continuo a non capire perché devi schiacciare i punti...
    comunque, a occhio, dovrebbe bastare così:
    versore=condizione./modulo;
  • Re: Equazioni differenziali a coefficienti non costanti

    Insomma alla fine dovrebbe venire così:
    
    A=-1; B=1;
    v=A+(B-A)*rand(100000,3); %cubo uniforme
    %plot3(v(:,1),v(:,2),v(:,3),'.b','MarkerSize',1)
    
    d = v(:,1).^2 + v(:,2).^2 + v(:,3).^2; 
    posizioni=find(d<=1); %cerco quei punti che stanno nella sfera di raggio 1
     
    condizione=v(posizioni,:); %salvo i punti che stanno nella sfera
     
     figure()
    %   plot3(v(:,1),v(:,2),v(:,3),'.y','MarkerSize',1)
    %   hold on
     plot3(condizione(:,1),condizione(:,2),condizione(:,3),'.k','MarkerSize', 1)
    
    modulo_quadro=condizione(:,1).^2+condizione(:,2).^2+condizione(:,3).^2;
    modulo=sqrt(modulo_quadro);
    
    versore=[condizione(:,1)./modulo(:) condizione(:,2)./modulo(:) condizione(:,3)./modulo(:)] ;
    
    figure()
    
    plot3(versore(:,1),versore(:,2),versore(:,3), '.', 'MarkerSize',1)
    
    Il primo plot è la sfera piena, il secondo la superfice.
    Come faccio a vedere se effettivamente di dentro è vuota?
Devi accedere o registrarti per scrivere nel forum
473 risposte