Cześć!
Mam do rozwiązania takie zadanie:
Mając dane n pierwiastków wielomianu n-tego stopnia gdzie an=1 należy podać n+1
współczynników tegoż wielomianu.
Np. dla danych : 2 -2 1
Wynikiem będzie: 1 1 -4 -4
Ponieważ (x-2)(x+2)(x-1)= x3 + x2 - 4x - 4
No i gdzie widzisz problem? Przecież wystarczy ci wykonać kilka prostych mnożeń. Probowałeś sobie to chociażby na kartce rozwiązać?
Próbowałem, ale nie mam pojęcia jak to zrobić.
Zrób to ręcznie na kartce, po czym spytaj sam siebie jak to zrobiłeś.
No mnożę nawiasy po kolei, ale ja nie mam pojęcia jak to zapisać. (x-2)(x+2)(x-1) = (x2 + 2x - 2x - 4)(x-1) = (x2 - 4)(x-1) = x3 - x2 - 4x + 4. W szczególności nie wiem jak zapisać w C++ skracanie wyrazów podobnych.
Zdefiniuj sobie wielomian jako tablicę współczynników przy:
x0, x1, x2 itd
czyli mnożysz trzy tablice (wielomiany):
-2 1
2 1
-1 1
ostatnie jedynki przy to współczynniki przy x1
mnożenie tak zdefiniowanych wielomianów jest trywialne:
c[i+k]+=a[i]*b[k];
- poprawione
To są wzory starego Viety:
http://pl.wikipedia.org/wiki/Wzory_Vi%C3%A8te%E2%80%99a
Przykładowo dla kwadratowego: ax^2 + bx + c = 0
wyliczamy pierwiastki - tradycyjnie:
no i z tego widać że:
x1 + x2 = -b/a
x1 * x2 = c/a
Potem dla trzeciego stopnia będzie chyba tak:
x1 + x2 + x3 = -b/a
x1x2 + x1x3 + x2x3 = c/a
x1 x2 x3 = -d/a
i jeszcze dla 4-go:
x1 + x2 + x3 + x4 = -b/a
x1x2 + x1x3 + x1x4 + x2x3 + x2x4 + x3x4 = c/a
x1x2x3 + x1x2x4 + ... = -d/a
x1x2x3x4 = e/a
@fur, trzymasz poziom. Zazwyczaj piszesz bzdury lub nie na temat. Tym razem jest nie na temat. Pytanie brzmiało: Jak wyznaczyć współczynniki znając pierwiastki? Ty napisałeś jak wyznaczyć pierwiastki znając współczynniki.
bogdans napisał(a):
@fur, trzymasz poziom. Zazwyczaj piszesz bzdury lub nie na temat. Tym razem jest nie na temat. Pytanie brzmiało: Jak wyznaczyć współczynniki znając pierwiastki? Ty napisałeś jak wyznaczyć pierwiastki znając współczynniki.
Oj, nie przesadzaj - nie jestem bogiem.
Wiadomo od około 200 lat że znając współczynniki wielomianu stopnia powyżej 5 nie da rady wyznaczyć jego zer - Gauss to udowodnił.
Wzory Viety służą do wyliczania współczynników gdy znamy zera.
obliczamy tak:
cn = -(x1 + x2 + ... xn)
...
c0 = (-1)^n * x1x2x3* ... xn; dla c_(n+1) = a = 1
Wiadomo od około 200 lat że znając współczynniki wielomianu stopnia powyżej 5 nie da rady wyznaczyć jego zer - Gauss to udowodnił.
Jaki znów Gauss? o_O
http://pl.wikipedia.org/wiki/Twierdzenie_Abela-Ruffiniego
I wcale nie jest prawdą że "nie da rady wyznaczyć zer" tylko że nie istnieje analityczna ogólna metoda wyznaczania zer dla wielomianów stopnia >=5.
Bo dla x5 to nawet ty byś sobie poradził z wyznaczeniem zer, a metod numerycznych dla tego problemu też jest cała masa.
Ale to taki mega offtop bo nijak sie to ma do wątku...
Ja na pewno poradziłbym sobie - gorzej z tobą.
Skuteczne metody do obliczania wszystkich zer wielomianów są dość skomplikowane,
i żaden pajac nawet po zaliczonej informatyce raczej tego nie zrobi - programiści są bardzo słabiutcy z metod numerycznych...
Może jednak podam minimalistyczną alternatywę do kodu od @krwq
http://ideone.com/UUrajA