Numeryczne rozwiązywanie równań i układów równań
Transkrypt
Numeryczne rozwiązywanie równań i układów równań
Strona 1 z 12 Lekcja 11 Numeryczne rozwiązywanie równań i układów równań Rozwiązywanie pojedynczego równania - funkcja root Do rozwiązywania jednego równania z jedną niewiadomą służy funkcja root(f(z), z), gdzie: - f(z) jest funkcją lub wyrażeniem, którego pierwiastków szukamy (UWAGA funkcja f może mieć więcej niż jeden argument); - z jest argumentem funkcji f względem, którego szukamy pierwiastków; - funkcja root wymaga zdefiniowania wartości początkowej dla argumentu z, od którego rozpoczyna poszukiwanie numerycznego rozwiązania. Wynikiem działania funkcji root jest taka wartość z, dla której wyrażenie lub funkcja f(z) przyjmuje wartość zero. Zarówno funkcja f(z) jak i sama zmienna z muszą być wielkościami skalarnymi. MathCad oblicza pierwiastki zarówno rzeczywiste jak i zespolone. Aby znaleźć rozwiązanie zespolone, jako wartość początkową należy podać liczbę zespoloną. Tok postępowania jest następujący: 1. Zdefiniować pierwsze przybliżenie poszukiwanego rozwiązania. 2. Zdefiniować funkcję lub wyrażenie, którego pierwiastków szukamy przyrównując je do zera. Jeżeli szukamy pierwiastków równania f(x)=g(x), to zapisujemy je w formie f(x)-g(x). 3. użyć funkcję root wpisując w odpowiednie miejsca wyrażenie i zmienną względem, której znajdujemy rozwiązanie. Szukamy rozwiązania (miejsca zerowego) funkcji exp(x) = x^3 Definiujemy wartość początkową: x := 3 Stosujemy funkcję root zapisując wyrażenie w postaci exp(x)-x^3, wynik obliczeń wpisując pod zmienną a 3 a := root ( exp( x) − x , x) a = 1.857 Jeśli badana funkcja ma kilka pierwiastków, które chcemy znaleźć, to - wartość początkowa musi wskazywać na każdy z nich; - możemy spróbować modyfikacji badanej funkcji biorąc zamiast f(z) funkcję f(z)/(z-a), gdzie a jest wcześniej znalezionym pierwiastkiem funkcji f(z). - w przypadku, gdy podejrzewamy możliwość wystąpienia kilku pierwiastków równania dobrze jest zrobić wykres przebiegu funkcji. Pozwoli to na lokalizację pierwiastków równania. Szukamy pierwiastków równania x^2-1. Stosując różne przybliżenia początkowe, znajdujemy dwa pierwiastki. x := 0.5 root ( x2 − 1 , x) = 1 x := −0.5 root ( x2 − 1 , x) = −1 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 2 z 12 Lekcja 11 Badana funkcja. Istnieje możliwość wystąpienia trzech różnych pierwiastków. 3 f( x) := x − 10 ⋅ x + 2 x := −5 , −4.9 .. 5 50 Rysujemy wykres funkcji f ( x) 0 50 5 0 5 x Znajdujemy pierwiastki równania zmieniając wartości startowe: x := −2 root ( f( x) , x) = −3.258 x := 0 root ( f( x) , x) = 0.201 x := 2 root ( f( x) , x) = 3.057 Znajdujemy pierwiastki równania stosując transformację wyjściowego równania: x := 1 a1 := root ( f( x) , x) a1 = 0.201 ⎛ f( x) , x⎞ ⎝ x − a1 ⎠ a2 = 3.057 f( x) ⎡ , x⎤⎥ ⎣ ( x − a1) ⋅ ( x − a2) ⎦ a3 = −3.258 a2 := root ⎜ a3 := root ⎢ W pewnych przypadkach funkcja root nie znajduje pierwiastków równania i kończy obliczenia z komunikatem "not converging". Może to oznaczać, że: 1. Badane wyrażenie nie posiada pierwiastków. 2. Wartości pierwiastków są zbyt odległe od przybliżenia początkowego. Należy zmienić przybliżenie początkowe i policzyć jeszcze raz. 3. Występują minima i maksima lokalne pomiędzy pierwiastkami. 4. W wyrażeniu występuje nieciągłość pomiędzy początkowym przybliżeniem, a pierwiastkami. 5. Funkcja ma "bardzo płaski przebieg" i nie można uzyskać wystarczającej dokładności obliczeń. W takim przypadku można zbudować funkcję g(x)=f(x)/f'(x) i spróbować dla niej znaleźć pierwiastki. 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 3 z 12 Lekcja 11 Równania z parametrem Gdy chcemy znaleźć kilka pierwiastków równania w zależności od zmieniającego się parametru definiujemy nową funkcję, zależną od zmiennej względem, której szukamy pierwiastków oraz parametru wpływającego na rozwiązania. W funkcji tej po prawej stronie znaku równości wystąpi funkcja root. Interesują nas pierwiastki równania f( a , x) := e x − a ⋅ x2 w zależności od parametru a Definiujemy wartości parametru a, dla których chcemy znaleźć pierwiastki a := 1 .. 10 pierw ( a , x) := root ( f( a , x) , x) Definiujemy funkcję podającą nam rozwiązania x0 := −0.5 Definiujemy wartość początkową dla funkcji root xa := pierw ( a , xa−1) Obliczamy pierwiastki Sprawdzamy rozwiązania a = xa = x e a − a ⋅ ( xa) 2 1 2 3 4 5 6 7 8 9 10 -0.703 -0.54 -0.459 -0.408 -0.371 -0.344 -0.322 -0.304 -0.289 -0.276 2.149·10 -3.128·10 -9.489·10 -4.109·10 -2.158·10 -1.291·10 -8.406·10 -5.81·10 -4.2·10 -3.143·10 -5 -5 -4 -4 -4 -4 -5 -5 -5 -5 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 4 z 12 Lekcja 11 Pierwiastki wielomianów Do znajdowania pierwiastków wielomianów służy funkcja polyroots(v), gdzie v jest wektorem współczynników wielomianu, którego miejsca zerowe poszukujemy. Pierwszy element wektora v to wyraz wolny. Ostatni element wektora v to współczynnik przy wyrazie z najwyższą potęgą. Szukamy pierwiastków wielomianu x^3 - 10x + 2 ⎛ 2 ⎞ ⎜ −10 v := ⎜ ⎟ 0 ⎜ ⎝ 1 ⎠ Definiujemy wektor v ⎛ −3.258 ⎞ polyroots( v) = ⎜ 0.201 ⎜ ⎝ 3.057 ⎠ Szukamy pierwiastków wielomianu o współczynnikach zespolonych x^3 + (3+2i)x^2 + (-4+6i)x - 8i Definiujemy wektor v ⎛ −8i ⎞ ⎜ −4 + 6i v := ⎜ ⎟ ⎜ 3 + 2i ⎝ 1 ⎠ ⎛ −4 ⎞ polyroots( v) = ⎜ −2i ⎜ ⎝ 1 ⎠ 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 5 z 12 Lekcja 11 Rozwiązywanie równań i układów równań - funkcja given - find Obszar rozwiązywania (solve block) given - find pozwala na znajdowanie pierwiastków równań jak i układów równań. MathCad pozwala rozwiązywać układy równań zawierające do pięćdziesięciu równań z pięćdziesięcioma niewiadomymi. Sposób postępowania: 1. Definiujemy wartości początkowe zmiennych względem, których poszukujemy miejsc zerowych; 2. Piszemy nagłówek inicjujący blok rozwiązywanych równań - Given. Wszystko to, co znajduje się po słowie Given, MathCad traktuje jako układ równań do rozwiązania. 3. Piszemy równania i/lub nierówności definiujące rozwiązywane równanie/układ równań; Liczba równań i nierówności musi być nie mniejsza od liczby niewiadomych 4. Piszemy funkcję zamykającą blok rozwiązywanych równań wraz z listą argumentów względem, których poszukujemy rozwiązania - Find(lista zmiennych). Wynikiem działania funkcji find jest: 1. Pojedyncza liczba, gdy funkcja find ma tylko jeden argument; 2. wektor odpowiedzi, gdy funkcja find ma kilka argumentów. Uwagi - wszystkie zmienne używane w bloku given - find muszą być wcześniej zdefiniowane; - wszystko to, co znajduje się pomiędzy słowami given i find traktowane jest jako równanie lub układ równań; wprowadzony z - do oddzielenia prawej od lewej strony równości stosujemy operator przyrównania menu lub skrótem klawiszowym {ctrl}+=; - w nierównościach można stosować operatory relacji: <, >, ≤ , ≥ ; - nie można stosować operatora relacji - różny ≠ ; - wewnątrz bloku given - find nie wolno używać definiującego znaku równości :=; - funkcji Given - Find nie można jawnie zagnieżdżać. Każdy obszar posiada tylko jedno własne given oraz find; - uzyskiwane rozwiązanie można przypisać do nowej funkcji takiej jak f(x):=find(x) i użyć w innym bloku Given - Find; - używane w bloku given - find zmienne nie mogą być tablicami ani zmiennymi iteracyjnymi. Muszą one być wielkościami skalarnymi. Znaleźć rozwiązanie równania x^2 + 10 = e^x z jedną niewiadomą, podstawiając otrzymane rozwiązanie pod zmienną a Definiujemy wartość początkową x := 2 Definiujemy blok Given - Find Given x2 + 10 ex Find( x) = 2.919 Powyższy blok Given - Find jest identyczny z funkcją root ( ) 2 x root ⎡⎣ x + 10 − e , x⎤⎦ = 2.919 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 6 z 12 Lekcja 11 Uzyskane z funkcji find rozwiązanie: 1. można bezpośrednio wyświetlić, tak jak powyżej. 2. Można również przypisać je nowej zmiennej, gdy zamierzamy używać tego rozwiązania w innych miejscach naszego dokumentu. - Gdy rozwiązanie jest skalarem, to zmienna przechowująca to rozwiązanie też jest skalarem (Przykład 1). - Jeśli rozwiązanie jest wektorem to zmienna przechowująca to rozwiązanie też będzie wektorem (Przykład 2). - W przypadku rozwiązania będącego wektorem przypisać je można wektorowi złożonemu z kilku zmiennych (Przykład 3). 3. Można zdefiniować nową funkcję, której przypisana jest funkcji find: np. f(x,y,...,a,b,...):=find(x,y,...), gdzie x, y, ... są argumentami funkcji find, natomiast a, b, ... są parametrami, od których zależy poszukiwane rozwiązanie. Przykład 1 Rozwiązanie jest wielkością skalarną φ := 1 Given φ 1+φ 1 φ a := Find( φ ) a = 1.618 Przykład 2 Rozwiązanie jest wielkością wektorową x := 1 y := 1 Given 2 2 x +y x+ y 6 2 sol = ⎛⎜ ⎞ ⎝ −0.414 ⎠ sol := Find( x , y) 2.414 Przykład 3 Rozwiązanie jest wielkością wektorową, ale każdą ze współrzędnych przypisano innej zmiennej x := −1 y := 1 Given x2 + y2 6 x+ y ⎛ xval ⎞ := Find( x , y) ⎜ ⎝ yval ⎠ 2 xval = −0.414 yval = 2.414 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 7 z 12 Lekcja 11 Definiowanie bloku Given - Find jako funkcji z parametrami t := 0.02 Wartość początkowa Given ⎛ ε ⋅ D− 1 1 t −2.0 ⋅ log⎜ ⎝ 3.7 2.51 + ⎞ R⋅ t ⎠ Rozwiązywane równanie Funkcja ft(ε,D,R) jest zależna od trzech parametrów i podaje rozwiązanie równania uzyskanego w bloku given - find. Każdorazowe użycie funkcji ft powoduje, że funkcja find rozwiązuje układ równań od nowa, dla nowego zbioru parametrów. Parametry można zmieniać poprzez prostą zamianę, użycie zmiennych iteracyjnych lub zmiennych z indeksami. Taki sposób postępowania można użyć zarówno wtedy, gdy rozwiązanie jest skalarem jak i wtedy, gdy rozwiązanie jest wektorem. ft( ε , D , R) := Find( t) D := 2.5 ε := 0.00085 i := 0 .. 20 ri := 10 4 + 10 4⋅ i Wartości parametrów, od których zależy rozwiązanie fi := ft( ε , D , ri) Rozwiązanie jako funkcja zmiennego parametru r 0.04 Wykres zależności rozwiązania od parametru 0.03 f 0.02 0.01 0 1 .10 5 2 .10 5 r 3 .10 5 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 8 z 12 Lekcja 11 Ciąg kilku rozwiązań danych w formie wektorowej x := 1 y := 1 Given 2 2 x +y R x+ y 2 2 ⎛ ⎞ − 9 ⎝ 2.342 × 10 ⎠ F ( 4) = ⎜ F ( R) := Find( x , y) R := 2 .. 6 F ( R) 0 = F ( R) 1 = 1 1.707 2 2.225 2.414 1 0.293 2.342·10 -9 -0.225 -0.414 Funkcja F(R)podaje rozwiązania układu równań dla danego parametru R. Rozwiązanie to jest wektorem, w którym pierwsza współrzędna odpowiada pierwszemu argumentowi funkcji find, druga współrzędna natomiast drugiemu argumentowi funkcji find. Chcąc uzyskać rozwiązania należy użyć funkcji F odpowiednio z indeksem 0 i 1. MathCad może przedstawić tylko jeden wynik jako rozwiązanie obszaru rozwiązywania. W przypadku, gdy istnieją rozwiązania wielokrotne można próbować innych wartości początkowych, lub też wprowadzić dodatkowe ograniczenia, wykluczające bieżące rozwiązania. Przykład 2 i 3 powyżej pokazał jak zmiana wartości początkowej może dać inne rozwiązanie. Wprowadzamy dodatkowe ograniczenia w bloku given - find x := 1 y := 1 Wartość początkowa Given 2 2 x +y x+ y 6 x≤ 1 Rozwiązywany układ równań 2 y> 2 Ograniczenia nałożone na rozwiązanie ⎛ xval ⎞ := Find( x , y) ⎜ ⎝ yval ⎠ xval = −0.414 2 2 xval + yval = 6 Sprawdzamy rozwiązanie x := 1 yval = 2.414 y := 1 x+ y = 2 Wartość początkowa Given 2 2 x +y x> 1 x+ y 6 y≤ 2 ⎛ xval ⎞ := Find( x , y) ⎜ ⎝ yval ⎠ Mariusz B. Bogacki 2 Rozwiązywany układ równań Ograniczenia nałożone na rozwiązanie xval = 2.414 yval = −0.414 22.09.2008 Technologia Informacyjna Pracownia Projektowa Strona 9 z 12 Lekcja 11 xval2 + yval2 = 6 Sprawdzamy rozwiązanie x+ y = 2 W pewnych sytuacjach MathCad nie podaje rozwiązania. Może to oznaczać, że: 1. Pierwiastki nie istnieją; 2. Rozwiązanie jest zespolone, a wartość pierwszego przybliżenia jest liczbą rzeczywistą, lub na odwrót; 3. Użyte wartości początkowe są daleko położone od rozwiązania. Pomiędzy wartością początkową, a rozwiązaniem istnieją minima lokalne i MathCad nie jest wstanie wskazać na rozwiązanie. Należy zmienić wartości początkowe i/lub wstawić nierówności chroniące program przed poszukiwaniami w niewłaściwych kierunkach. 4. Funkcja jest "bardzo płaska" i MathCad nie jest wstanie znaleźć rozwiązania z wystarczającą dokładnością. x := 1 Given x2 + 3 0 Find( x) = x := i Given 2 x +3 0 Find( x) = 1.732i Brak rzeczywistego rozwiązania Liczba urojona i jest wprowadzona jako 1i MathCad wymaga, aby liczba wyrażeń (ograniczeń) w bloku rozwiązywania była nie mniejsza od liczby niewiadomych. Gdy naruszy się ten warunek pojawia się komunikat "too few constraints". Czasami MathCad próbuje znaleźć rozwiązanie, trudno je jednakże zinterpretować jako poprawne. Celem rozwiązania takiego problemu należy albo dopisać ograniczenia w bloku given - find, tak, aby uzyskać tyle równań ile jest niewiadomych, albo też potraktować "nadmiarowe" niewiadome jako parametry. x := 10 y := 50 z := 5 v := 0 w := −2 Given x + y − z − 2⋅w 5 x − 2⋅ y + w − v 3 ⎛x⎞ ⎜y ⎜ ⎟ ⎜ z ⎟ := Find( x , y , z , v , w) ⎜v⎟ ⎜ ⎝w⎠ x = 10 y = 4.667 Sprawdzamy rozwiązanie: MathCad sam przyjął niektóre zmienne jako parametry. z=5 v=0 x + y − z − 2⋅w − 5 = 0 w = 2.333 x − 2⋅ y + w − v − 3 = 0 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 10 z 12 Lekcja 11 Given x + y − z − 2⋅w 5 x − 2⋅ y + w − v 3 Zmienne x, y oraz v MathCad traktuje jako stałe parametry ⎛z⎞ := Find( z , w) ⎜ ⎝w⎠ Sprawdzamy rozwiązanie: z=5 w = 2.333 x + y − z − 2⋅w − 5 = 0 x − 2⋅ y + w − v − 3 = 0 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 11 z 12 Lekcja 11 Problemy do samodzielnego rozwiązania Znaleźć pierwiastki równania: T ⎛ x 1 2 ⎞ ⎜ 1. ⎜ −3 x2 −1 ⎟ ⎜ 3 ⎝ 1 0 x ⎠ 0; 2. x^5-4x^4-155x^3+210x^2+5544x+5184=0; x ⌠ t−1 3. ⎮ dt ⎮ t2 + 1 ⌡0 0; 4. x^4+x^3+2x-4=0; 5. x^3-4x^2-4x-5=0; 6. x^3+60x-80=0; 7. 4x^3-4x^2+x-1=0; 8. z^3-6z-9=0; 9. x^3-4x^2+x+6=0; 10. x^3-5x^2-2x+24=0; 11. 9x^3+18x^2-x-2=0; 12. x^3-6x+3=0; 13. y=sin(x)-x^3; ⎛1 x ⎞ 14. ⎜ 0 ⎝x X⎠ T ⎛ x 1 2 ⎞ ⎜ 15. ⎜ −1 x2 −2 ⎟ ⎜ 3 ⎝ 1 1 x ⎠ 0 Wykreślić zależność pierwiastków równania/układu równań od parametru a 1. x^3+x^2*a-x-a=0; x ⌠ t−1 2. ⎮ dt ⎮ t2 + 1 ⌡a 0; 3. x^2+y^2=a i x=y; 1 d 4. cos ( x) − ax4 4 dx T ⎛ x 1 a−1⎞ ⎜ 5. ⎜ −1 x2 −2 ⎟ ⎜ 3 ⎝ 1 0 x ⎠ y; 0 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa Strona 12 z 12 Lekcja 11 Znaleźć pierwiastki układów równań: 3 ⎞ 1 2y ⎛ x ⎜ 1 x−1 y+ 2 5 ⎟ 1. ⎜ ⎜x+ y 2 x+ 1 y−2 ⎟ ⎜ x 0 1 ⎠ ⎝ x 0i π ⌠ sin ( x) 2. ⎮ dx ⎮ x ⌡a 2 2 x +y ix x+y=2; 5 y+ ∑ n=1 1 n2 ; 3. A+B=1/(AB) i A/B=A; 4. x*y=10 i x^2-y^2=1; 5. y=2x^2-5 i y=x-0.3; 6. y=x^3-6x-9 i y=40x-12; 7. y=x^2-15 i y=x; 8. x+y=1, x-z=-2 i 2x+y+3z=19; 9. x+y-2=0, x-y+z=2 i-x+y+z=4; 10. 3x+y-2z=5, 5x-3y-6z=11; 11. x^2+y^2-25=0, 3x-2y=6; 12. x^2+y^2=25 i y*x=-12; 13. x^2-y^2=-4 i y^2=5x; 14. y=0.2^x-6x^2-90 i y=50x+5; 15. a+b=2, b+c=-1, c+d=2 i d+a=5; 16. x+y=12 i 1/x+1/y=3/8; 17. x^2-y^2=24 i x-y=4; 18. x^3+y^3=3 i x+y=1; 22.09.2008 Mariusz B. Bogacki Technologia Informacyjna Pracownia Projektowa