Domanda

Usando la matematica a matrice assortita, ho risolto un sistema di equazioni risultanti in coefficienti per un polinomio di grado 'n'

Ax^(n-1) + Bx^(n-2) + ... + Z

Quindi evoco il polinomio su un dato intervallo x, essenzialmente sto renderizzando la curva polinomiale. Ora ecco il trucco. Ho svolto questo lavoro in un sistema di coordinate che chiameremo "spazio dati". Ora devo presentare la stessa curva in un altro spazio di coordinate. È facile trasformare input / output da e verso gli spazi delle coordinate, ma l'utente finale è interessato solo ai coefficienti [A, B, ...., Z] poiché può ricostruire il polinomio da solo. Come posso presentare una seconda serie di coefficienti [A ', B', ...., Z '] che rappresentano la stessa curva sagomata in un diverso sistema di coordinate.

Se aiuta, sto lavorando nello spazio 2D. Vecchi e semplici x. Sento anche che questo potrebbe comportare la moltiplicazione dei coefficienti per una matrice di trasformazione? Includerebbe alcuni il fattore di scala / traslazione tra i sistemi di coordinate? Sarebbe il contrario di questa matrice? Mi sento come se fossi diretto nella giusta direzione ...

Aggiornamento: i sistemi di coordinate sono correlati in modo lineare. Sarebbe stata utile informazioni eh?

È stato utile?

Soluzione

L'affermazione del problema è leggermente poco chiara, quindi per prima cosa chiarirò la mia interpretazione:

Hai una funzione polinomiale

f (x) = C n x n + C n-1 x n-1 + ... + C 0

[Ho cambiato A, B, ... Z in C n , C n-1 , ..., C 0 per lavorare più facilmente con l'algebra lineare di seguito.]

Quindi hai anche una trasformazione come: & nbsp; z = ax + b & nbsp; che si desidera utilizzare per trovare i coefficienti per il stesso polinomio, ma in termini di z :

f (z) = D n z n + D n-1 z n-1 + ... + D 0

Questo può essere fatto abbastanza facilmente con qualche algebra lineare. In particolare, puoi definire una matrice (n + 1) × (n + 1) T che ci consente di eseguire la moltiplicazione della matrice

& nbsp; d = T * c ,

dove d è un vettore di colonna con la voce superiore D0 , fino all'ultima voce D n , il vettore di colonna c è simile per i coefficienti Ci e la matrice T ha ( i, j) -th [i th riga, j th colonna] voce tij data da

& nbsp; tij = ( j scegli i ) a i bji .

Dove ( j sceglie i ) è il coefficiente binomiale e = 0 quando i > j . Inoltre, a differenza delle matrici standard, sto pensando che io, j ogni intervallo da 0 a n (di solito si inizia da 1).

Questo è fondamentalmente un bel modo per scrivere l'espansione e la ricompressione del polinomio quando si collega z = ax + b a mano e si utilizza teorema binomiale .

Altri suggerimenti

La risposta di Tyler è la risposta giusta se devi calcolare questo cambiamento della variabile z = ax + b molte volte (intendo per molti polinomi diversi). D'altra parte, se devi farlo solo una volta, è molto più veloce combinare il calcolo dei coefficienti della matrice con la valutazione finale. Il modo migliore per farlo è valutare simbolicamente il tuo polinomio nel punto (ax + b) con il metodo di Hörner:

  • memorizzi i coefficienti polinomiali in un vettore V (all'inizio, tutti i coefficienti sono zero), e per i = n a 0, lo moltiplichi per (ax + b) e aggiungi C i .
  • l'aggiunta di C i significa l'aggiunta al termine costante
  • moltiplicare per (ax + b) significa moltiplicare tutti i coefficienti per b in un vettore K 1 , moltiplicare tutti i coefficienti per a e spostarli dal termine costante in un vettore K 2 e reinserendo K 1 + K 2 in V.

Questo sarà più facile da programmare e più veloce da calcolare.

Nota che cambiare y in w = cy + d è davvero facile. Infine, come sottolinea mattiast, un cambio generale di coordinate non ti darà un polinomio.

Nota tecnica : se vuoi ancora calcolare la matrice T (come definita da Tyler), dovresti calcolarla usando una versione ponderata della regola di Pascal (questo è implicitamente il calcolo di Hörner) :

t i, j = b t i, j-1 + a t i-1, j-1

In questo modo, lo calcoli semplicemente, colonna dopo colonna, da sinistra a destra.

Se capisco correttamente la tua domanda, non vi è alcuna garanzia che la funzione rimanga polinomiale dopo aver cambiato le coordinate. Ad esempio, lascia y = x ^ 2 e il nuovo sistema di coordinate x '= y, y' = x. Ora l'equazione diventa y '= sqrt (x'), che non è polinomiale.

Hai l'equazione:

y = Ax^(n-1) + Bx^(n-2) + ... + Z

Nello spazio xy, e lo vuoi in qualche spazio x'y '. Ciò di cui hai bisogno sono le funzioni di trasformazione f (x) = x 'e g (y) = y' (o h (x ') = xe j (y') = y). Nel primo caso devi risolvere per x e risolvere per y. Una volta che hai xey, puoi sostituire quei risultati nella tua equazione originale e risolvere y '.

Il fatto che ciò sia banale dipende dalla complessità delle funzioni utilizzate per trasformare da uno spazio all'altro. Ad esempio, equazioni come:

5x = x' and 10y = y'

sono estremamente facili da risolvere per il risultato

y' = 2Ax'^(n-1) + 2Bx'^(n-2) + ... + 10Z

Se gli spazi di input sono linearmente correlati, allora sì, una matrice dovrebbe essere in grado di trasformare un insieme di coefficienti in un altro. Ad esempio, se avevi il tuo polinomio nel tuo " originale " x-space:

ax ^ 3 + bx ^ 2 + cx + d

e volevi trasformarti in uno spazio w diverso dove w = px + q

allora vuoi trovare un ', b', c 'e d' tale che

ax ^ 3 + bx ^ 2 + cx + d = a'w ^ 3 + b'w ^ 2 + c'w + d '

e con un po 'di algebra,

a'w ^ 3 + b'w ^ 2 + c'w + d '= a'p ^ 3x ^ 3 + 3a'p ^ 2qx ^ 2 + 3a'pq ^ 2x + a'q ^ 3 + b'p ^ 2x ^ 2 + 2b'pqx + b'q ^ 2 + c'px + c'q + d '

quindi

a = a'p ^ 3

b = 3a'p ^ 2q + b'p ^ 2

c = 3a'pq ^ 2 + 2b'pq + c'p

d = a'q ^ 3 + b'q ^ 2 + c'q + d '

che può essere riscritto come un problema di matrice e risolto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top