Scrittura di una somma di una serie di potenze in matlab
Ciao ragazzi mi aiutate per favore a scrivere questa funzione in matlab, la funzione è la seguente:
$ y=a_0+a_1*x+a_2*x^2+a_3*x^3+...+a_n*x^n $
La $x$ è definita attraverso un linspace poi ho costruito il vettore colonna $a_n$ attraverso un ciclo for però non saprei come moltiplicare le varie potenze di $x$ con i vari coefficienti $a_n$.
Forse è banale ma io non sono molto bravo con matlab, sapreste aiutarmi?
Grazie mille in anticipo.
Saluti.
$ y=a_0+a_1*x+a_2*x^2+a_3*x^3+...+a_n*x^n $
La $x$ è definita attraverso un linspace poi ho costruito il vettore colonna $a_n$ attraverso un ciclo for però non saprei come moltiplicare le varie potenze di $x$ con i vari coefficienti $a_n$.
Forse è banale ma io non sono molto bravo con matlab, sapreste aiutarmi?
Grazie mille in anticipo.
Saluti.
Risposte
Basta avere una variabile di work, la inizializzi ad 1. Ad ogni ciclo della addizione, la moltiplichi per x.
Cosi' facendo per ogni ciclo, avrai $x^n$
Cosi' facendo per ogni ciclo, avrai $x^n$
Per calcolare il valore del polinomio conviene usare la regola di Horner (ricorda che in matlab gli indici partono da 1):
L'ho scritto un po' velocemente. Puoi trovare facilmente una spiegazione dell'algoritmo cercando "Horner" o "Regola di Horner" (o cose simili) su google.
y = a(n+1); for i= n:-1:1 y = x * y + a(i); end
L'ho scritto un po' velocemente. Puoi trovare facilmente una spiegazione dell'algoritmo cercando "Horner" o "Regola di Horner" (o cose simili) su google.
Ciao ragazzi ci ho provato ma con esito negativo; ho cercato anche qualcosa sulll'algoritmo di Horner, come mi ha consigliato apatriarca, in rete ma non ci ho capito molto scusate ma l'informatica non è proprio il mio forte.
Wuesto è l'inizio del mio codice se voleste darmi un ulteriore aiuto su come procedere ve ne sarei grato:
Wuesto è l'inizio del mio codice se voleste darmi un ulteriore aiuto su come procedere ve ne sarei grato:
m=6000; k=234.37*10^3; s=0.05; o=sqrt(k/m); y_0=0.2; y_0d=0; x=linspace(0,0.5,100); a_0=y_0; a_1=y_0d; npoi=10; a_n=zeros(npoi,1); a_n(1,1)=a_0; a_n(2,1)=a_1; for i=3:npoi a_n(i)=(-2*(i-2)*s*o*a_n(i-1,1)-(o^2)*a_n(i-2,1))/((i-1)*(i-2)); end
Lo scopo del tuo codice non mi è per niente chiaro. Potresti descrivere il tuo problema?
Effettivamnte scritto così è veramnete incromprensibile, hai ragione!
Cerco di spiegare un pò meglio qual è il mio scopo:
tralasciando il problema fisico al quale sto applicando il mio codice lo scopo è quello di diagrammare la seguente funzione:
$y=a_0+a_1*x+a_2*x^2+a_3*x^3+...+a_n*x^n$
in un certo intervallo, per esempio avevo scelto [0,0.5], ovviamente per un numero finito di $a_n$, per esempio ero partito con n=10 che tra l'altro in maniera ambigua ho chiamato npoi, che conosco e che ho infatti determinato attraverso quel ciclo for.
Il mio problema sta proprio nella scrittura della funzione y.
Spero di essere stato più chiaro, ti ringrazio per il tuo aiuto.
Ciao.
Cerco di spiegare un pò meglio qual è il mio scopo:
tralasciando il problema fisico al quale sto applicando il mio codice lo scopo è quello di diagrammare la seguente funzione:
$y=a_0+a_1*x+a_2*x^2+a_3*x^3+...+a_n*x^n$
in un certo intervallo, per esempio avevo scelto [0,0.5], ovviamente per un numero finito di $a_n$, per esempio ero partito con n=10 che tra l'altro in maniera ambigua ho chiamato npoi, che conosco e che ho infatti determinato attraverso quel ciclo for.
Il mio problema sta proprio nella scrittura della funzione y.
Spero di essere stato più chiaro, ti ringrazio per il tuo aiuto.
Ciao.
potresti sfruttare la funzione $polyval$ che realizza la valutazione di un polinomio descritto dai suoi coefficienti su un vettore di ascisse X.
Ti faccio un esempio:
Ti faccio un esempio:
A=[7 5 4]; % vettore dei coefficienti del polinomio in ordine decrescente, quindi in questo caso ho a_2=7,a_1=5,a_0=4 X=linspace(0,0.5,200); % vettore di 200 punti equispaziati in [0,0.5] y=polyval(A,X); % calcola y=a_2 * x^2 + a_1 *x + a_0 per ogni elemento del vettore X, restituisce un vettore che contiene i valori di y per ogni valore x in X. plot(X,y); % stampi la curva y(x) nei punti di X
Ragazzi sono riuscito a risolvere il problema; usando prima la funzione "fliplr" per rigirare il vettore dei coefficienti $a_n$ e poi ho usato, come mi ha consigliato Ska, la funzione polyval per ottenere la funzione y desiderata.
Grazie mille a tutti per l'aiuto.
Saluti.
Grazie mille a tutti per l'aiuto.
Saluti.