Cercando di ordinare i coefficienti del polinomio (z-a) (z-b) (z-c) ... (z-n) in un vettore

1

Quindi ho un polinomio fattorizzato della forma (z-a) (z-b) (z-c) ... (z-n) per n un intero positivo pari. Quindi il coefficiente di z ^ k per 0 < = k < n sarà la somma di tutti i distinti prodotti dell'elemento n-k presi dall'insieme {a, b, ..., n} moltiplicato per (-1) ^ k, spero che abbia senso, per favore chiedi se hai bisogno di ulteriori chiarimenti.

Sto cercando di mettere questi coefficienti in un vettore riga con la prima colonna contenente il coefficiente costante (che sarebbe abc ... n) e l'ultima colonna contenente il coefficiente per z ^ n (che sarebbe 1) .

Immagino che ci sia un modo per forzare la forza con un sacco di cicli annidati, ma spero che esista un modo più efficiente. Questo è stato fatto in Matlab (che non mi è familiare) e so che Matlab ha un sacco di algoritmi e funzioni, quindi forse ha qualcosa che posso usare. Qualcuno può pensare a un modo per farlo?

Esempio: (z-1) (z-2) (z-3) = z ^ 3 - (1 + 2 + 3) z ^ 2 + (1 * 2 + 1 * 3 + 2 * 3) z - 1 * 2 * 3 = z ^ 3 - 6z ^ 2 + 11z - 6. Si noti che questo esempio è n = 3 dispari, ma n = 4 avrebbe impiegato troppo tempo a fare a mano.

Modifica: fammi sapere se pensi che sarebbe meglio pubblicarlo su TCS o lo scambio di stack matematico.

    
posta Thoth 07.05.2012 - 01:09
fonte

2 risposte

2

se hai un array {a,b,c,...,n} allora il tuo risultato iniziale è {1}

fai il pop del fronte ( a ) sposta una copia del subresult di 1 (aggiungi uno 0 alla fine) risultante in {1,0} e aggiungi il subresult con ogni elemento moltiplica per a così il nuovo subresult è {1, a}

fallo di nuovo e ottieni nuovamente {1,a,0}+{b*1,a*b}={1,a+b,a*b} e ottieni {1,a+b,a*b,0}+{c,c*(a+b),c*a*b}={1,a+b+c,a*c+b*c+a*b,c*a*b} e così via ...

    
risposta data 07.05.2012 - 02:14
fonte
0

Dai un'occhiata alla routine matlab poly.

>> poly([1,2,3])
ans =

     1    -6    11    -6

O, per essere più precisi,

n = length(input);
c = [1 zeros(1,n)];
for j = 1:n
    c(2:(j+1)) = c(2:(j+1)) - input(j).*c(1:j);
end
    
risposta data 29.10.2013 - 16:39
fonte

Leggi altre domande sui tag