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

Podobne dokumenty