Za zadanie mam napisać program, który rozwiąże mi układ dwóch(lub jednego) równań nieliniowych metodą iteracji. Problem polega na tym, że nawet nie wiem jak się za to zabrać. Szukałem w książkach o metodach numerycznych ale powiem szczerze, że mało mi to dało. Proszę o jakieś wskazówki, ewentualnie jeżeli komuś to nie sprawi większego problemu to o kod za drobną opłatą.
szybkie pytanie do wujka googla i masz:
http://www.mimuw.edu.pl/~przykry/petsc/rownania.html
http://galaxy.uci.agh.edu.pl/~ttward/numer/R%F3wnania%20nieliniowe.pdf
Jak przekształcić taki kod
double newton_method(double (*f)(double) , double e, double start , double h)
{
double x0 = start ;
double f_x0 = f(x0);
while (std:: fabs(f_x0) > e)
{
double df = (f(x0 + h) - f_x0) / h;
x0 -= f_x0 / df;
f_x0 = f(x0);
}
return x0;
}
aby rozwiązywał układ dwóch równań nieliniowych? Powyższy działa w przypadku układu jednego równania.
przecież dla równań rozwiązaniem nie będzie liczba, a wektor, tak jak i początkiem nie będzie liczba, a wektor, argumentem funkcji nie będzie liczba, a wektor... Pomyśl nad tym.
Xavizo napisał(a):
Za zadanie mam napisać program, który rozwiąże mi układ dwóch(lub jednego) równań nieliniowych metodą iteracji. Problem polega na tym, że nawet nie wiem jak się za to zabrać. Szukałem w książkach o metodach numerycznych ale powiem szczerze, że mało mi to dało. Proszę o jakieś wskazówki, ewentualnie jeżeli komuś to nie sprawi większego problemu to o kod za drobną opłatą.
Układy nieliniowe to dość trudna sprawa, nieporównywalnie trudniejsza od prostych metod,
które wyliczają tylko jedno równanie.
Tam chyba nawet w ogóle nie ma prostej metody...
co znaczy że nie można zwyczajnie sobie 'zwektoryzować' metod prostych,
jak np. w przypadku równań różniczkowych.
No, o ile pamiętam wersja wielowymiarowa metody Newtona,
wymaga wyliczania całych wyznaczników w każdym kroku...
co zresztą nietrudno zauważyć:
x = x - f/f';
i tym przypadku f jest wektorem funkcji, zatem f' jest macierzą, niestety,
bowiem to jest różniczkowane po każdej zmiennej, a nie tylko po jednej,
więc otrzymamy tu : n x n sztuk - macierz, a nie n - wektor.
Xavizo napisał(a):
Jak przekształcić taki kod
aby rozwiązywał układ dwóch równań nieliniowych? Powyższy działa w przypadku układu jednego równania.
f(x) - g(x) = 0
??