Visualizzazione dei risultati da 1 a 6 su 6

Discussione: HELP Matlab

  1. #1

    HELP Matlab

    Non mi occupo di Matlab ma mi è arrivata una richiesta d'aiuto da qualcuno che ci deve studiare problemi di economia e .....cmq sotto posto il listato in cui viene segnalato errore alla riga in cui all'elemento dell'array u nel for verrebbe attribuito il valore. Premetto che nn conosco la sintassi di Matlab insomma fino a pochi minuti fa non l'avevo mai nemmeno visto :tongue: e se qualcuno è disposto ad aiutarmi anticipatamente lo ringrazio. Gli auguri di Buon Natale e Buon Anno li faccio indipendentemente da questo però

    clear
    n=73;
    X=sqrt(3)*(randn(n,1)+1);
    z=((X-ones(n,1)).^2)./(2*3);
    B=1/(sqrt(2*3.142)*sqrt(3))*exp(-z);
    %plot(X,B,'ro')
    d=ones(n,1);
    h=0.5;
    z=0;
    for d = 1:10
    z=z+1;
    u(z)=(X-z)./h;
    %fepa(z)=(1/n*h)*sum(3/4*(ones(n,1)-u(z).^2).*I)
    plot(X,fepa,'b+')
    end;

    I=ones(n,1);
    for i=1:n;
    if abs(u(i))>1;
    I(i)=0;
    end;
    end;

    ftri=(1/n*h)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    fepa2=(1/n*1)*sum(3/4*(ones(n,1)-u.^2).*I)
    fepa3=(1/n*2)*sum(3/4*(ones(n,1)-u.^2).*I)
    ftri2=(1/n*1)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    frti3=(1/n*2)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    tvalue=1/(sqrt(2*3.142)*sqrt(3))*exp(-((0-1)^2)/(2*3))
    sigma=std(X);
    hopt=sigma/(n^0.2)

  2. #2
    Beh, senza sapere cosa deve fare lo script è difficile poterti aiutare concretamente, l'unica cosa che ti posso dire per ora è che la riga incriminata da errore perché assegni ad ogni elemento del vettore u un altro vettore (e la cosa ovviamente non la puoi fare, visto che ogni elemento di un vettore preso in se è uno scalare).
    Se vuoi invece che u contenga una matrice allora devi mettere:

    u(:,z)=(X-z)./h;

    in questo modo avrai una matrice di n righe (73) per 10 colonne.
    cambiato questo però ci sono altri errori disseminati per lo script che non saprei come correggere senza sapere quale deve essere il risultato finale.

    Ciao e auguri

    xxx

  3. #3
    Per il primo pezzo messo così funziona, bisogna ovviamente vedere se il risultato è quello che voleva otternere il tuo amico:

    codice:
    clear 
    n=73; 
    
    X=sqrt(3)*(randn(n,1)+1); 
    z=((X-ones(n,1)).^2)./(2*3); 
    B=1/(sqrt(2*3.142)*sqrt(3))*exp(-z); 
    %plot(X,B,'ro') 
    d=ones(n,1); 
    h=0.5; 
    z=0; 
    
    u=[];
    I=ones(n,1); 
    
    for d = 1:10 
        z=z+1; 
        u(:,z)=(X-z)./h;
        fepa(z)=(1/n*h)*sum(3/4*(ones(n,1)-u(z).^2).*I) 
        plot(X,fepa(z),'b+') 
        %Premi un tasto per andare al grafico successivo
        pause
    end; 
    
    for i=1:n; 
        if abs(u(i))>1; 
            I(i)=0; 
        end; 
    end;
    Nell'ultimo pezzo senza altre info non posso proprio dirti nulla, ciao.

    xxx

  4. #4

    Thanks !

    Grazie per avermi risposto: ti posto sotto una versione funzionante in cui l'output è costituito da un grafico ma il sorgente andrebbe modificato perchè sullo stesso grafico andrebbe visualizzato anche un elemento grafico a destra e uno a sinistra della curva per dimostrare che da sx a dx si è avuta una variazione crescente.


    clear
    n=73;
    X=sqrt(3)*(randn(n,1)+1);
    z=((X-ones(n,1)).^2)./(2*3);
    B=1/(sqrt(2*3.142)*sqrt(3))*exp(-z);
    plot(X,B,'ro')
    x0=0;
    h=0.5;
    u=(X-x0)./h;
    I=ones(n,1);
    for i=1:n;
    if abs(u(i))>1;
    I(i)=0;
    end;
    end;
    fepa=(1/n*h)*sum(3/4*(ones(n,1)-u.^2).*I)
    ftri=(1/n*h)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    fepa2=(1/n*1)*sum(3/4*(ones(n,1)-u.^2).*I)
    fepa3=(1/n*2)*sum(3/4*(ones(n,1)-u.^2).*I)
    ftri2=(1/n*1)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    frti3=(1/n*2)*sum(35/32*((ones(n,1)-u.^2).^3).*I)
    tvalue=1/(sqrt(2*3.142)*sqrt(3))*exp(-((0-1)^2)/(2*3))
    sigma=std(X);
    hopt=sigma/(n^0.2)

    Se invece si volesse ottenere lo stesso risultato di questo listato ma interagendo con tastiera cioè inserire dati iniziali in input e da lì ottenere ogni volta un grafico diverso come va impostata la funzione in Matlab? Personalmente mi diverto di + con i miei puntatori del C++ !!

  5. #5
    Per permettere all'utente di inserire valori in modo interattivo basta usare il comando input:

    codice:
    tuaVariabile = input('Inserisci il valore della tua variabile');
    Lo script continuerà solo dopo che avrai digitato il valore della variabile. A te ovviamente controllarne il tipo (numerico, stringa, ecc affinché non venga generato un errore)

    Se invece vuoi visualizzare più grafici contemporaneamente basta che tu inserisca tutto dentro uno stesso comando plot:
    codice:
    plot(vettoreX,vettoreY,'b', vettoreX,vettoreY1,'r', vettoreX,vettoreY2,'g');
    Ho usato uno stesso vettore di valori per la x e tre diversi vettori per la y, ma ovviamente è solo un esempio.

    xxx

  6. #6

    grazie e buon anno

    Grazie e Bbuon 2004

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.