Errore in matlab

di il
4 risposte

Errore in matlab

Buongiorno,
mi sono imbattuto in matlab ma ho dei problemi. Io voglio scrivere un file funzione .m di questo tipo:
function y = phij(t)
y = ((2*pi*OMEGA)/60)*t+((2*3.14*(jj-1))/n);
quando poi inserisco il file nella command window escono questi errori:

??? Undefined function or variable 'OMEGA'.

Error in ==> phij at 2
y = ((2*pi*OMEGA)/60)*t+((2*3.14*(jj-1))/n);
Error in ==> run at 57
evalin('caller', [s ';']);

in aggiunta io la OMEGA l'ho scritta come variabile e la trovo nel workspace.
Uso matlab 2011 se sapete aiutarmi fatemi sapere.
In più se qualcuno ha un manuale di matlab in italiano da passare in pdf per la versione 2011 ne sarei grato.
Ringrazio in anticipo

4 Risposte

  • Re: Errore in matlab

    All'interno di una "function" di MatLab sono visibili solo le variabili fornite in input (nel tuo caso "t") e quelle dichiarate "global" (l'uso delle variabili "global" è comunque sconsigliato).

    C'è un'ulteriore possibilità, usare la funzione "evalin" ma è ancora più sconsigliata dell'uso delle variabili "global" e la cito solo per completezza.

    Se vuoi che la tua funzione riconosca una variabile definita nel Workspace devi passarla come input alla funzione:
    function y = phij(t,OMEGA)
    In aggiunta, puoi definire delle funzioni che ammettano un numero variabile di parametri in input ed in output "varargin" e "varargout"

    Per saperne di più:

    http://uk.mathworks.com/help/matlab/matlab_prog/check-variable-scope-in-editor.html

    http://uk.mathworks.com/help/matlab/ref/varargin.html?searchHighlight=varargin

    http://uk.mathworks.com/help/matlab/ref/evalin.html?searchHighlight=evalin

    Per quanto riguarda il manuale di MatLab in italiano ... usa quello in inglese.
  • Re: Errore in matlab

    Grazie mille per l' aiuto.
    Ho altri 2 dubbi che non riesco a risolvere:
    1) Devo definire una funzione a tratti di questo tipo:
    s[phij(t)] = 1 se phie<phij<phia
    0 altrimenti
    con phie e phia definite nella workspace.
    2) Devo fare una sommatoria di questo genere:
    Hxx(t) =sommatoria di j da 1 a 2(s[phij(t)]*[Kt*cj(t)+Kn*sj(t)]*sj(t)
    con Kt e Kn definite nella workspace, s[phij(t)] la funzione a tratti appena descritta, sj(t)= sin(phij(t)) e cj(t)= cos(phij(t)).
    Ti ringrazio in anticipo
  • Re: Errore in matlab

    Le due domande non sono chiare:
    1) Devo definire una funzione a tratti di questo tipo:
    s[phij(t)] = 1 se phie<phij<phia
    0 altrimenti
    con phie e phia definite nella workspace
    cosa rappresenta "s[phij(t)]"?
    se "s" vuole essere un vettore, phij(t) deve essere un intero >= 1 e ci vogliono le () invece delle []
    phij(t) è la funzione che devi scrivere? Se è così, cosa rappresenta s[phij(t)]?

    cosa è "t" uno scalare? Un vettore?

    "con phie e phia definite nella workspace" ==> come scritto nella risposta precedente, per "far vedere" ad una funzione delle variabili definite nel Workspace, bisogna che queste vengano passate come parametri alla funzione stessa

    Nela seconsa domanda ci sono troppe variabili / indici per cui non è possibile dare una risposta:
    cosa rappresenta "2(s[phij(t)]*[Kt*cj(t)+Kn*sj(t)]*sj(t)"? uno scalare?
    Ci sono variabili che sembrano "indici" di loop: come sono definiti?

    Ad ogni modo, per la prima domanda la risposta sembra implicita nella domanda stessa: si tratta di implementare un blocco "if" del tipo:
    
    if(phie < phij && phij < phia)
       s(idx)=1
    else
       s(idx)=0
    end
    
    tutto, però dipende da cosa sia "phij(t)"

    Per quanto riguarda la seconda domanda, prescindendo dalle variabili e / indici che hai scritto, una sommatoria si implementa semplicemente con un loop del tipo:
    
    somma=0
    for i=1:n
       somma=somma+(a(i)*b(i)-c(i))
    end
    
    dove, ovviamente, a, b, c sono dei vettori (tanto per fare un esempio)

    Consentimi di essere sincero, mi sembra di capire che la difficoltà maggiore sia non tanto l'implementazione delle funzioni che hai descritto, quanto, piuttosto, nella scarsa conoscenza dei "fondamenti" di MatLab e della programmazione in genere.

    Spero di sbagliarmi, ma se dovesse essere così, ti consiglio di cominciare con qualcosa di più semplice.
  • Re: Errore in matlab

    Phij(t) è la funzione che ho chiesto all'inizio della discussione e io devo scrivere la funzione a tratti che dipende da questa funzione phij(t), in cui il j sarebbe un indice che varia da 1 a 2. Per la sommatoria ho l'indice j che varia sempre da 1 a 2 della quantità (s[phij(t)]*[Kt*cj(t)+Kn*sj(t)]*sj(t) con s[phij(t)] la funzione a tratti appena definita e sj(t) e cj(t) che dipendono dalla prima funzione phij(t). Per avere più chiarimenti mando questo link che parla del programma che devo fare perchè il file PDF non è consentito mandarlo.
    https://www.dropbox.com/s/y8ukgr0d1tripdi/ds_136_02_021007.pdf?dl=0
    Chiedo aiuto proprio per il fatto che sono negato nella programmazione e purtroppo non ho molto tempo per imparare ad usare matlab.
    Ti ringrazio.
Devi accedere o registrarti per scrivere nel forum
4 risposte