> restart; > with(plots): > L:=500; x0:=200; y0:=300; tau0:=20/180*Pi; L := 500 x0 := 200 y0 := 300 tau0 := 1/9 Pi > kappa_proba:=sin(2*Pi/(8*L)*l); kappa_proba := sin(1/2000 Pi l) > kappa:=0.001/subs(l=L, kappa_proba)*kappa_proba; sin(1/2000 Pi l) kappa := .001 ---------------- sin(1/4 Pi) > plot(kappa, l=0..L); > tau:=tau0+int(kappa, l=0..s); > x:=x0+int(cos(tau), s=0..t); > y:=y0+int(sin(tau), s=0..t); tau := 1/9 Pi - .9003163158 cos(.001570796327 s) + .9003163158 t / | x := 200 + | | / 0 cos(1/9 Pi - .9003163158 cos(.001570796327 s) + .9003163158) ds t / | y := 300 + | | / 0 sin(1/9 Pi - .9003163158 cos(.001570796327 s) + .9003163158) ds > p_atm:=plot([x,y, t=0..L], color=red): > display(p_atm); > xL:=evalf(subs(t=L, x)); > yL:=evalf(subs(t=L, y)); > tauL:=evalf(subs(s=L, tau)); xL := 651.2206184 yL := 511.7441482 tauL := .6127623942 > kappa2:=0.001; > tau2:=tauL+int(kappa2, l=0..s); > x2:=xL+int(cos(tau2), s=0..t); > y2:=yL+int(sin(tau2), s=0..t); kappa2 := .001 tau2 := .6127623942 + .001000000000 s x2 := 76.0911560 + 1000. sin(.6127623942 + .001000000000 t) y2 := 1329.806555 - 1000. cos(.6127623942 + .001000000000 t) > p_kivez:=plot([x2,y2, t=0..L], color=green): > display(p_kivez); > p_csatl:=pointplot([xL,yL], color=blue): > display(p_atm, p_kivez, p_csatl); #1.a) feladat megoldása > n:=4; n := 4 > Tx:=convert(taylor(x, t=L/2, n+1), polynom); 2 Tx := 204.3328986 + .9140656042 t - .0001097454658 (t - 250) -6 3 -9 4 - .1833475706 10 (t - 250) - .1016648036 10 (t - 250) > plot(abs(x-Tx), t=0..L); > n:=4; > Ty:=convert(taylor(y, t=L/2, n+1), polynom); > plot(abs(y-Ty), t=0..L); n := 4 2 Ty := 289.4655460 + .4055663585 t + .0002473443702 (t - 250) -6 3 -9 4 + .2928649503 10 (t - 250) - .1132041422 10 (t - 250) > #1.b) Tehát 4. fokú Taylor-polinom mindkét esetben jó, ha t0=L/2. > n:=7; > Tx:=convert(taylor(x, t=L/2, n+1), polynom); > Ty:=convert(taylor(y, t=L/2, n+1), polynom); n := 7 2 Tx := 204.3328986 + .9140656042 t - .0001097454658 (t - 250) -6 3 -9 4 - .1833475706 10 (t - 250) - .1016648036 10 (t - 250) -13 5 - .4427653662 10 (t - 250) -16 6 + .7149498047 10 (t - 250) -19 7 + .3266048673 10 (t - 250) 2 Ty := 289.4655460 + .4055663585 t + .0002473443702 (t - 250) -6 3 -9 4 + .2928649503 10 (t - 250) - .1132041422 10 (t - 250) -13 5 - .9869378978 10 (t - 250) -17 6 - .9214359400 10 (t - 250) -19 7 + .1377604793 10 (t - 250) > p_atm_koz:=plot([Tx,Ty, t=0..L], color=black): > display(p_atm, p_atm_koz); > #1.c) A két görbe teljesen egymáson megy, a hiba kisebb, mint a > vonalvastagság. > restart; #2.feladat > de:=diff(y(x), x)+1000*y(x)=1/(x+3); > kezdf:=y(0)=1; /d \ 1 de := |-- y(x)| + 1000 y(x) = ----- \dx / x + 3 kezdf := y(0) = 1 > mo:=dsolve({de,kezdf}, y(x)); mo := y(x) = -Ei(1, -1000 x - 3000) exp(-1000 x - 3000) + exp(-1000 x) (Ei(1, -3000) exp(-3000) + 1) > y_mo:=rhs(mo); y_mo := -Ei(1, -1000 x - 3000) exp(-1000 x - 3000) + exp(-1000 x) (Ei(1, -3000) exp(-3000) + 1) > plot(y_mo, x=0..2); > #Ha kikapcsoljuk a rajzon a tengelyeket, akkor látható, hogy a > megoldást csak darabonként rajzolja ki a program - numerikus megoldás > kell. > nmo:=dsolve({de,kezdf}, y(x), numeric); nmo := proc(rkf45_x) ... end > nmo(0.1); [x = .1, y(x) = .0003226847643185727] > y_nmo:=x->rhs(nmo(x)[2]); y_nmo := x -> rhs(nmo(x)[2]) > plot('y_nmo(x)', x=0..2); #Ezt már végig rajzolja, csak nagyon közel > halad a tengelyekhez. Ha a feladatban levesszük az 1000-et pl. 10-re, > akkor sokkal jobban látszik a kétféle megoldás közti különbség. > restart; #3.feladat > with(linalg): Warning, new definition for norm Warning, new definition for trace > A:=matrix(3,3, [1,0,3, 0,5,6, 3,6,9]); [1 0 3] [ ] A := [0 5 6] [ ] [3 6 9] > ev:=[evalf(eigenvectors(A))]; -9 ev := [[13.79607514 + .1 10 I, 1., [ -9 -9 ] {[1., 2.909496550 + .1 10 I, 4.265358379 + .1 10 I]}], [ -8 -1.121927523 - .11 10 I, 1., [ -9 -9 ] {[1., .6932220334 + .7 10 I, -.7073091753 - .3 10 I]}], [ -9 2.325852383 + .7 10 I, 1., [ -9 -9 ] {[1., -.9916074734 - .2 10 I, .4419507933 + .3 10 I]}]] > [ev[1][1], ev[2][1], ev[3][1]]; -9 -8 [13.79607514 + .1 10 I, -1.121927523 - .11 10 I, -9 2.325852383 + .7 10 I] > #látszik:az 1. a legnagyobb sajátérték. > ev[1][3]; #a keresett sajátvektor [ -9 -9 ] {[1., 2.909496550 + .1 10 I, 4.265358379 + .1 10 I]} > restart; #4.feladat > g:=sin(2*x)*cos(3*y)/(x^2+2*y^2+4); sin(2 x) cos(3 y) g := ----------------- 2 2 x + 2 y + 4 > plot3d(g, x=-2..2, y=-1..1, shading=zhue, axes=boxed, > style=patchcontour); > #A tartományban 1 lok. max és egy lok. min van. > plot3d(g, x=-2.05..2.05, y=-1.05..1.05, shading=zhue, axes=boxed, > style=patchcontour, contours=25); > gx:=diff(g, x); > gy:=diff(g, y); cos(2 x) cos(3 y) sin(2 x) cos(3 y) x gx := 2 ----------------- - 2 ------------------- 2 2 2 2 2 x + 2 y + 4 (x + 2 y + 4) sin(2 x) sin(3 y) sin(2 x) cos(3 y) y gy := -3 ----------------- - 4 ------------------- 2 2 2 2 2 x + 2 y + 4 (x + 2 y + 4) > solve({gx,gy},{x,y}); {y = 1/6 Pi, x = 0} > #lok. max.: > lokmax:=fsolve({gx,gy},{x,y}, x=0..1, y=-0.5..0.5); lokmax := {x = .7074398864, y = 0} > plot3d(g, x=0..1, y=-0.5..0.5, shading=zhue, axes=boxed, > style=patchcontour); > #lok. min.: > lokmin:=fsolve({gx,gy},{x,y}, x=-2..0, y=-0.5..0.5); lokmin := {x = -.7074398864, y = 0} > plot3d(g, x=-1.5..0, y=-0.5..0.5, shading=zhue, axes=boxed, > style=patchcontour); > #A fenti kezdő ábra alapján nem biztos, hogy a határ közelében van-e > lok. szé.: > fsolve({gx,gy},{x,y}, x=0..2, y=0.8..1); {x = .7291545188, y = .9805805101} > fsolve({gx,gy},{x,y}, x=-2..0, y=0.8..1); {x = -.7291545188, y = .9805805101} > #Tehát van! Hasonlón végig lehetne nézni a többi határ környezetet. > #Végülis 6 lok. szé. hely van a megadott tartományban. > > #Nyeregpont: (0, 0.5) közelében: > fsolve({gx,gy},{x,y}, x=-0.5..0.5, y=0..1); {x = 0, y = .5235987756} > plot3d(g, x=-0.5..0.5, y=0..1, shading=zhue, axes=boxed, > style=patchcontour); > #Az eléséges feltétel vizsgálata a fenti nyeregpontra: > nyp:=fsolve({gx,gy},{x,y}, x=-0.5..0.5, y=0..1); nyp := {y = .5235987756, x = 0} > gxx:=diff(g, x,x): gxy:=diff(g, x,y): gyy:=diff(g, y,y): > d:=gxx*gyy-(gxy)^2: > evalf(subs(nyp, d)); -1.740211871 > #Ez negatív, tehát tényleg nyeregpont. > > #A lok. max. vizsg.: > evalf(subs(lokmax, d)); > evalf(subs(lokmax, gxx)); 2.117579044 -.9755613313 > #A lok. min. vizsg.: > evalf(subs(lokmin, d)); > evalf(subs(lokmin, gxx)); 2.117579044 .9755613313 > #Tényleg azok. > > #Megj. Ennyire részletes megoldások nem kellettek a teljes > pontszámhoz.