Scrittura di una somma di una serie di potenze in matlab

mascalzone87
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.

Risposte
Umby2
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$

apatriarca
Per calcolare il valore del polinomio conviene usare la regola di Horner (ricorda che in matlab gli indici partono da 1):
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.

mascalzone87
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:
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

apatriarca
Lo scopo del tuo codice non mi è per niente chiaro. Potresti descrivere il tuo problema?

mascalzone87
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.

Ska1
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:

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


mascalzone87
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.

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