sempre matlab

Messaggioda serway2 » 28/01/2010, 18:12

Assegnato un polinomio p(x) di grado n (con n + 1 coefficienti):
\( \displaystyle {p}{\left({x}\right)}={\sum_{{{i}={0}}}^{{n}}}{p}_{{i}}{{x}}^{{i}}={p}_{{0}}+{p}_{{1}}{x}+...+{p}_{{n}}{{x}}^{{n}} \)
l’algoritmo di Horner calcola il valore assunto da p(x) in un punto \( \displaystyle {x}_{{0}} \) nel seguente modo:
\( \displaystyle {p}{\left({x}_{{0}}\right)}={p}_{{0}}+{x}_{{0}}{\left({p}_{{1}}+{x}_{{0}}{\left({p}_{{2}}+{x}_{{0}}{\left({p}_{{3}}+{x}_{{0}}{\left(...{x}_{{0}}{\left({p}_{{{n}-{2}}}+{x}_{{0}}{\left({p}_{{{n}-{1}}}+{x}_{{0}}{p}_{{n}}\right)}\right)}\right)}\right)}\right)}\right)} \).
Modificare l’algoritmo in modo da calcolare la derivata prima di un polinomio:
\( \displaystyle {p}'{\left({x}\right)}={\sum_{{{i}={0}}}^{{n}}}{i}{p}_{{i}}{{x}}^{{{i}-{1}}} \).
Scrivere una function Matlab che, ricevuti in input il vettore p contenente i coefficienti \( \displaystyle {p}_{{i}} \)
del polinomio p(x) ed un punto \( \displaystyle {x}_{{0}} \), fornisca in output il valore che il polinomio derivata
prima assume nel punto \( \displaystyle {x}_{{0}} \) (ovvero \( \displaystyle {p}'{\left({x}_{{0}}\right)} \)).
La function deve effettuare le seguenti operazioni:
• determinare il grado n del polinomio p(x) (utilizzando la dimensione del vettore dei
coefficienti);
• applicare l’algoritmo di Horner per effettuare il calcolo del valore del polinomio
derivata prima nel punto assegnato \( \displaystyle {x}_{{0}} \).
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda apatriarca » 29/01/2010, 18:49

L'algoritmo di Horner si implementa con una serie di multiply-add (operazioni del tipo \( \displaystyle {a}+{b}\cdot{x} \)) partendo dalla parentesi più interna e poi proseguendo verso quella più esterna. La parentesi più interna è
\( \displaystyle {r}_{{{n}}}={p}_{{{n}}} \)
\( \displaystyle {r}_{{{n}-{1}}}={p}_{{{n}-{1}}}+{x}{r}_{{n}} \)
...
\( \displaystyle {r}_{{0}}={p}_{{{0}}}+{x}{r}_{{1}} \)
La derivata di \( \displaystyle {p} \) è a questo punto semplicemente un polinomio di grado \( \displaystyle {n}-{1} \) con coefficienti \( \displaystyle {q}_{{i}}={\left({i}+{1}\right)}{p}_{{{i}+{1}}} \) e si può quindi applicare l'algoritmo sopra esposto ottenendo
\( \displaystyle {r}_{{{n}-{1}}}={q}_{{{n}-{1}}}={n}{p}_{{{n}}} \)
\( \displaystyle {r}_{{{n}-{2}}}={q}_{{{n}-{2}}}+{x}{r}_{{{n}-{1}}}={\left({n}-{1}\right)}{p}_{{{n}-{1}}}+{x}\cdot{r}_{{{n}-{1}}} \)
...
\( \displaystyle {r}_{{0}}={q}_{{0}}+{x}{r}_{{1}}={p}_{{1}}+{x}{r}_{{1}} \)
apatriarca
Moderatore
Moderatore
 
Messaggi: 1987
Iscritto il: 08/12/2008, 20:37
Località: Torino


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti