Calcolare una funzione in un punto...

di il
11 risposte

Calcolare una funzione in un punto...

Salve a tutti,
premetto che uso molto poco matlab e la mia domanda potrebbe risultare banale. Devo calcolare una funzione in un punto. Bene. Mi definisco la x in un intervallo e poi definisco la funzione y con la x (ad esempio y=sin(x)). Ora io questa funzione devo utilizzarla in una function nella quale faccio un'iterazione e vado a calcolare la funzione in diversi punti. Pensavo che scrivendo y(i) con i uguale a qualche numero andassi a calcolare la funzione y nel punto i e invece scopro che accedo alla posizione i del vettore(funzione) y. Esiste qualche notazione diversa per fare quello che voglio io? Ringrazio anticipatamente.
Un saluto

11 Risposte

  • Re: Calcolare una funzione in un punto...

    Praticamente devi sostituire alla i nel tuo y(i), l'indice che corrisponde al valore di x che cerchi.
    Esempiose x e y sono:
    x=1:10;
    y=x.^2;
    Per trovare la y che corrisponde a x=2 devi scrivere:
    y(x==2)
    Ovviamente, in questo modo, non potrai chiedere a matlab y(x==2.5) perchè, in questo caso, la y è definita solo sui valori interi (da 1 a 10).
    In questo caso dovrai definire x in modo più "fitto":
    x=1:0.1:10
    Le dimensioni del vettore x in questo caso aumentano, quindi devi considerare la precisione che ti serve. Se la precisione non è molto alta, questo metodo è il più semplice.
  • Re: Calcolare una funzione in un punto...

    Ciao. Ti ringrazio. Però ancora on riesco a risolvere il problema. Allora la funzione è questa:

    function [XF, F, I] = myfun(x0, x1, y, N, tolx) %--INPUT--> x0, x1, y=funzione, N, tolx=valore confronto --%
    %--OUTPUT---> XF=zero della funzione F= valore della funzione nel punto X I=numero di iterazioni--%
    X=1:N;

    X(1)=x0;

    X(2)=x1;


    for i=2:1:N

    X(i+1)= X(i)-y(X(i))*((X(i)-X(i-1))/y(x==X(i))-y(x==X(i-1)));

    if abs(X(i+1)-X(i))<= tolx

    XF=X(i+1)

    F=y(XF)

    I=i

    plot(y,'r');

    hold on;

    plot(X, 'b');

    return;

    end;

    if y(X(i))*y(X(i+1))==0

    XF=X(i+1)

    F=y(XF)

    I=i

    plot(y,'r');

    hold on;

    plot(X, 'b');

    return;


    end;

    if y(X(i))*y(X(i+1))>0

    X(i)=X(i-1)

    end;



    end;

    Io ho scritto come dicevi tu x== però mi da errore perchè dice che la variabile x non è definita. Ed effettivamente non è definita nella funzione. Ma infatti io definisco la x e la y e passo alla funzione la y. Allora ho provato a passargli entrambe:


    function [XF, F, I] = myfun(x0, x1, x, y, N, tolx) %--INPUT--> x0, x1, y=funzione, N, tolx=valore confronto --%
    %--OUTPUT---> XF=zero della funzione F= valore della funzione nel punto X I=numero di iterazioni--%
    X=1:N;

    X(1)=x0;

    X(2)=x1;


    for i=2:1:N

    X(i+1)= X(i)-y(x==X(i)).*((X(i)-X(i-1))./y(x==X(i))-y(x==X(i-1)));

    if abs(X(i+1)-X(i))<= tolx

    XF=X(i+1)

    F=y(XF)

    I=i

    plot(y,'r');

    hold on;

    plot(X, 'b');

    return;

    end;

    if y(x==X(i))*y(x==X(i+1))==0

    XF=X(i+1)

    F=y(XF)

    I=i

    plot(y,'r');

    hold on;

    plot(X, 'b');

    return;


    end;

    if y(x==X(i))*y(x==X(i+1))>0

    X(i)=X(i-1)

    end;



    end;






    ma mi da ancora un errore che non capisco:

    ??? Improper assignment with rectangular empty matrix.

    Error in ==> myfun at 12
    X(i+1)= X(i)-y(x==X(i)).*((X(i)-X(i-1))./y(x==X(i))-y(x==X(i-1)));

    AIUTO!!! Voglio java!!!!!
  • Re: Calcolare una funzione in un punto...

    Allora, il problema è che probabilmente la X(i+1) che si calcola ha diverse cifre dopo la virgola... quindi il problema è quello che cercavo di spiegarti prima... se il calcolo, che prevede anche frazioni dà un numero non che non è compreso in x, quando scrivi x==X(i) non trova niente.
  • Re: Calcolare una funzione in un punto...

    Stavo rileggendo la tua domanda iniziale... forse l'avevo interpretata male. Se hai come funzione qualcosa come sin(x) o comunque una funzione definita in modo continuo, ti conviene semplicemente richiamarla all'interno della tua funzione.
    Cioè, invece che scrivere y(x==X(i)) scrivi sin(X(i)).
    Se non è sin, ma un'altra funzione, anche creata da te, vale lo stesso discorso.
  • Re: Calcolare una funzione in un punto...

    Ed è quello che avevo fatto all'inizio, ma invece di calcolarmi la funzione nel punto x=qualcosa accede al vettore y(la funzione) nel punto x=qualcosa. Quindi se io definisco una funzione y e poi scrivo y(1) non mi calcola la funzione nel punto 1 ma mi restituisce l'elemento in posizione 1 nel vettore y. Me ne sono accorto perchè provando a scrivere y(0) mi dava errore non avendo una posizione 0.
  • Re: Calcolare una funzione in un punto...

    Ma tu non devi scrivere y(qualcosa) perché y è un vettore che corrisponde, se non ho capito male ad una funzione (tipo sin) calcolata in determinati punti.
    Ora, questa funzione (tipo sin) è continua?
  • Re: Calcolare una funzione in un punto...

    Si la funzione è y=x.^3-3*x+3*x.^2-1 quindi è continua. Io avevo definito x come x=[0:.001:1];
  • Re: Calcolare una funzione in un punto...

    Potevi dirlo che era un polinomio!
    Allora puoi usare polyval, gli passi i coefficienti del polinomio e la/le x in cui deve essere calcolata e ti restituisce il valore del polinomio in quel punto.
    Alla tua funzione quindi, invece di passare in ingresso x e y, passi solo il vettore che rappresenta il polinomio (guarda l'esempio sull'help che si capisce bene).
  • Re: Calcolare una funzione in un punto...

    Grazie mille..
    Hai ragione ma come ti dicevo non sono pratico di matlab. Di solito programmo in java o in C. Grazie ancora.
  • Re: Calcolare una funzione in un punto...

    Figurati!
    Matlab è un pò diverso dai classici linguaggi di programmazione quindi bisogna capirne la filosofia...
  • Re: Calcolare una funzione in un punto...

    Non so se può esserti utile ma prova ad usare i comandi seguenti. Ad es.
    >> f=@(x)x^2 % crea una funz nella variab simbolica x (che non va definita) senza creare un m.file

    >> f(1)

    ans =

    1

    >> f(4)

    ans =

    16

    >> fplot(f,[0 10]) % è analogo al plot ma per funzioni.
Devi accedere o registrarti per scrivere nel forum
11 risposte