Układy równań nieliniowych
Marcin Orchel
1 Zadania
1.1 Zadania na 3.0
Napisać skrypt w R. W skrypcie:
• rozwiązać przykładowe równania nieliniowe, wyświetlić dokładność wyliczenia
• rozwiązać problem wyznaczania wartości funkcji odwrotnej za pomocą rozwiązania równania nieliniowego
• dla wybranych układów równań nieliniowych (z jednym równaniem oraz z wieloma) znaleźć rozwiązanie dwoma wybranymi metodami.
• znaleźć rozwiązania dla układu równań wielomianowych
• wykonać testy dla różnej liczby rozwiązań (zero, jedno, kilka, nieskończenie wiele)
• wykonać testy szybkości metod z przekazaniem macierzy Jacobiego do metody np.
nleqslv
• porównać jakość znalezionych rozwiązań
• wyświetlić wykresy dla testowanych układów równań
• rozwiązać układ równań nieliniowych za pomocą metody optymalizacji
• wykonać testy dla różnych warunków stopu
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki
• jakość możemy porównać za pomocą porównania miejsca zerowego z miejscem zerowym obliczonym metodą symboliczną lub za pomocą porównania błędu dla poszczególnych równań po podstawieniu znalezionych wartości zmiennych
• przykłady układów równań nieliniowychhttp://www.mathworks.com/help/optim/
ug/fsolve.html
• można wykorzystać następujące równania x5− x + 1 = 0 (x − 1)2(x + 1)3+ 1
x4+ 0.1 − 0.731 = 0 e−x = x
Równanie Keplera
x − ε sin (x) = M
gdzie ε przyjmuje wartości z przedziału [0, 1], równanie van der Waalsa, wyznacze- nie liczby π, wielomian Wilkinsona.
• Dla funkcji f : (0, ∞) → R takiej, że
f (x) = 1
x1,5+ x (1)
obliczamy f−1(5), szukamy x takiego, że f (x) − 5 = 0. Rozwiązanie na wolframal- pha.com http://www.wolframalpha.com/input/?i=1%2F(x%5E(1.5)+%2B+x)+%
3D+5.
• równanie
sin3(x) + cos (3s) = 0 (2)
oraz układ równań
(s3+ 4c3− 3c = 0
s2+ c2− 1 = 0 (3)
• układ równań wielomianowych w postaci łańcucha regularnego
x2− 1 = 0
(x − 1) (y − 1) = 0 y2− 1 = 0
(4)
• https://en.wikipedia.org/wiki/System_of_polynomial_equations
• układy wielu równań nieliniowych ,https://cran.r-project.org/web/packages/
BB/vignettes/BBvignetteJSS.pdf
Wskazówki do R
• w uniroot końce przedziału muszą mieć przeciwne znaki, parametr extendInt
• w multiroot nie da się podać kilku punktów startowych
• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/uniroot.html
• https://stat.ethz.ch/R-manual/R-devel/library/base/html/polyroot.html
• https://www.rdocumentation.org/packages/rootSolve/topics/uniroot.all
• https://www.rdocumentation.org/packages/rootSolve/topics/multiroot
• http://finzi.psych.upenn.edu/library/NLRoot/html/BFfzero.html
• http://finzi.psych.upenn.edu/library/NLRoot/html/NDHfzero.html
• http://finzi.psych.upenn.edu/library/NLRoot/html/NIMfzero.html
• http://finzi.psych.upenn.edu/library/NLRoot/html/SMfzero.html
• https://www.rdocumentation.org/packages/nleqslv/topics/nleqslv
• https://www.rdocumentation.org/packages/nleqslv/topics/searchZeros
• https://www.rdocumentation.org/packages/nleqslv/topics/testnslv
• http://search.r-project.org/library/BB/html/BBsolve.html
• http://search.r-project.org/library/BB/html/dfsane.html
• http://search.r-project.org/library/BB/html/multiStart.html
• http://search.r-project.org/library/BB/html/sane.html
• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html
• https://www.rdocumentation.org/packages/systemfit/topics/nlsystemfit Wskazówki do Matlaba
• do wyszukiwania miejsc zerowych metodami numerycznymi użyć funkcji, http:
//www.mathworks.com/help/matlab/ref/fzero.html oraz opcjonalnie http://
www.mathworks.com/help/curvefit/fnzeros.html z curve fitting toolbox lub
http://www.mathworks.com/help/matlab/ref/roots.htmllubhttp://www.mathworks.
com/help/optim/ug/fsolve.html
• do wyszukiwania miejsc zerowych metodami symbolicznymi użyć funkcji http://
www.mathworks.com/help/symbolic/solve.html, jeśli funkcja nie może znaleźć rozwiązania symbolicznego, używany jest solver numeryczny
• można przetestować dodatkowo wyszukiwanie miejsc zerowych w optimtool.
Przykłady do R
• f <- function(x) (x-1)*x^2*(x+2)^3 print(uniroot(f, c(-3, -1)), digits=22)
• parametry tol (domyślny √
εM) i maxiter (domyślnie 1000)
print(uniroot(f, c(-3, -1), tol=.Machine$double.eps)$root, digits=22)
• zapisanie znajdowania miejsca zerowego jako problemu optymalizacji print(optimize(function(x) abs(f(x)), c(-3, -1)),
tol=.Machine$double.eps)$minimum, digits=22)
• zastosowanie polyroot
as.numeric(polyroot(c(0, 0, -8, -4, 6, 5, 1)))
• funkcja ze wskazówek
str(uniroot(function(x) 1/(x^1.5 + x) - 5, c(0.1, 100)))
• zapisanie znajdowania miejsca zerowego układu równań nieliniowych jako problemu optymalizacji, dla układu równań
(x21− x2− 0.5 = 0
−x1+ x22− 0.5 = 0 (5)
Równanie na wolframalpha.com http://www.wolframalpha.com/input/?i=x1%
5E2+-+x2+-+0.5+%3D+0,+-x1%2Bx2%5E2+-+0.5+%3D+0 f1 <- function(x) x[1]^2 - x[2] -0.5
f2 <- function(x) -x[1] + x[2]^2 -0.5 f3 <- function(x) x[1]^2 - x[2] +0.5 f4 <- function(x) -x[1] + x[2]^2 +0.5
optim(c(0,0), function(x) f1(x)^2 + f2(x)^2, control=list(reltol=1e-16))[1:2]
optim(c(0,0), function(x) f3(x)^2 + f4(x)^2, control=list(reltol=1e-16))[1:2]
1.2 Zadania na 4.0
• Zdefiniować wybrane krzywe z radialnymi funkcjami bazowymi (RBF) postaci
n
X
i=1
αiexp −k ~xi− ~xk2
2σ2 = 0 . (6)
Proszę dobrać tak parametry n > 1, σ, punkty ~xi aby w pierwszym przypadku rozwiązanie było funkcją ostatniej współrzędnej, w drugim przypadku rozwiązanie nie było funkcją ostatniej współrzędnej (rozwiązaniem jest krzywa zamknięta).
Wybrać krzywe zarówno dwuwymiarowe jak i trójwymiarowe.
• Napisać skrypt w Matlabie, który znajduje rozwiązania za pomocą rozwiązywania równań nieliniowych.
• Obliczyć średni błąd za pomocą porównania rozwiązania z prawidłowym rozwią- zaniem lub obliczyć błąd za pomocą porównania lewej strony równania z zerem.
• Wyświetlić wykresy oczekiwanych i znalezionych rozwiązań.
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.
Wskazówki
• Spróbkować wartości zmiennej x bez ostatniej współrzędnej, dla każdej próbki rozwiązać równanie nieliniowe ze zmienną, która jest ostatnią współrzędną.
1.3 Zadania na 5.0
• Dla wybranych zbiorów danych dla regresji np. z UCI Machine Learning Repository lub StatLib - DataSets Archive lub z http://kaggle.com dokonać aproksymacji wielowymiarowej oraz wyszukać miejsca zerowe funkcji aproksymujących. Zinter- pretować te punkty z odwołaniem do znaczenia danych. Można punkty przesunąć w górę lub dół tak aby istniały miejsca zerowe.
• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.