> restart:
WYZNACZANIE ŚCISAYCH ROZWIZAC
WYBRANYCH TYPÓW RÓWNAC
(solve, isolve, rsolve dsolve)
Znajdowanie pierwiastków, sortowanie, przypisywanie nazw pierwiastkom, sprawdzanie rozwiązań
Ogólna budowa komendy solve
solve ( r, n );
r - układ równań lub nierówności (zbiór lub lista)
n - niewiadome (zbiór lub lista)
>
Równania algebraiczne o współczynnikach liczbowych
( solve )
Podejście najprostsze
> solve(x^2-3*x+1=0,x);
3 5 3 5
+ , -
2 2 2 2
> x;
x
> x1:=%%[2];
3 5
x1 := -
2 2
> x2:=%%%[1];
3 5
x2 := +
2 2
> simplify(subs(x=x1,x^2-3*x+1=0)); # sprawdzenie rozwiązań dopiero po przypisaniu im
nazw
0 = 0
> simplify(subs(x=x2,x^2-3*x+1=0));
0 = 0
Podejście bardziej eleganckie
> restart:
> row:=x^2-3*x+1=0;
row := x2 - 3 x + 1 = 0
> roz:=solve(row,x);
3 5 3 5
roz := + , -
2 2 2 2
> simplify(subs(x=roz[1],row)); # sprawdzenie rozwiązań przed przypisaniem im nazw
0 = 0
> simplify(subs(x=roz[2],row));
0 = 0
> evalf(roz);
2.618033988, 0.381966012
> roz_sort:=sort([roz]);
ł
3 5 3 5
ś
roz_sort := ę - , +
ę ś
2 2 2 2
> evalf(roz_sort);
[ 0.381966012, 2.618033988 ]
> assign(seq(x||i=roz_sort[i],i=1..2)); # przypisanie nazw pierwiastkom
> x1;
3 5
-
2 2
> x2;
3 5
+
2 2
Podejście bardziej efektywne
> restart:
> row:=x^2-3*x+1=0;
row := x2 - 3 x + 1 = 0
> roz:=solve({row},{x}); # zbiór niewiadomych -> zbiór rozwiązań
3 5 3 5
roz := { x = + }, { x = - }
2 2 2 2
> simplify(eval(row,roz[1])); # inny sposób sprawdzenia rozwiązań
0 = 0
> simplify(eval(row,roz[2]));
0 = 0
> x;
x
> x[1]:=eval(x,roz[1]);
3 5
x1 := +
2 2
> x[2]:=eval(x,roz[2]);
3 5
x2 := -
2 2
> sort([x[1],x[2]]);
ł
3 5 3 5
ę ś
- , +
ę ś
2 2 2 2
> x[1],x[2]:=op(%);
3 5 3 5
x1, x2 := - , +
2 2 2 2
> x[1];
3 5
-
2 2
Równania wyższych stopni
> restart:
> row:=x^10-1=0;
row := x10 - 1 = 0
> roz:=solve(row,x);
1 5 1 1 5 1 1 5 1
roz := -1, 1, - - + + I 2 5 + 5 , - - - + I 2 5 - 5 , - - - - I 2 5 - 5 ,
4 4 4 4 4 4 4 4 4
1 5 1 1 5 1 1 5 1
- - + - I 2 5 + 5 , - + + I 2 5 + 5 , - - + I 2 5 - 5 ,
4 4 4 4 4 4 4 4 4
1 5 1 1 5 1
- - - I 2 5 - 5 , - + - I 2 5 + 5
4 4 4 4 4 4
> plot(lhs(row),x=-infinity..infinity);
> row:=x^5-x+1=0;
row := x5 - x + 1 = 0
> roz:=solve(row,x);
roz := RootOf( _Z5 - _Z + 1, index = 1 ), RootOf( _Z5 - _Z + 1, index = 2 ), RootOf( _Z5 - _Z + 1, index = 3 ),
RootOf( _Z5 - _Z + 1, index = 4 ), RootOf( _Z5 - _Z + 1, index = 5 )
> plot(lhs(row),x=-infinity..infinity);
> evalf(roz); # evalf(roz,30); lub evalf[30](roz);
0.7648844336 + 0.3524715460 I, -0.1812324445 + 1.083954101 I, -1.167303978, -0.1812324445 - 1.083954101 I,
0.7648844336 - 0.3524715460 I
> fsolve(row,x); # rozwiązanie przybliżone, pierwiastki rzeczywiste
-1.167303978
> fsolve(row,x,complex); # rozwiązanie przybliżone, wszystkie pierwiastki
-1.167303978, -0.1812324445 - 1.083954101 I, -0.1812324445 + 1.083954101 I, 0.7648844336 - 0.3524715460 I,
0.7648844336 + 0.3524715460 I
Rozwiązanie parametryczne
> rp:=solve(x+y=1,{x(t),y(t)});
1 t
rp := {x = , y = }
1 + t 1 + t
> rp:=solve(x*y=1,{x(t),y(t)});
1 1
rp := {x = , y = t }, {x = - , y = - t }
t t
> rp:=solve(x^2+y^2=1,{x(t),y(t)});
1 t 1 t
rp := { x = , y = }, { x = - , y = - }
1 + t2 1 + t2 1 + t2 1 + t2
> rp:=solve(x^2+y^2+x*y=1,{x(t),y(t)});
1 t 1 t
rp := { x = , y = }, { x = - , y = - }
t2 + t + 1 t2 + t + 1 t2 + t + 1 t2 + t + 1
> plots[implicitplot](x^2+y^2+x*y=1,x=-2..2,y=-2..2);
> plot([[1/sqrt(t^2+t+1),t/sqrt(t^2+t+1),t=-100..100],[-1/sqrt(t^2+t+1),-t/sqrt(t^2+t+1)
,t=-100..100]]);
>
Równania algebraiczne o współczynnikach symbolicznych
( solve )
Równanie liniowe
> restart:
> row:=a*x+b=0;
row := ax + b = 0
> x:=solve(row,x);
b
x := -
a
> row;
0 = 0
> x:='x':
Układ równań liniowych
> sys:={a*x+b*y=c,d*x+e*y=f};
sys := { ax + b y = c, dx + e y = f }
> niew:={x,y};
niew := { x, y }
> roz:=solve(sys,niew);
bf - c e af - dc
roz := { x = - , y = }
a e - d b ae - d b
> simplify(eval(sys,roz)); # sprawdzenie rozwiązania
{ c = c, f = f }
> x,y;
x, y
> x:=eval(x,roz); y:=eval(y,roz); # przypisanie niewiadomym wartości pierwiastków
b f - c e
x := -
a e - d b
af - d c
y :=
a e - d b
>
Równania wyższych stopni
> restart:
Równanie kwadratowe
> row:=a*x^2+b*x+c=0;
row := ax2 + bx + c = 0
> roz:=solve(row,x);
-b + b2 - 4 ac b + b2 - 4 ac
roz := , -
2 a 2 a
> simplify(eval(row,x=roz[1])); # sprawdzenie pierwszego pierwiastka
0 = 0
> x1:=roz[1]; # przypisanie nazwy pierwiastkom
-b + b2 - 4 ac
x1 :=
2 a
> x2:=roz[2];
b + b2 - 4 ac
x2 := -
2 a
> expand(a*(x-x1)*(x-x2)); # sprawdzenie pierwiastków w inny sposób
a x2 + b x + c
Równanie trzeciego stopnia
> row:=a*x^3+b*x^2+c*x+d=0;
row := ax3 + bx2 + c x + d = 0
> roz:=solve(row,x):
> x1:=roz[1];
(1 / 3 )
( 36 c b a - 108 d a2 - 8 b3 + 12 3 4 a c3 - c2 b2 - 18 c b a d + 27 d2 a2 + 4 db3 a )
x1 :=
6 a
2( 3 a c - b2 ) b
- -
( 1 / 3)
3 a
3 a ( 36 c ba - 108 da2 - 8 b3 + 12 3 4 ac3 - c2 b2 - 18 c b a d + 27 d2 a2 + 4 d b3 a )
> simplify(eval(row,x=x1));
0 = 0
> x2:=roz[2]:x3:=roz[3]:
> simplify(expand(a*(x-x1)*(x-x2)*(x-x3))); # sprawdzenie pierwiastków w inny sposób
ax3 + b x2 + c x + d
Równanie czwartego stopnia
> row:=a*x^4+b*x^3+c*x^2+d*x+e=0;
row := ax4 + bx3 + c x2 + dx + e = 0
> roz:=solve(row,x);
roz := RootOf( a _Z4 + b _Z3 + c _Z2 + d_Z + e)
> roz:=allvalues(%);
> for i to 4 do x||i:=roz[i]: end do:
> x1;
> for i to 4 do simplify(eval(row,x=x||i)); end do;
0 = 0
0 = 0
0 = 0
0 = 0
Równanie piątego stopnia
> row:=a*x^5+b*x^4+c*x^3+d*x^2+e*x+f=0;
row := a x5 + bx4 + c x3 + dx2 + e x + f = 0
> roz:=solve(row,x);
roz := RootOf( a _Z5 + b_Z4 + c _Z3 + d _Z2 + e _Z + f )
> allvalues(%);
RootOf( a_Z5 + b_Z4 + c _Z3 + d_Z2 + e _Z + f, index = 1 ), RootOf( a_Z5 + b_Z4 + c _Z3 + d _Z2 + e _Z + f, index = 2 ),
RootOf( a _Z5 + b_Z4 + c _Z3 + d _Z2 + e _Z + f, index = 3 ), RootOf( a _Z5 + b _Z4 + c _Z3 + d_Z2 + e _Z + f, index = 4 ),
RootOf( a _Z5 + b_Z4 + c _Z3 + d _Z2 + e _Z + f, index = 5 )
> evalf(roz);
RootOf( a_Z5 + b _Z4 + c _Z3 + d_Z2 + e _Z + f )
Ukady równań nieliniowych
> sys:={a*x^2+b*y^2=c,x*y=d};
sys := { x y = d, a x2 + by2 = c }
> niew:={x,y};
niew := { x, y }
> roz:=solve(sys,niew);
d
roz := { x = , y = RootOf( d2 a + b _Z4 - c _Z2 ) }
RootOf( d2 a + b _Z4 - c _Z2 )
> roz:=allvalues(roz);
db 2 2 b ( c + c2 - 4 bd2 a )
ż,
roz := x = , y =
b ( c + c2 - 4 bd2 a )2 b
d b 2 2 b ( c + c2 - 4 bd2 a )
, y = -
x = - ż,
2 b
b ( c + c2 - 4 b d2 a )
2 db -2 b ( -c + c2 - 4 b d2 a )
, y =
x = ż,
2 b
-2 b ( -c + c2 - 4 bd2 a )
2 db -2 b ( -c + c2 - 4 b d2 a )
, y = -
x = - ż
2 b
-2 b ( -c + c2 - 4 bd2 a )
> simplify(map(subs,[roz],sys)); # sprawdzenie wszystkich pierwiastków
[ { c = c, d = d }, { c = c, d = d }, { c = c, d = d }, { c = c, d = d } ]
> x:=eval(x,roz[1]); # przypisanie niewiadomym wartości pierwszej pary pierwiastków
db 2
x :=
b ( c + c2 - 4 bd2 a )
> y:=eval(y,roz[1]);
2 b ( c + c2 - 4 bd2 a )
y :=
2 b
> x:='x':y:='y':
> a:=1:b:=1:c:=1:d:=1/4:
> plots[implicitplot]([a*x^2+b*y^2=c,x*y=d],x=-2..2,y=-2..2);
> a:=1:b:=1:c:=1:d:=1:
> plots[implicitplot]([a*x^2+b*y^2=c,x*y=d],x=-2..2,y=-2..2);
>
Równania trygonometryczne
( solve )
> restart:
> solve(sin(x)+cos(x)=1/2,x);
ć ć
1 7 1 7
- +
4 4 4 4
arctan , arctan + p
1 7 1 7
+ -
Ł 4 4 ł Ł 4 4 ł
> evalf(%);
-0.4240310395, 1.994827367
> plot([sin(x)+cos(x),1/2],x);
> _EnvAllSolutions:=true;
_EnvAllSolutions := true
> solve(sin(x)+cos(x)=1/2,x);
ć ć
1 7 1 7
- +
4 4 4 4
arctan + 2 p _Z1~, arctan + p + 2 p _Z1~
1 7 1 7
+ -
Ł 4 4 ł Ł 4 4 ł
> about(_Z1);
Originally _Z1, renamed _Z1~:
is assumed to be: integer
Równania wykładnicze
( solve )
> restart;
> solve(exp(x)-3*x,x);
ć -1 ć -1
-LambertW , -LambertW -1,
Ł 3 ł Ł 3 ł
> ?inifunction
> evalf(%);
0.6190612866, 1.512134552
> plot(exp(x)-3*x,x=0..2);
>
Nierówności
( solve )
> w:=x^3-6*x^2+3*x+10;
w := x3 - 6 x2 + 3 x + 10
> solve(w<=0,x);
RealRange( -Ą, -1 ), RealRange( 2, 5 )
> solve(w<=0,{x});
{ x Ł -1 }, { 2 Ł x, x Ł 5 }
> plot(w,x=-2..6);
> solve(ln(x)*(4-x^2)<0,x);
RealRange( Open( 0 ), Open( 1 ) ), RealRange( Open( 2 ), Ą )
> solve(ln(x)*(4-x^2)<0,{x});
{ 0 < x, x < 1 }, { 2 < x }
> plot(ln(x)*(4-x^2),x=0..3);
>
Przerwa
Rozwiązania w dziedzinie liczb całkowitych
( isolve ) - solve equations for integer solutions
> restart:
Ogólna budowa komendy isolve
isolve ( r, n );
r - równanie lub układ równań
n - nazwa zmiennej przyjmującej wartości całkowite (opcjonalna) lub zbiór zmiennych
> isolve(x^2+y^2=1);
{ x = -1, y = 0 }, { x = 0, y = -1 }, { x = 0, y = 1 }, { x = 1, y = 0 }
> isolve(x^2+y^2=6);
> isolve(3*x+4*y=21,n);
{x = 7 - 4 n, y = 3 n }
> isolve({x+2*y+3*z=4,x-y-z=0},n);
{ x = 1 - n, y = -4 n, z = 1 + 3 n }
> x:=eval(x,%);y:=eval(y,%%);z:=eval(z,%%%);
x := 1 - n
y := -4 n
z := 1 + 3 n
>
Równania rekurencyjne
( rsolve ) - recurrence equation solver
> restart:
Ogólna budowa komendy rsolve
rsolve ( r, f );
r - równanie lub zbiór równań
f - nazwa funkcji
>
Ciąg liczb Fibonacciego: f (n + 2) = f (n +1) + f (n), f (1) = 1, f (2) = 1
>
> Fib:=rsolve({f(n+2)=f(n+1)+f(n),f(1)=1,f(2)=1},f);
n n
ć ć
1 5 1 5
5 - 5 +
Ł 2 2 ł Ł 2 2 ł
Fib := - +
5 5
> subs(n=15,Fib);
15 15
ć ć
1 5 1 5
5 - 5 +
Ł 2 2 ł Ł 2 2 ł
- +
5 5
> simplify(%);
610
> seq(simplify(subs(n=i,Fib)),i=1..15);
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610
> simplify(subs(n=400,Fib));
176023680645013966468226945392411250770384383304492191886725992896575345044216019675
Wyznacznik macierzy trójdiagonalnej
2 - x -1 0 L 0 0
ł
ę ś
-1 2 - x -1 L 0 0
ę ś
ę ś
0 -1 2 - x L 0 0
ę ś
M M M O M M
ę ś
ę ś
0 0 0 L 2 - x -1
ę ś
0 0 0 L -1 2 - x
ę ś
>
W (n + 2) = (2 - x)W (n +1) -W (n), W (0) = 1, W (1) = 2 - x
> Wg:=rsolve({W(n+2)=(2-x)*W(n+1)-W(n),W(0)=1,W(1)=2-x},W);
n n
ć 2 ć 2
2 - 2 -
Ł -2 + x + -4 x + x2 ł Ł -2 + x - -4 x + x2 ł
Wg := - +
-4 x + x2 ( -2 + x + -4 x + x2 ) -4 x + x2 ( -2 + x - -4 x + x2 )
> subs(n=2,Wg);
8 8
- +
3 3
-4 x + x2 ( -2 + x + -4 x + x2 ) -4 x + x2 ( -2 + x - -4 x + x2 )
> simplify(%);
64 ( 3 - 4 x + x2 )
-
3 3
( -2 + x + x ( -4 + x ) ) ( 2 - x + x ( -4 + x ) )
> normal(%,expanded);
3 - 4 x + x2
> for i to 10 do
normal(subs(n=i,Wg),expanded);
end do;
2 - x
3 - 4 x + x2
4 - 10 x + 6 x2 - x3
5 - 20 x + 21 x2 - 8 x3 + x4
6 - 35 x + 56 x2 - 36 x3 + 10 x4 - x5
7 - 56 x + 126 x2 - 12 x5 - 120 x3 + 55 x4 + x6
8 - 84 x + 252 x2 - 78 x5 - 330 x3 + 220 x4 + 14 x6 - x7
9 - 120 x + 462 x2 - 364 x5 - 792 x3 + 715 x4 + 105 x6 - 16 x7 + x8
10 - 165 x + 792 x2 - 1365 x5 - 1716 x3 + 2002 x4 + 560 x6 - 136 x7 + 18 x8 - x9
11 - 220 x + 1287 x2 - 4368 x5 - 3432 x3 + 5005 x4 + 2380 x6 - 816 x7 + 171 x8 + x10 - 20 x9
> normal(subs(n=20,Wg),expanded);
21 - 1540 x + 33649 x2 - 7726160 x5 - 346104 x3 + 2042975 x4 + 20058300 x6 - 37442160 x7 + 51895935 x8 + 44352165 x10
- 54627300 x9 - 28048800 x11 + 13884156 x12 - 5379616 x13 + 1623160 x14 - 376992 x15 + 66045 x16 - 8436 x17 + 741 x18
+ x20 - 40 x19
>
Równania różniczkowe
( dsolve ) - differential equation solver
Sposób użycia komendy dsolve
dsolve ({sys,wp}, {f}, o)
sys - równanie różniczkowe lub układ równań, wp - warunki początkowe lub brzegowe
f - poszukiwana funkcja lub zbiór poszukiwanych funkcji,
o - opcje
1. Zagadnienie początkowe
a) Rozwiązywanie równania różniczkowego drugiego rzędu
> restart:
> row:=diff(x(t),t,t)+4*diff(x(t),t)+40*x(t)=0;
ć
d2 ć d
row := x( t ) x( t ) x( t ) = 0
+ 40
+ 4 dt
Ł ł
Ł dt2 ł
> wp:=x(0)=0,D(x)(0)=1; # warunki początkowe
wp := x( 0 ) = 0, D( x )( 0 ) = 1
> dsolve({row, wp},x(t));
1
( -2 t )
x( t ) = e sin( 6 t )
6
> x:=eval(x(t),%);
1
( -2 t )
x := e sin( 6 t )
6
> v:=diff(x,t);
1
( -2 t ) ( -2 t )
v := - e sin( 6 t ) + e cos( 6 t )
3
> plot([x,v],t=0..2);
> eval(v,t=0);
1
>
b) Rozwiązywanie ukladu równań różniczkowych pierwszego rzędu
> restart:
> sys:=diff(x1(t),t)=x2(t),diff(x2(t),t)=-4*x2(t)-40*x1(t); # ten sam problem
d d
sys := x1( t ) = x2( t ), x2( t ) = -4 x2( t ) - 40 x1( t )
dt dt
> wp:=x1(0)=0,x2(0)=1;
wp := x1( 0 ) = 0, x2( 0 ) = 1
> roz:=dsolve({sys, wp},{x1(t),x2(t)});
1 ć 1 1
( -2 t ) ( -2 t )
roz := { x1( t ) = e sin( 6 t ), x2( t ) = -2 e sin( 6 t ) - cos( 6 t ) }
6 Ł 6 2 ł
> x1:=eval(x1(t),roz);
1
( -2 t )
x1 := e sin( 6 t )
6
> x2:=eval(x2(t),roz);
ć 1 1
( -2 t )
x2 := -2 e sin( 6 t ) - cos( 6 t )
Ł 6 2 ł
> plot([x1,x2],t=0..2);
2. Zagdnienie brzegowe
> restart:
> row:=diff(y(x),x,x)-4*diff(y(x),x)+40*y(x)=0;
ć
d2 ć d
row := y( x )
+ 40
- 4 dx y( x ) y( x ) = 0
Ł ł
Ł dx2 ł
> wb:=y(0)=0,y(1)=5; # warunki brzegowe
wb := y( 0 ) = 0, y( 1 ) = 5
> roz:=dsolve({row, wb},y(x));
(2 x )
5 e sin( 6 x )
roz := y( x ) =
e2 sin( 6 )
> y:=eval(y(x),roz);
( 2 x)
5 e sin( 6 x )
y :=
e2 sin( 6 )
> plot(y,x=0..1);
> eval(y,x=1);
5
>
Wyszukiwarka
Podobne podstrony:
Wykład 05 Opadanie i fluidyzacjaWyklad 05Techniki negocjacji i mediacji w administracji wykłady 05 11 2013wykład 05Analiza Finansowa Wykład 05 02 12 09wyklad 05 03 2011Wykład 05 Pręt i Układ PrętówWykład 05 Narzędzia i maszyny do umieszczania sadzonek w glebiewyklad 05Konstrukcje metalowe Sem[1][1] VI Wyklad 05logika wyklad 05Wyklad 05 dyrektywa o informacji srodek bwięcej podobnych podstron