Sprawdzmy, jak zachowuje sie standardowe wyrazenie przy
Transkrypt
Sprawdzmy, jak zachowuje sie standardowe wyrazenie przy
Jakobian Sprawdzmy, jak zachowuje sie standardowe wyrazenie przy deklaracji zagniezdzenia zmiennych abc = D@g@Α@x, yD, Β@x, yDD, xD gH1,0L @Α@x, yD, Β@x, yDD ΑH1,0L @x, yD + gH0,1L @Α@x, yD, Β@x, yDD ΒH1,0L @x, yD Oczywiscie normalne podstawienie nie daje obliczenia pochodnej Α Evaluate@abc . 8Α@x, yD :> x<D gH1,0L @x, Β@x, yDD ΑH1,0L @x, yD + gH0,1L @x, Β@x, yDD ΒH1,0L @x, yD i trzeba uzyc Pure function ΑH1,0L @x, yD . 8Α ¦ Hð1 ^ 2 &L< 2x Zdefiniujmy jakobian (macierz) Jak@Α_, Β_D := Outer@D, 8Α@x, yD, Β@x, yD<, 8x, y<D Jak@Α, ΒD 99ΑH1,0L @x, yD, ΑH0,1L @x, yD=, 9ΒH1,0L @x, yD, ΒH0,1L @x, yD== w podobny, jak wyzej sposob mamy konkretna wartosc Jak@Α, ΒD . 8Α :> Hð1 ^ 2 - ð2 ^ 2 &L, Β ¦ Hð1 * ð2 &L< 882 x, - 2 y<, 8y, x<< A teraz przejdzmy do transformacji potrzebnej w metodzie charakterystyk. zadanie bedzie polegalo na automatyzacji do pewnego stopnia rachunkow poszukiwania rownan charakterystyk wybierzmy jakies rownanie i wymiar NN = 3; wyr = y * D@u@x, y, zD, xD - x * D@u@x, y, zD, yD 0 - x uH0,1,0L @x, y, zD + y uH1,0,0L @x, y, zD 0 wykonajmy pewne przeksztalcenia typu D[u[x, y], x_i] ¦ p_i H* zamiana symboliki: *L in = 8x, y, z<; out = Table@Subscript@x, iD, 8i, NN<D 8x1 , x2 , x3 < rule1 = Table@in@@iDD ® out@@iDD, 8i, NN<D 8x ® x1 , y ® x2 , z ® x3 < H* np.: *L x * y . rule1 x1 x2 2 JokobianOrazMetCharakterystyk.nb wyr = wyr . rule1 - x1 uH0,1,0L @x1 , x2 , x3 D + x2 uH1,0,0L @x1 , x2 , x3 D 0 uA = Apply@u, outD u@x1 , x2 , x3 D H* dziala podstawienie: *L 2 * uH0,1L @x1 , x2 D . D@u@x1 , x2 D, x2 D ¦ 3 6 rule2 = Table@D@uA, Subscript@x, iDD ¦ Evaluate@Subscript@p, iDD, 8i, 3<D 9uH1,0,0L @x1 , x2 , x3 D ¦ p1 , uH0,1,0L @x1 , x2 , x3 D ¦ p2 , uH0,0,1L @x1 , x2 , x3 D ¦ p3 = rownanie przyjmuje postac F(x1,x2,x3,z=u,p1,p2,p3)=0: eq0 = wyr . rule2 - p2 x1 + p1 x2 0 F = %@@1DD - p2 x1 + p1 x2 H* rownania pirwsze charakterystyk, x': *L Dx = Table@D@F, Subscript@p, iDD, 8i, NN<D 8x2 , - x1 , 0< eq1 = Table@Subscript@x, iD ', 8i, NN<D Dx 8Hx1 L¢ , Hx2 L¢ , Hx3 L¢ < 8x2 , - x1 , 0< Table@Hold@D@Subscript@x, iD, Hð1 &LDD, 8i, NN<D 8Hold@¶ð1& xi D, Hold@¶ð1& xi D, Hold@¶ð1& xi D< teraz rownanie drugie, z' : H* il. skalarny: *L Inner@Times, 8a, b<, 8x, y<, PlusD H* lub *L 8a, b<.8x, y< ax+by ax+by pVec = Table@Subscript@p, iD, 8i, NN<D 8p1 , p2 , p3 < H* z': *L z ' == Dx.pVec eq2 = z¢ - p2 x1 + p1 x2 z¢ - p2 x1 + p1 x2 Zatem uklad rownan jest: Table@eq1@@1DD@@iDD == eq1@@2DD@@iDD, 8i, NN<D 8Hx1 L¢ x2 , Hx2 L¢ - x1 , Hx3 L¢ 0< dolaczamy rownanie 2: JokobianOrazMetCharakterystyk.nb dolaczamy rownanie 2: uklad = Join@%, 8eq2, eq0<D 8Hx1 L¢ x2 , Hx2 L¢ - x1 , Hx3 L¢ 0, z¢ - p2 x1 + p1 x2 , z¢ - p2 x1 + p1 x2 , - p2 x1 + p1 x2 0< Solve@uklad, 8z ', Subscript@x, 1D ', Subscript@x, 2D '<D 88z¢ ® 0, Hx1 L¢ ® x2 , Hx2 L¢ ® - x1 << Do czesci rownan jest potrzebne jednakze DSolve. Tu (cwiczenie: zautomatyzowac) recznie rownania te wklejono, dopisano parametr 's'. FullForm@Hx1 L¢ D FullForm@x1 'D Derivative@1D@Subscript@x, 1DD Derivative@1D@Subscript@x, 1DD FullForm@Hx2 L¢ @sDD Derivative@1D@Subscript@x, 2DD@sD DSolve@8Hx1 L¢ @sD x2 @sD, Hx2 L¢ @sD - x1 @sD<, 8x1 @sD, x2 @sD<, sD 88x1 @sD ® C@1D Cos@sD + C@2D Sin@sD, x2 @sD ® C@2D Cos@sD - C@1D Sin@sD<< 3