verzija: SageMath 9.4
%display latex
Riješite sustav
$$\begin{align*}2x+3y+z&=2\\ x-3y+2z&=6\\ -2x+6y-z&=3\end{align*}.$$1. način - pomoću naredbe solve
x,y,z = var('x y z')
solve([2*x+3*y+z==2,x-3*y+2*z==6,-2*x+6*y-z==3],x,y,z)
ako želimo rješenje dobiti u obliku rječnika
solve([2*x+3*y+z==2,x-3*y+2*z==6,-2*x+6*y-z==3],x,y,z,solution_dict=True)
2. način - pomoću matričnog zapisa
A=matrix(3,3,[2,3,1,1,-3,2,-2,6,-1])
B=matrix(3,1,[2,6,3])
A.solve_right(B)
3. način - možemo definirati svoju funkciju koja će rješavati linearni sustav koji je zadan u matričnom obliku (ova naša funkcija će biti korisna kod sustava koji nemaju jedinstveno rješenje).
def linear_solve(lijevo,desno,varijable,parametri=None,rjecnik=False):
jednadzbe=[]
if parametri==None: parametri=varijable
lijeva_strana=lijevo*matrix([[t] for t in varijable])
for i in range(lijeva_strana.nrows()):
for j in range(lijeva_strana.ncols()):
jednadzbe.append(lijeva_strana[i,j]==desno[i,j])
rj=solve(jednadzbe,*parametri,solution_dict=rjecnik)
return rj
linear_solve(A,B,[x,y,z])
linear_solve(A,B,[x,y,z],rjecnik=True)
Zadan je sustav jednadžbi
$$\begin{align*}x+y+2z+3u&=6\\ x-4y+2z-3u&=-4\\ 7y+2z+5u&=12\\ x+3y+4z+2u&=8\end{align*}.$$Odredite opće rješenje sustava, odredite uvjet pod kojim je suma komponenata rješenja pozitivna i nađite sva bazična rješenja.
uočite da iako sustav ima beskonačno mnogo rješenje, solve_right metoda daje samo jedno specijalno rješenje, a naša funkcija linear_solve će dati sva rješenja
x,y,z,u=var('x y z u')
solve([x+y+2*z+3*u==6,x-4*y+2*z-3*u==-4,7*y+2*z+5*u==12,x+3*y+4*z+2*u==8],[x,y,z,u])
A=matrix(4,4,[1,1,2,3,1,-4,2,-3,0,7,2,5,1,3,4,2])
B=matrix(4,1,[6,-4,12,8])
A.solve_right(B)
linear_solve(A,B,[x,y,z,u])
opće rješenje sustava u kojemu je varijabla $x$ parametar
solve([x+y+2*z+3*u==6,x-4*y+2*z-3*u==-4,7*y+2*z+5*u==12,x+3*y+4*z+2*u==8],[y,z,u,x])
linear_solve(A,B,[x,y,z,u],[y,z,u,x])
opće rješenje sustava u kojemu je varijabla $y$ parametar
solve([x+y+2*z+3*u==6,x-4*y+2*z-3*u==-4,7*y+2*z+5*u==12,x+3*y+4*z+2*u==8],[x,z,u,y])
linear_solve(A,B,[x,y,z,u],[x,z,u,y])
opće rješenje sustava u kojemu je varijabla $z$ parametar
solve([x+y+2*z+3*u==6,x-4*y+2*z-3*u==-4,7*y+2*z+5*u==12,x+3*y+4*z+2*u==8],[x,y,u,z])
linear_solve(A,B,[x,y,z,u],[x,y,u,z])
opće rješenje sustava u kojemu je varijabla $u$ parametar
solve([x+y+2*z+3*u==6,x-4*y+2*z-3*u==-4,7*y+2*z+5*u==12,x+3*y+4*z+2*u==8],[x,y,z,u])
linear_solve(A,B,[x,y,z,u])
uvjet da je suma komponenata rješenja pozitivna - pogledat ćemo taj uvjet na općem rješenju u kojemu je varijabla $y$ parametar (analogno bismo mogli pogledati i za ostale oblike općih rješenja)
rjesenje=linear_solve(A,B,[x,y,z,u],[x,z,u,y],rjecnik=True);rjesenje
uvjet=rjesenje[0][x]+rjesenje[0][y]+rjesenje[0][z]+rjesenje[0][u];uvjet
solve(uvjet>0,rjesenje[0][y])
Ne postoji gotova naredba u SAGE-u koja bi ispisala sva bazična rješenja zadanog sustava. Stoga ćemo definirati svoju funkciju bazicna_rjesenja. Ta funkcija na ulazu traži sljedeće podatke:
Ukoliko je sustav kontradiktoran ili ima jedinstveno rješenje, funkcija bazicna_rjesenja će vas o tome obavijestiti.
def bazicna_rjesenja(matrica,koeficijenti,nepoznanice):
if type(matrica)==list: matrica=matrix(matrica)
if type(koeficijenti)!=list: koeficijenti=koeficijenti.list()
if matrix(matrica.columns()+[tuple(koeficijenti)]).rank()!=matrica.rank():
return "Error: sustav je kontradiktoran"
brojParametara=len(nepoznanice)-matrica.rank()
if brojParametara==0:
return "Error: sustav ima jedinstveno rjesenje"
X=matrix(len(nepoznanice),1,nepoznanice)
lijevo=matrica*X
desno=matrix(len(koeficijenti),1,koeficijenti)
jednadzbe=[]
for i in range(lijevo.nrows()):
for j in range(lijevo.ncols()):
jednadzbe.append(lijevo[i,j]==desno[i,j])
parametri=Combinations(zip(nepoznanice,[0]*len(nepoznanice)),brojParametara)
for t in parametri:
var1=list(map(lambda q: q[0], t))
var2=list(filter(lambda q: not(q in var1), nepoznanice))
rjesenje=solve(list(map(lambda q: q.substitute(dict(t)), jednadzbe)),*var2)
if rjesenje!=[]:
rjesenje=list(map(lambda q: q[0]==q[1],t))+rjesenje[0]
print(rjesenje)
return None
bazicna_rjesenja(A,B,[x,y,z,u])
Prvi zadatak i bazična rješenja - sustav u prvom zadatku ima jedinstveno rješenje, što naša funkcija bazicna_rjesenja to i prepoznaje
bazicna_rjesenja([[2,3,1],[1,-3,2],[-2,6,-1]],[2,6,3],[x,y,z])
Zadan je sustav jednadžbi
$$\begin{align*}2x_1+3x_2+2x_3+6x_4&=1\\ -2x_1+3x_2-6x_3+12x_4&=-19\\ 2x_1+6x_2+15x_4&=-8\end{align*}.$$Odredite opće rješenje sustava tako da varijable $x_3$ i $x_4$ budu parametri i nađite sva bazična rješenja.
x1,x2,x3,x4=var('x1 x2 x3 x4')
A=matrix(3,4,[2,3,2,6,-2,3,-6,12,2,6,0,15])
B=matrix(3,1,[1,-19,-8])
linear_solve(A,B,[x1,x2,x3,x4],[x1,x2,x4,x3])
ako želimo da varijable $x_1$ i $x_3$ budu parametri
linear_solve(A,B,[x1,x2,x3,x4],[x2,x4,x3,x1])
bazična rješenja
bazicna_rjesenja(A,B,[x1,x2,x3,x4])
Riješite sustav jednadžbi
$$\begin{align*}x_1-4x_2+5x_3&=6\\ -3x_2+2x_3&=-12\\ 2x_1+7x_2&=35\end{align*}.$$Sustav je kontradiktoran.
A=matrix(3,3,[1,-4,5,0,-3,2,2,7,0])
B=matrix(3,1,[6,-12,35])
linear_solve(A,B,[x1,x2,x3])
Naša implementirana funkcija bazicna_rjesenja će nas također obavijestiti da se radi o kontradiktornom sustavu pa nema smisla tražiti bazična rješenja.
bazicna_rjesenja(A,B,[x1,x2,x3])
Odredite sva bazična rješenja sustava
$$\begin{align*}-4x_1-3x_2-4x_3&=-1\\ x_1+x_2+x_3&=1\\ 14x_1+11x_2+14x_3&=5\\ 11x_1+9x_2+11x_3&=5\end{align*}.$$Pogledajmo najprije kako izgleda opće rješenje zadanog sustava.
A=matrix(4,3,[-4,-3,-4,1,1,1,14,11,14,11,9,11])
B=matrix(4,1,[-1,1,5,5])
linear_solve(A,B,[x1,x2,x3])
Vidimo da je nepoznanica $x_2$ uvijek jednaka 3 pa nećemo imati maksimalni broj bazičnih rješenja. Naša implementirana funkcija bazicna_rjesenja također dobro reagira u takvim situacijama i ispisat će samo dva bazična rješenja u ovom slučaju.
bazicna_rjesenja(A,B,[x1,x2,x3])
Odredite inverznu matricu matrice $A=\begin{bmatrix}0&1&-1&4\\ 2&1&0&1\\ 3&2&2&5\\ -2&-4&-1&1\end{bmatrix}$.
Kao što smo računali ranije inverze od $2\times2$ i $3\times3$ matrica, tako možemo računati inverz bilo koje kvadratne matrice reda $n$.
A=matrix(4,4,[0,1,-1,4,2,1,0,1,3,2,2,5,-2,-4,-1,1])
A^-1
A.inverse()
~A
Odredite rangove sljedećih matrica:
$$A=\begin{bmatrix}2&6&-4&1&2\\ 4&-12&8&0&-4\\ -3&9&2&-2&3\end{bmatrix},\quad B=\begin{bmatrix}1&-2&0&4&3&0\\ -2&0&5&2&6&1\\ 0&1&1&3&-2&-1\\ -1&-2&5&6&9&1\\ 1&0&2&10&-1&-2\end{bmatrix},\quad C=\begin{bmatrix}3&2&0&1\\ 1&-1&1&1\\ 4&2&-1&1\\ 0&0&2&1\end{bmatrix}.$$A=matrix(3,5,[2,6,-4,1,2,4,-12,8,0,-4,-3,9,2,-2,3])
B=matrix(5,6,[1,-2,0,4,3,0,-2,0,5,2,6,1,0,1,1,3,-2,-1,-1,-2,5,6,9,1,1,0,2,10,-1,-2])
C=matrix(4,4,[3,2,0,1,1,-1,1,1,4,2,-1,1,0,0,2,1])
A.rank(),B.rank(),C.rank()
rank(A),rank(B),rank(C)
U ovisnosti o $k\in\mathbb{R}$ riješite sustav linearnih jednadžbi
$$\begin{align*}x-2y&=1\\ x-y+kz&=-2\\ ky+4z&=6\end{align*}.$$k=var('k')
Komentirajmo najprije jedinstvenost rješenja pomoću Cramerovog pravila.
A=matrix(3,3,[1,-2,0,1,-1,k,0,k,4])
A.det()
solve(A.det()==0,k)
Zaključujemo da sustav za $k\in\mathbb{R}\setminus\{-2,2\}$ ima jedinstveno rješenje koje je dano s
linear_solve(A,matrix(3,1,[1,-2,6]),[x,y,z])
slučaj $k=-2$: sustav ima beskonačno mnogo rješenja
A.subs(k=-2)
A.subs({k:-2})
linear_solve(A.subs(k=-2),matrix(3,1,[1,-2,6]),[x,y,z])
slučaj $k=2$: sustav je kontradiktoran
linear_solve(A.subs(k=2),matrix(3,1,[1,-2,6]),[x,y,z])
Odredite sve $a\in\mathbb{R}$ za koje donji sustav ima i netrivijalnih rješenja i za takve $a$-ove nađite opća rješenja promatranog sustava.
U rješavanju zadatka koristimo Roucheov teorem.
a=var('a')
A=matrix(3,3,[-1,3,a,2,-4,1,-3,a,-2*a])
det(A)
solve(det(A)==0,a)
Zaključujemo da sustav ima i netrivijalnih rješenja ako i samo ako je $a=\frac{9}{2}$ ili $a=-1$.
opće rješenje sustava za $a=\frac{9}{2}$ (varijablu $y$ smo uzeli za parametar)
linear_solve(A.subs(a=9/2),matrix(3,1,[0,0,0]),[x,y,z],[x,z,y])
opće rješenje sustava za $a=-1$ (varijablu $y$ smo uzeli za parametar)
linear_solve(A.subs(a=-1),matrix(3,1,[0,0,0]),[x,y,z],[x,z,y])
Riješite sustav linearnih nejednadžbi
$$\begin{align*}3x_1-4x_2&\leq6\\ 3x_1+4x_2&\leq12\\ 2x_1-x_2&\geq0\end{align*}.$$Uočite u prve tri liste izračunata vršna rješenja
solve([3*x1-4*x2<=6,3*x1+4*x2<=12,2*x1-x2>=0],x1,x2)
grafička metoda
region_plot([3*x1-4*x2<=6,3*x1+4*x2<=12,2*x1-x2>=0],(x1,-2,4),(x2,-3,3),
incol='yellow',borderwidth=2,bordercol='black',plot_points=300,figsize=(6,4))
Riješite sustav linearnih nejednadžbi
$$\begin{align*}4x_1+5x_2&\leq10\\ x_1-2x_2&\leq1\\ 3x_1-4x_2&\geq-6\\ x_1&\geq0\\ x_2&\geq0\end{align*}.$$Uočite svih pet izračunatih vršnih rješenja
solve([4*x1+5*x2<=10,x1-2*x2<=1,3*x1-4*x2>=-6,x1>=0,x2>=0],x1,x2)
grafička metoda
region_plot([4*x1+5*x2<=10,x1-2*x2<=1,3*x1-4*x2>=-6,x1>=0,x2>=0],(x1,-1,3),(x2,-1,3),
incol='yellow',borderwidth=2,bordercol='black',plot_points=250,aspect_ratio=1,figsize=(6,4))
Riješite sustav linearnih nejednadžbi
$$\begin{align*}-12x_1+3x_2&\leq3\\ 4x_1-10x_2&\leq5\\ x_1&\geq0\end{align*}.$$uočite oba izračunata vršna rješenja
solve([-12*x1+3*x2<=3,4*x1-10*x2<=5,x1>=0],x1,x2)
grafička metoda - uočite da je rješenje neomeđen skup u ravnini
region_plot([-12*x1+3*x2<=3,4*x1-10*x2<=5,x1>=0],(x1,-1,3),(x2,-1,3),
incol='yellow',borderwidth=2,bordercol='black',plot_points=250,aspect_ratio=1,figsize=(6,4))
Možda niste znali, ali unutar SAGE worksheeta možete direktno koristiti i maxima kod. To možete napraviti globalno tako da u meniju na početku worksheeta umjesto sage, odaberete maxima; ili pak možete lokalno samo unutar pojedine ćelije koristiti maxima kod tako da na početku te ćelije najprije napišete %maxima, a nakon toga unutar te ćelije počnete pisati maxima kod. Dolje ćemo pokazati lokalno korištenje maxime unutar pojedine ćelije na nekoliko prethodnih gore napravljenih zadataka. Nećemo ponovo prepisivati zadatke, nego ćemo samo napisati redni broj zadatka.
1. zadatak
%%maxima
linsolve([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);
matrica sustava, proširena matrica sustava i rangovi tih matrica
%%maxima
M: coefmatrix([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);
Mp: augcoefmatrix([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);
[rank(M),rank(Mp)];
2. zadatak
opće rješenje gdje je varijabla $u$ parametar i pripadno bazično rješenje
%%maxima
sustav: [x+y+2*z+3*u=6,x-4*y+2*z-3*u=-4,7*y+2*z+5*u=12,x+3*y+4*z+2*u=8]$
rj1:linsolve(sustav,[x,y,z,u]);
subst(0,%rnum_list[1],rj1);
opće rješenje gdje je varijabla $z$ parametar i pripadno bazično rješenje
%%maxima
rj2: linsolve(sustav,[x,y,u,z]);
subst(0,%rnum_list[1],rj2);
prethodna dva primjera u kojima ne uvodimo nova slova za parametre
%%maxima
linsolve_params: false$
r1:linsolve(sustav,[x,y,z,u]);
subst(0,u,r1);
%%maxima
r2:linsolve(sustav,[x,y,u,z]);
subst(0,z,r2);
uvjet pod kojim je suma komponenata rješenja pozitivna ako uzmemo opće rješenje u kojemu je varijabla $y$ parametar
%%maxima
load(fourier_elim)$
r3:linsolve(sustav,[x,z,u,y]);
nejednakost:sum(rhs(r3[i]),i,1,3)+y;
fourier_elim([nejednakost>0],[y]);
6. zadatak
%%maxima
A: matrix([0,1,-1,4],[2,1,0,1],[3,2,2,5],[-2,-4,-1,1])$
invert(A)
%%maxima
doallmxops: false$
invert(A);