[C++] Obliczenie miejsc zerowych metodą Newtona.
Ostatnio zmodyfikowano 2014-06-18 07:44
sweter916 Temat założony przez niniejszego użytkownika |
[C++] Obliczenie miejsc zerowych metodą Newtona. » 2014-06-15 21:06:11 Witam, piszę prosty program obliczający miejsca zerowe wielomianów do 10 stopnia. Wczytanie argumentów wielomianu dla wskazanego stopnia oraz obliczenie ich pochodnej działają poprawnie. Problem jest przy obliczaniu kolejnych przybliżeń. Dla ułatwienia przyjmuję W(x) = x^3-10x+2, [a=-4; b=4] w który wielomian ma trzy miejsca zerowe: x=-3.257 x=0.2 x=3.057 Wynikiem jest 2.14 przy 35 krokach, co nie jest prawdą. Użyłem pętli do..while aby znaleźć wszystkie miejsca zerowe, ale przeskoczenie miejsca zerowego (nawet tego błędnego) poprzez dodanie do niego 1 też nie zmienia sytuacji. Jaki błąd popełniłem i jak mogę go naprawić? #include <iostream> #include <math.h>
using namespace std;
int main() { int st, it, odp, i, a, b, W[ 10 ], P[ 10 ]; float p, wiel, poch, k1, k0; cout << "Podaj stopien wielomianu: "; cin >> st; for( i = st; i >= 0; i-- ) { cout << "x" << i << ": "; cin >> W[ i ]; } for( i = st; i >= 0; i-- ) { P[ i ] = W[ i ] * i; } a =- 4; b = 4; p = a; cout << "Podaj ilosc iteracji: "; cin >> it; do { for( i = it; i >= 0; i-- ) { for( i = st; i >= 0; i-- ) { wiel +=( W[ i ] *( pow( p, i ) ) ); poch +=( P[ i ] *( pow( p, i - 1 ) ) ); } k1 = k0 -( wiel / poch ); p = k1; k0 = p; } cout << "Miejsce zerowe: " << k1 << "\n"; k1 + 1; cout << "Szukac nastepnego miejsca zerowego? (1 LUB 0) "; cin >> odp; } while( odp == 1 ); return 0; }
Chciałbym też zaimplementować algorytm, który określa automatycznie przedział wielomianu, w którym są jego pierwiastki i w tym przedziale wykonać obliczenia. Macie jakieś propozycje? |
|
Monika90 |
» 2014-06-16 07:11:56 Idź do biblioteki i se wypożycz literaturę na temat metod numerycznych. |
|
sweter916 Temat założony przez niniejszego użytkownika |
» 2014-06-17 17:26:40 Mam materiały dot. metod, jednak se nie mogę poradzić z opisanym problemem. Mogłabyś mnie nakierować na rozwiązanie? |
|
Monika90 |
» 2014-06-18 07:44:29 1. Wielomian dziesiątego stopnia nie zmieści się w tablicy W. 2. Zmienne wiel, poh, k0 są niezainicjalizowane, dlatego wyniki są całkowicie bez sensu. 3. Używasz tej samej zmiennej i jako licznika wewnętrznej i zewnętrznej pętli. 4. Nie mówił Ci nikt, że zmienne należy deklarować jak najbliżej miejsca ich użycia? 5. k1 + 1 - to nic ne robi
|
|
« 1 » |