Jak wczytywać równania nieliniowe

0

Zagadnienie: mamy n równań nieliniowych algebraicznych- czyli same poliwielomiany, n zmiennych, każda jest stopnia co najwyżej s1, s2, ...sn.

Muszę wczytać taki układ i następnie rozwiązać go metodą newtona. Na razie się główkuję do jakiej postaci mam wczytywać te równania? Teoretycznie na podstawie danych, można obliczyć maksymalną liczbę składników jednego równania (z kombinacji), ale nie wiem czy w prosty sposób będzie można operować na takiej tablicy. Czy ktoś może udzielić mi jakiejś wskazówki?

0

Musisz przekształcić wyrażenie na drzewo wywołań, dla przykładu:
x^2 + x/y
to takie drzewo:

     (suma)
     /    \
(potega)  (iloraz)
  /  \      /  \
 x    2    x    y

Obliczanie tak zapisanego wyrażenia polega na przejściu przez nie algorytmem DFS wykonując poszczególne działania.

Zadanie jest analogiczne z przekształceniem notacji infiksowej do odwrotnej notacji polskiej (stos ONP to właśnie elementy tego drzewa zapisane w kolejności DFS). Na wikipedii znajduje się opis algorytmu zarówno budowy stosu ONP ("stacja rozrządowa") oraz algorytm obliczania wartości.

Napisałem kiedyś nawet implementację. Myślę, że będzie pomocna:
http://4programmers.net/Pastebin/1460

Jedyne co musisz dodać to obsługę zmiennych (x, y ...) za które będziesz podstawiać konkretne wartości podczas obliczania wyrażenia.

0

@up: przekombinowałeś
On ma równania reprezentowane przez wielomiany. Jedynie co musi zrobić to przechowywać współczynniki wielomianów.
Oczywiście nie może ich przechowywać w prostej wielowymiarowej tablicy (ile zmiennych tyle wymiarów tablicy, stopień wielomianu wyznacza długość każdego wymiaru), bo zajmie to za dużo pamięci, zakładam, że wielomian będzie się składał z małej liczby niezerowych współczynników.

każde równanie można opisać przez sumę członów, każdy człon powinien być opisany przez współczynnik i zestaw potęg dla każdej zmiennej.

class CzlonWielomianu {
    double wspolczynnik;
    int potegi[liczbaZmiennych]
}

Do tego rozważyłbym możliwość cache'owania potęg zmiennych.
Wszystko zależy od stopnia złożoności problemu (stopnia wielomianu i liczby zmiennych).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0