Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obliczenie miejsc zerowych metodą Newtona.

Ostatnio zmodyfikowano 2014-06-18 07:44
Autor Wiadomość
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ć?

C/C++
#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;
   
    ///WIELOMIAN - STOPIEN I WARTOSCI ARGUMENTOW
    cout << "Podaj stopien wielomianu: ";
    cin >> st;
    for( i = st; i >= 0; i-- )
    {
        cout << "x" << i << ": ";
        cin >> W[ i ];
    }
   
    ///POCHODNA
    for( i = st; i >= 0; i-- )
    {
        P[ i ] = W[ i ] * i;
    }
   
    ///NEWTON
    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?
P-112136
Monika90
» 2014-06-16 07:11:56
Idź do biblioteki i se wypożycz literaturę na temat metod numerycznych.
P-112149
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?
P-112196
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
P-112215
« 1 »
  Strona 1 z 1