Scrivere programma in SciLab

Fabjox
Buon giorno a tutti.
Ho da poco iniziato ad usare SciLab, e dovrei risolvere la seguente equazione:

$ DE^2=(BFsin(x)+EFcos(x)-XD)^2+(YD+BFcos(x)-EFsin(x))^2 $

DE=63; BF=52; EF=90; XD=57; YD=65.5;

dovrei scrivere in SciLab un programmino che mi dia come risultato l'angolo x.

Grazie a tutti in anticipo per l'interessamento.

Risposte
TRic1
Provo a darti una traccia senza scendere nei dettagli del codice.
Innanzitutto riscrivi l'equazione come f(x)=0.
Poi facciamo alcune considerazioni su f(x):
1) è continua nel domino dei reali e con derivate continue, è periodica in [0:2*%pi] e quindi, se la soluzione esiste, la cerchiamo all'interno di un periodo.
2) Se tracciamo il grafico deff('y=f(x)','y=....');x=[0:.1:2*%pi];plot(x,f(x)), notiamo che esistono 2 zeri di questa funzione, quindi 2 soluzioni della tua equazione.

Quindi devi scrivere un programma che trovi le 2 soluzioni implementando un algoritmo di Newton (delle tangenti) che parta da un punto opportuno. Ti può aiutare la funzione di scilab "numdiff(f,x)".
Per capire meglio come funziona l'algoritmo facciamo un esempio: quando hai plottato la funzione come indicato sopra, inserisci i seguenti comandi.

--> x0=3; plot(x,numdiff(f,x0)*(x-x0)+f(x0))
--> x1=-f(x0)/numdiff(f,x0)+x0;plot(x,numdiff(f,x1)*(x-x1)+f(x1))
--> x2=-f(x1)/numdiff(f,x1)+x1;plot(x,numdiff(f,x2)*(x-x2)+f(x2))
(eccetera)

Chiaro, no? Alla fine xn sarà una soluzione.
Ti basterà iterare questi passaggi con un ciclo "while" finchè abs(xn-xn-1)<%eps. Il segreto è saper scegliere x0: prova a pensarci.
Altrimenti usa la funzione fsolve(3,f), che dà lo stesso risultato, però ti perdi l'opportunità di smanettare e imparare a usare scilab...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.