esercizio semplice con matlab

Messaggioda serway2 » 23/01/2010, 18:00

Si considerino i due polinomi
\( \displaystyle {p}{\left({x}\right)}={\sum_{{{i}={0}}}^{{m}}}{p}_{{i}}{{x}}^{{i}},{q}{\left({x}\right)}={\sum_{{{i}={0}}}^{{n}}}{q}_{{i}}{{x}}^{{i}} \),
di gradi m ed n rispettivamente. Il polinomio prodotto r(x) = p(x)q(x), ha grado m + n
e denotandolo con \( \displaystyle {r}{\left({x}\right)}={\sum_{{{i}={0}}}^{{{m}+{n}}}}{r}_{{i}}{{x}}^{{i}} \), i suoi coefficienti ri, i = 0, . . . ,m + n sono definiti come segue:
\( \displaystyle {r}{\left({i}\right)}={\sum_{{{k}={0}}}^{{i}}}{g}_{{k}} \)
\( \displaystyle {g}_{{k}}={\left\lbrace\matrix{{0}&{s}{e}{k}\gt{m}{o}{p}{p}{u}{r}{e}{i}-{k}\gt{n}\\{p}_{{k}}{q}_{{{i}-{k}}}&\text{altrimenti}}\right.} \).
Scrivere una function Matlab che, ricevuti in input due vettori p e q contenenti i coefficienti
\( \displaystyle {p}_{{i}} \) e \( \displaystyle {q}_{{i}} \) dei polinomi p(x) e q(x), rispettivamente, fornisca in output il vettore r contenente
i coefficienti \( \displaystyle {r}_{{i}} \) del polinomio prodotto r(x) .
La function deve effettuare le seguenti operazioni:
• determinare le dimensioni m ed n dei vettori p e q;
• effettuare un ciclo per calcolare le componenti \( \displaystyle {r}_{{i}} \) del vettore r.

L'esercizio l'ho svolto nel seguente modo, ma credo che ci sia qualche errore, mi potreste aiutare? grazie :D

function r=polinomio(p,q)
m=length(p);
n=length(q);
for i=0:m+n
for k=0:i
if k>m | i-k>n
g(k)=0;
else
g(k)=p(k)*q(i-k);
end
end
end
Ultima modifica di serway2 il 24/01/2010, 14:08, modificato 1 volta in totale.
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda apatriarca » 24/01/2010, 13:14

C'è un errore nel modo in cui hai scritto length nella terza riga di codice.
apatriarca
Moderatore
Moderatore
 
Messaggi: 1987
Iscritto il: 08/12/2008, 20:37
Località: Torino

Messaggioda serway2 » 24/01/2010, 14:09

per il resto sta bene o devo correggere qualcosa?
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda apatriarca » 25/01/2010, 19:07

Non ho risposto prima perché non avevo Matlab sotto mano e volevo essere certo di ciò che ti stavo dicendo.

Prima di tutto gli indici in Matlab iniziano da 1 e non da 0, per cui p(0) è oltre i limiti dell'array e quindi viene restituito errore quando viene calcolato. Devi quindi aggiungere 1 a tutti gli indici nelle formule. Per cui i polinomi sono definiti da:

