> restart; > #1. feladat > f:=sin(Pi*x)^2/ln(x); 2 sin(Pi x) f := ---------- ln(x) > #1.a) > T3:=convert(taylor(f, x=2, 4), polynom); 2 2 2 3 Pi (x - 2) Pi (x - 2) T3 := ------------ - 1/2 ------------ ln(2) 2 ln(2) > plot([f, T3], x=1..3, color=[red,green]); > #1.b) > hibafv:=abs(f-T3); | 2 2 2 2 3 | | sin(Pi x) Pi (x - 2) Pi (x - 2) | hibafv := | ---------- - ------------ + 1/2 ------------ | | ln(x) ln(2) 2 | | ln(2) | > plot(hibafv, x=1..3); > #Az ábráról látszik, hogy a hiba x=1-nél a legnagyobb és értéke kb. > 24.4 (rákattintással). > > n:=4; > Tn:=convert(taylor(f, x=2, n+1), polynom): > hibafv:=abs(f-Tn): > plot(hibafv, x=1..3); n := 4 > #Tehát n=4-nél a hiba maximuma: x=3-nál, értéke kb. 33. Ezért növelni > kell n-et. Átmásolva: > n:=21; > Tn:=convert(taylor(f, x=2, n+1), polynom): > hibafv:=abs(f-Tn): > plot(hibafv, x=1..3); n := 21 > #Tehát 21-ed fokú Taylor-polinom már jó. > #1.c) > p:=a*x^2+b*x+c; 2 p := a x + b x + c > hiba:=evalf(Int(expand((f-p)^2), x=1..3)); 3. / 4 2 2 2 2 | %1 2. %1 a x 2. %1 b x 2. %1 c 2 4 hiba := | ------ - ----------- - ---------- - -------- + a x | 2 ln(x) ln(x) ln(x) / ln(x) 1. 3 2 2 2 2 + 2. a x b + 2. a x c + b x + 2. b x c + c dx %1 := sin(3.141592654 x) > hiba_a:=diff(hiba, a); 3. / | hiba_a := | | / 1. 2 2 2. sin(3.141592654 x) x 4 3 2 - ------------------------- + 2 a x + 2. x b + 2. x c dx ln(x) > hiba_b:=diff(hiba, b); 3. / | hiba_b := | | / 1. 2 2. sin(3.141592654 x) x 3 2 - ------------------------ + 2. a x + 2 b x + 2. x c dx ln(x) > hiba_c:=diff(hiba, c); hiba_c := 3. / 2 | 2. sin(3.141592654 x) 2 | - ---------------------- + 2. a x + 2. b x + 2 c dx | ln(x) / 1. > fsolve({hiba_a,hiba_b,hiba_c},{a,b,c},{a=0..1,b=-1..2,c=0..2}); {c = 0.2320264715, a = 0.04482101675, b = 0.4044921287} > p_opt:=subs(%, p); 2 p_opt := 0.04482101675 x + 0.4044921287 x + 0.2320264715 > #Ellenőrzés: > plot([f,p_opt], x=1..3, color=[red,green]); > #Hát, nem a legjobb illeszkedés, de legalább a zöld a piros között > megy. Ezt tudtuk kihozni a Maple-lel ennyi munkával. > > #2. feladat > g:=(x^3+y)*exp(-y^4-x^2); 3 4 2 g := (x + y) exp(-y - x ) > plot3d(g, x=-5..5, y=-5..5, axes=boxed, shading=zhue, > style=patchcontour, numpoints=10000); > #Úgy néz ki, hogy 2 lok. max. és 2 lok. min. van. > gx:=diff(g,x); gy:=diff(g,y); 2 4 2 3 4 2 gx := 3 x exp(-y - x ) - 2 (x + y) x exp(-y - x ) 4 2 3 3 4 2 gy := exp(-y - x ) - 4 (x + y) y exp(-y - x ) > solve({gx,gy},{x,y}); 2 {y = RootOf(2 _Z + 1, label = _L2), x = 0}, 2 {y = RootOf(2 _Z - 1, label = _L3), x = 0}, { 2 x = RootOf(-%1 + _Z , label = _L5), 2 y = -1/2 (-3 + 2 %1) RootOf(-%1 + _Z , label = _L5)} 3 4 5 2 %1 := RootOf(4 + 162 _Z - 108 _Z + 24 _Z - 81 _Z , label = _L4) > evalf(allvalues({x = 0, y = RootOf(2*_Z^2+1,label = _L2)})); {y = 0.7071067810 I, x = 0.}, {x = 0., y = -0.7071067810 I} > evalf(allvalues({x = 0, y = RootOf(2*_Z^2-1,label = _L3)})); {x = 0., y = 0.7071067810}, {x = 0., y = -0.7071067810} > evalf(allvalues({y = > -1/2*(-3+2*RootOf(24*_Z^5+4-81*_Z^2+162*_Z^3-108*_Z^4,label = > _L4))*RootOf(-RootOf(24*_Z^5+4-81*_Z^2+162*_Z^3-108*_Z^4,label = > _L4)+_Z^2,label = _L5), x = > RootOf(-RootOf(24*_Z^5+4-81*_Z^2+162*_Z^3-108*_Z^4,label = > _L4)+_Z^2,label = _L5)})); {x = 0.5634484893, y = 0.6662923755}, {y = -0.6662923755, x = -0.5634484893}, {x = 0.9575588204, y = 0.5583344555}, {y = -0.5583344555, x = -0.9575588204}, { x = 1.318814056 + 0.1151527047 I, y = -0.2630903205 - 0.4265891132 I}, { y = 0.2630903205 + 0.4265891132 I, x = -1.318814056 - 0.1151527047 I}, {x = 0.4317566846 I, y = 0.7281204460 I}, {y = -0.7281204460 I, x = -0.4317566846 I}, { y = -0.2630903205 + 0.4265891132 I, x = 1.318814056 - 0.1151527047 I}, { x = -1.318814056 + 0.1151527047 I, y = 0.2630903205 - 0.4265891132 I} > #A komplex gyököket persze elhagyjuk, így marad 6 számpár - ezek a > stac. pontok a Maple szerint. Még eygszer a rajzot most már csak a > fontosabb részekről: > plot3d(g, x=-1.5..1.5, y=-1.5..1.5, axes=boxed, shading=zhue, > style=patchcontour, numpoints=10000, contours=20); > #Így is 4 lok. sz.é. látszik. > #2.b) Lehetne a grad, illetve a hessian parancsokkal is, de így is: > gxx:=diff(g,x,x): gxy:=diff(g,x,y): gyy:=diff(g,y,y): > d1:=gxx: d2:=gxx*gyy-(gxy)^2: > #Megvizsgálva az első 3 stac. pontot: > evalf(subs({x = 0., y = .7071067810}, [d1,d2])); #lok. max. [-1.101390630, 4.852245277] > evalf(subs({x = 0., y = -.7071067810}, [d1,d2])); #lok. min. [1.101390630, 4.852245277] > evalf(subs({x = .5634484893, y = .6662923755}, [d1,d2])); #nyeregpont [0.3688572844, -1.707397945] > #gradiens-mező a nyergpont körül: > with(plots): Warning, the name changecoords has been redefined > fieldplot([gx,gy], x=0.5..0.6, y=0.6..0.7, arrows=thick, grid=[7,7]); > #Mintha vízszintes irányban a nyilak kifelé, függőleges irányban > befelé mennének. A rendes rajz is ugyanitt: > plot3d(g, x=0.5..0.6, y=0.6..0.7, axes=boxed, shading=zhue, > style=patchcontour, numpoints=10000, contours=20); > #Tényleg nyeregpont. > > #3. feladat > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > A:=matrix(3,3, [2,1,-3, 3,-1,0, 1,-2,3]); [2 1 -3] [ ] A := [3 -1 0] [ ] [1 -2 3] > b:=vector([5,4,-1]); b := [5, 4, -1] > x:=linsolve(A,b,'r',t); x := [t[1], 3 t[1] - 4, 5/3 t[1] - 3] > #Így végtelen sok megoldás van. > solve(x[1]=7, t[1]); 7 > t[1]:=%; t[1] := 7 > x[2]; 17 > x[3]; 26/3 >