Plottare grafico e retta

di il
6 risposte

Plottare grafico e retta

Salve, ho l'esigenza di plottare il grafico di una funzione e insieme, plottare una retta in una determinata ascissa. Volevo chiedervi se c'è un modo per plottare la retta e far si che la finestra del grafico sia "impostata" dalla sola funzione. in modo tale che cambiando funzione, la retta viene sempre visualizzata. Spero di essere stato quanto più chiaro possibile.

6 Risposte

  • Re: Plottare grafico e retta

    La domanda non è chiara.
    Dovresti, almeno, pubblicare la parte rilevante del codice e / o un paio di immagini che chiariscano qual è l'effetto desiderato ed il problema che riscontri.

    Qual è il problema che riscontri?
    Perchè la retta non dovrebbe essere visualizzata?
    Come definisci l'ascissa della retta (immagino che si tratti di una "retta" parallela all'asse delle ordinate)?
    Come plotti la retta al cambiare della funzione?


    https://www.mathworks.com/help/matlab/ref/axis.html#bul_fsm-1
  • Re: Plottare grafico e retta

    Sto facendo un programmino con AppDesigner e dovrei plottare i diagrammi di Bode con le relative specifiche, quello che fa in pratica la funzione "margin(sys)". Solo che non sono riuscito ad inglobarla cioè lanciando la funzione ho il plot ma non all'interno dell'appplicazione che sto creando. A questo punto ho deciso di implementare un qualcosa di simile col risultato dell'immagine.
    Quello che mi interesserebbe fare è ottenere la linea rossa visibile in tutta la finestra, anche se il modulo visualizzato andasse da - 20 a -100 db ad esempio. Non so se ho chiarito un pò il mio dubbio.
    Allegati:
    24883_a4c3ec3725573167f82bd95ad80b9552.png
    24883_a4c3ec3725573167f82bd95ad80b9552.png
  • Re: Plottare grafico e retta

    Ci sono dfiversi approcci possibili.
    Se usi la funzione plot per plottare le due curve e la retta, il più semplice è:
    [*] plottare la curva
    [*] individuare il valore massimo e minimo dell'asse delle ascisse
    [*] plottare la retta passando, come valori dello ordinate i valori dei limiti degli assi
  • Re: Plottare grafico e retta

    Provo a spiegare con un disegno quello che vorrei fare, scusate ma non so spiegarlo chiaramente.
    Allora io vorrei tracciare la retta 'r' e contemporaneamente plottare una qualsiasi funzione. La finestra del grafico dovrebbe poi dimensionarsi in base alla funzione.
    Allegati:
    24883_55ea7af5a2cfab5a98050909e23c4dee.jpg
    24883_55ea7af5a2cfab5a98050909e23c4dee.jpg
  • Re: Plottare grafico e retta

    Dovresti pubblicare il codice che hai scritto per plottare la funzione e la retta perchè, alla luce dei suggerimenti proposti nelle risposte precedenti non si capisce quale sia il problema.

    Cosa intendi con vorrei tracciare la retta 'r' e contemporaneamente plottare una qualsiasi funzione?

    In che vuoi plottare la funzione e la retta?

    Se plotti prima la funzione, i limiti degli assi si fissano automaticamente ai limiti (minimo e massimo) dei valori della funzione.
    Dopo aver plottato la funzione e dopo aver settato "hold on" per "aggiungere" la retta al grafico, specifica "axis manual" questo "fissa" i valori di minimo e massimo degli assi.
    Per rendere nuovamente "dinamici" i limiti degli assi, puoi settare"axis auto".

    Successivamente puoi plottare la retta: nel caso del disegno che hai postato le parti della retta al di fuori dei limiti degli assi impostati nel plottaggio della funzione non verranno visualizzati (anche se saranno plottati).

    Lo stesso procedimento non funziona se plotti prima la retta e poi la funzione oppure se plotti contemporaneamente la retta e la funzione con un'unica chiamata alla funzione "plot" perchè, in questo caso i limiti degli assi si setteranno automaticamente sui valori della retta.
    Quindi il il modo più semplice è plottare separatamente prima la funzione e poi la retta.

    Come ultima risorsa, se proprio devi plottare prima la retta e poi la funzione, puoi sempre modificare i limiti degli assi settandoli ai valori minimo e massimo dei valori delle ascisse e delle ordinate della funzione che vuoi plottare (in questo caso non devi inserire "axis manual").

    Il codice che segua implementa entrambe le soluzioni; i commenti nel codice dovrebbero spiegare i passaggi.
    
    
    close all
    t=0:.1:360;
    y=sind(t);
    % Plottaggio di una funzione
    hf=plot(t,y,'r')
    grid minor
    % Fissaggio dei limiti degli assi
    axis manual
    hold on
    % Plottaggio della retta
    % la retta si estende, in vericale olte i valori della funzione, ma viene
    % plottata solo la parte compresa tra essi grazie all'istruzione
    % "axis manual"
    hr=plot([139 139],[-5 5],'k')
    % Ripristinamento del settaggio automatico dei limiti degli assi
    axis auto
    % Cancellazione della funzione
    delete(hf)
    % Cancellazione della funzione
    delete(hr)
    % Definizione di una nuova funzione
    y=cosd(t)+3;
    %Plottaggiio della nuova funzione
    hf=plot(t,y,'r')
    % Fissaggio dei limiti degli assi
    axis manual
    % Plottaggio della retta
    hr=plot([139 139],[-5 5],'k')
    %
    %%%%%%%%%%%%%%%%%
    %
    % Ripristinamento del settaggio automatico dei limiti degli assi
    axis auto
    % Cancellazione della funzione
    delete(hf)
    % Cancellazine della retta
    delete(hr)
    % Plottaggio della retta
    hr=plot([139 139],[-5 5],'k')
    % Aggiunta della funzione
    t=t-100;
    plot(t,y,'r')
    % Determinazione dei valori minimo e massimo della funzione
    xmin=min(t);
    xmax=max(t);
    ymin=min(y);
    ymax=max(y);
    % Settaggio dei limiti degli assi in base alla funzione
    ax=gca
    ax.XLim=[xmin xmax]
    ax.YLim=[ymin ymax]
    

    limiti_assi_fissi.gif
    limiti_assi_fissi.gif

  • Re: Plottare grafico e retta

    Ask_raf grazie, è proprio quello che intendevo fare!
Devi accedere o registrarti per scrivere nel forum
6 risposte