\( \displaystyle {p}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{p}_{{i}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{n}+{1}}}}{q}_{{i}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {r}{\left({x}\right)}={p}{\left({x}\right)}{q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{\sum_{{{j}={1}}}^{{{n}+{1}}}}{p}_{{i}}{q}_{{j}}{{x}}^{{{i}+{j}-{2}}}={\sum_{{{i}={1}}}^{{{m}+{n}+{1}}}}{r}_{{i}}{{x}}^{{{i}-{1}}} \)

Il secondo errore è che in effetti il tuo codice non fa quello che deve fare. O meglio non restituisce valori. La definizione dei coefficiente \( \displaystyle {r}_{{i}} \) è comunque molto carente, in particolare quella dei \( \displaystyle {g}_{{k}} \). Per il codice ci devo pensare un po' che devo riscrivere bene tutte le formule (per adeguarsi ai nuovi indici).
apatriarca
Moderatore
Moderatore
 
Messaggi: 1987
Iscritto il: 08/12/2008, 20:37
Località: Torino

Messaggioda serway2 » 25/01/2010, 19:50

hai ragione ti ringrazio di avermi risposto, infatti una settimana fa circa il mio professore mi aveva detto a ricevimento che gli indici matlab iniziano da 1 e non da 0, me ne ero dimenticato, hai fatto benissimo a ricordarmelo, proprio oggi purtroppo sono stato bocciato alla prova di idoneità di matlab, (non per questo errore perchè l'esercizio riguardava un'altra cosa), cmq se continuo così finirò per non riuscire mai a passare la prova di idoneità di matlab, aspetterò pazientemente che tu mi dia la soluzione definitiva dell'esercizio, ciao e grazie tantissime
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda apatriarca » 25/01/2010, 20:05

Dalla formula scritta in precedenza si ottiene facilmente
\( \displaystyle {r}_{{k}}=\sum_{{{i}+{j}-{1}={k}}}{p}_{{i}}{q}_{{j}} \)
Un primo metodo è quindi quello di iterare su tutti gli i=1 : (m+1) e j=1 : (n+1) e aggiungere questo valore all'array \( \displaystyle {r} \) precedentemente allocato. Il codice sarebbe semplicemente il seguente (\( \displaystyle {m} \) ed \( \displaystyle {n} \) nel codice sarebbero uguali a \( \displaystyle {m}+{1} \) e \( \displaystyle {n}+{1} \) nelle formule):
Codice: Seleziona tutto
function r = polinomio(p, q)

m = length(p);
n = length(q);
r = zeros(1,m+n-1);

for i=1:m
    for j=1:n
        r(i+j-1) += p(i)*q(j);
    end
end

Mi pare comunque evidente che il tuo professore vuole calcolare i coefficienti \( \displaystyle {r}_{{i}} \) in ordine e non tutti insieme come nel mio codice precedente. In questo caso si devono analizzare i termini \( \displaystyle {g}_{{i}} \). Ogni \( \displaystyle {g}_{{i}} \) non nullo corrisponde ad un termine \( \displaystyle {p}_{{{i}}}\cdot{q}_{{{k}-{i}+{1}}} \). Questi termini esistono nell'intervallo \( \displaystyle \max{\left({1},{k}-{n}\right)}:\min{\left({k},{m}+{1}\right)} \).
Codice: Seleziona tutto
function r = polinomio(p, q)

m = length(p);
n = length(q);
r = zeros(1,m+n-1);

for k=1:(m+n-1)
    for i=max(1,k-n+1):min(k,m)
        r(k) += p(i)*q(k-i+1);
    end
end
apatriarca
Moderatore
Moderatore
 
Messaggi: 1987
Iscritto il: 08/12/2008, 20:37
Località: Torino

Messaggioda serway2 » 26/01/2010, 12:02

scusa ma purtroppo non ho capito il ragionamenti che usi in entrambe le soluzioni, ti potresti spiegare meglio?
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda serway2 » 26/01/2010, 19:50

cmq quando definisci le sommatorie, secondo me hai fatto qualche errore di indice
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda serway2 » 26/01/2010, 20:03

apatriarca ha scritto:
\( \displaystyle {p}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{p}_{{i}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{n}+{1}}}}{q}_{{i}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {r}{\left({x}\right)}={p}{\left({x}\right)}{q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{\sum_{{{j}={1}}}^{{{n}+{1}}}}{p}_{{i}}{q}_{{j}}{{x}}^{{{i}+{j}-{2}}}={\sum_{{{i}={1}}}^{{{m}+{n}+{1}}}}{r}_{{i}}{{x}}^{{{i}-{1}}} \)


in realtà dovrebbe essere
\( \displaystyle {p}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{p}_{{{i}-{1}}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{n}+{1}}}}{q}_{{{i}-{1}}}{{x}}^{{{i}-{1}}} \)
\( \displaystyle {r}{\left({x}\right)}={p}{\left({x}\right)}{q}{\left({x}\right)}={\sum_{{{i}={1}}}^{{{m}+{1}}}}{\sum_{{{j}={1}}}^{{{n}+{1}}}}{p}_{{{i}-{1}}}{q}_{{{j}-{1}}}{{x}}^{{{i}+{j}-{2}}}={\sum_{{{i}={1}}}^{{{m}+{n}+{1}}}}{r}_{{{i}-{1}}}{{x}}^{{{i}-{1}}} \)
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Messaggioda serway2 » 26/01/2010, 21:46

ho provato a far eseguire il tuo file e non esce il risultato che deve uscire, esce un risultato errato
serway2
New Member
New Member
 
Messaggi: 76
Iscritto il: 15/01/2009, 18:02

Prossimo

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti