## Sustavi linearnih jednadžbi

1. zadatak

linsolve([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);

matrica sustava

M: coefmatrix([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);

proširena matrica sustava (pazite: ovdje daje zadnji stupac slobodnih članova kako on izgleda s lijeve strane jednadžbe, a mi smo ga unosili onako kako izgleda s desne strane jednadžbe). 
No, to je stvar dogovora i nema utjecaja na Kronecker-Capellijev teorem. 

Mp: augcoefmatrix([2*x+3*y+z=2, x-3*y+2*z=6, -2*x+6*y-z=3], [x,y,z]);

Rang matrice sustava jednak je rangu proširene matrice sustava i taj rang je baš jednak broju varijabli.
Prema Kronecker-Capellijevom teoremu sustav ima jedinstveno rješenje.

[rank(M),rank(Mp)];

2. zadatak

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];

varijabla u je parametar i pripadno bazično rješenje

rj1:linsolve(sustav,[x,y,z,u]);

%rnum_list;

subst(0,%rnum_list[1],rj1);

varijabla z je parametar i pripadno bazično rješenje

rj2: linsolve(sustav,[x,y,u,z]);

%rnum_list;

subst(0,%rnum_list[1],rj2);

varijabla y je parametar i pripadno bazično rješenje

rj3:linsolve(sustav,[x,z,u,y]);

%rnum_list;

subst(0,%rnum_list[1],rj3);

varijabla x je parametar i pripadno bazično rješenje

rj4:linsolve(sustav,[y,z,u,x]);

%rnum_list;

subst(0,%rnum_list[1],rj4);

ako ne želimo uvoditi nova slova za parametre

linsolve_params: false$

varijabla u je parametar

r1:linsolve(sustav,[x,y,z,u]);

pripadno bazično rješenje (sada nigdje ne piše u=0 jer je slovo u ujedno i parametar, ali znamo da smo uvrstili u=0 u opće rješenje)

subst(0,u,r1);

varijabla z je parametar

r2:linsolve(sustav,[x,y,u,z]);

pripadno bazično rješenje (sada nigdje ne piše z=0 jer je slovo u ujedno i parametar, ali znamo da smo uvrstili z=0 u opće rješenje)

subst(0,z,r2);

varijabla y je parametar

r3:linsolve(sustav,[x,z,u,y]);

pripadno bazično rješenje (sada nigdje ne piše y=0 jer je slovo u ujedno i parametar, ali znamo da smo uvrstili y=0 u opće rješenje)

subst(0,y,r3);

varijabla x je parametar

r4:linsolve(sustav,[y,z,u,x]);

pripadno bazično rješenje (sada nigdje ne piše x=0 jer je slovo u ujedno i parametar, ali znamo da smo uvrstili x=0 u opće rješenje)

subst(0,x,r4);

matrica sustava

M: coefmatrix(sustav,[x,y,z,u]);

proširena matrica sustava

Mp: augcoefmatrix(sustav,[x,y,z,u]);

Rang matrice sustava jednak je rangu proširene matrice sustava i taj rang je manji od broja varijabli.
Prema Kronecker-Capellijevom teoremu sustav ima beskonačno mnogo rješenja.

[rank(M),rank(Mp)];

uvjet pod kojim je suma komponenata rješenja pozitivna ako uzmemo opće rješenje u kojemu je varijabla y parametar

r3;

suma komponenata rješenja (dva načina - ručno ispisivanje ili korištenje naredbe sum)
naredba rhs nam daje desnu stranu u jednakosti, a naredba lhs daje lijevu stranu u jednakosti

[r3[1],lhs(r3[1]),rhs(r3[1])];

rhs(r3[1])+rhs(r3[2])+rhs(r3[3])+y;

nejednakost:sum(rhs(r3[i]),i,1,3)+y;

rješavanje nejednadžbe - dva načina:
1. način: pomoću naredbe to_poly_solve
2. način: pomoću naredbe fourier_elim koju najprije treba učitati pomoću naredbe load

to_poly_solve(nejednakost>0,y);

load(fourier_elim)$

fourier_elim([nejednakost>0],[y]);

3. zadatak

sustav2: [2*x1+3*x2+2*x3+6*x4=1,-2*x1+3*x2-6*x3+12*x4=-19,2*x1+6*x2+15*x4=-8];

pazite: već ranije smo bili stavili linsolve_params: false$ pa se neće uvoditi nova slova za parametre osim ako ponovo ne stavimo vrijednost spomenute varijable na true

varijable x3 i x4 su parametri i pripadno bazično rješenje

r34:linsolve(sustav2,[x1,x2,x3,x4]);

subst([x3=0,x4=0],r34);

varijable x1 i x2 su parametri i pripadno bazično rješenje

r12:linsolve(sustav2,[x3,x4,x1,x2]);

subst([x1=0,x2=0],r12);

varijable x1 i x3 su parametri i pripadno bazično rješenje

r13:linsolve(sustav2,[x2,x4,x1,x3]);

subst([x1=0,x3=0],r13);

varijable x1 i x4 su parametri i pripadno bazično rješenje

r14:linsolve(sustav2,[x2,x3,x1,x4]);

subst([x1=0,x4=0],r14);

varijable x2 i x3 su parametri i pripadno bazično rješenje

r23:linsolve(sustav2,[x1,x4,x2,x3]);

subst([x2=0,x3=0],r23);

varijable x2 i x4 su parametri i pripadno bazično rješenje

r24:linsolve(sustav2,[x1,x3,x2,x4]);

subst([x2=0,x4=0],r24);

matrica sustava

M:coefmatrix(sustav2,[x1,x2,x3,x4]);

proširena matrica sustava

Mp:augcoefmatrix(sustav2,[x1,x2,x3,x4]);

Rang matrice sustava jednak je rangu proširene matrice sustava i taj rang je manji od broja varijabli.
Prema Kronecker-Capellijevom teoremu sustav ima beskonačno mnogo rješenja.

[rank(M),rank(Mp)];

4. zadatak - kontradiktorni sustav

sustav3:[x1-4*x2+5*x3=6,-3*x2+2*x3=-12,2*x1+7*x2=35]$

linsolve(sustav3,[x1,x2,x3]);

matrica sustava

M:coefmatrix(sustav3,[x1,x2,x3]);

proširena matrica sustava

Mp:augcoefmatrix(sustav3,[x1,x2,x3]);

Rang matrice sustava je različit od ranga proširene matrice sustava.
Prema Kronecker-Capellijevom teoremu sustav je kontradiktoran.

[rank(M),rank(Mp)];

5. zadatak

sustav4:[-4*x1-3*x2-4*x3=-1,x1+x2+x3=1,14*x1+11*x2+14*x3=5,11*x1+9*x2+11*x3=5]$

varijabla x3 je parametar i pripadno bazično rješenje

r1:linsolve(sustav4,[x1,x2,x3]);

subst([x3=0],r1);

varijabla x1 je parametar i pripadno bazično rješenje

r2:linsolve(sustav4,[x3,x2,x1]);

subst([x1=0],r2);

matrica sustava

M:coefmatrix(sustav4,[x1,x2,x3]);

proširena matrica sustava

Mp:augcoefmatrix(sustav4,[x1,x2,x3]);

Rang matrice sustava jednak je rangu proširene matrice sustava i taj rang je manji od broja varijabli.
Prema Kronecker-Capellijevom teoremu sustav ima beskonačno mnogo rješenja.

[rank(M),rank(Mp)];

## Nejednadžbe

rješavanje nejednadžbe - dva načina:
1. način: pomoću naredbe to_poly_solve
2. način: pomoću naredbe fourier_elim koju najprije treba učitati pomoću naredbe load

load(fourier_elim)$

1. zadatak

to_poly_solve(2*x-3/5>(5*x-3)/2,x);

fourier_elim([2*x-3/5>(5*x-3)/2],[x]);

2. zadatak

to_poly_solve(-4*x^2+12*x+40<=0,x);

fourier_elim([-4*x^2+12*x+40<=0],[x]);

wxplot2d([-4*x^2+12*x+40], [x,-5,8],[axes,true])$

plot2d([-4*x^2+12*x+40], [x,-5,8],
 [gnuplot_preamble, "set grid;"])$

to_poly_solve(-4*x^2+12*x+40>0,x);

fourier_elim([-4*x^2+12*x+40>0],[x]);

3. zadatak

load("draw")$

to_poly_solve([3*x1-4*x2<=6,3*x1+4*x2<=12,2*x1-x2>=0],[x1,x2]);

fourier_elim([3*x1-4*x2<=6,3*x1+4*x2<=12,2*x1-x2>=0],[x1,x2]);

wxdraw2d(grid=true, x_voxel=80, y_voxel=80,fill_color  = cyan, 
                region(3*x-4*y<=6 and 3*x+4*y<=12 and 2*x-y>=0, x,-2,4, y,-3,3));

4. zadatak

to_poly_solve([-12*x1+3*x2<=3,4*x1-10*x2<=5,x1>=0],[x1,x2]);

fourier_elim([-12*x1+3*x2<=3,4*x1-10*x2<=5,x1>=0],[x1,x2]);

wxdraw2d(grid=true, x_voxel=80, y_voxel=80,fill_color  = cyan, 
                region(-12*x+3*y<=3 and 4*x-10*y<=5 and x>=0, x,-1,5, y,-1,5));

5. zadatak

to_poly_solve([3*x+2*y>2,3*x+2*y<=6],[x,y]);

fourier_elim([3*x+2*y>2,3*x+2*y<=6],[x,y]);

wxdraw2d(grid=true, fill_color = cyan, region(3*x+2*y>2 and 3*x+2*y<=6, x,-3,3, y,-5,5))$

## Linearno programiranje

load(simplex)$

1. zadatak: Draguljar - prstenje i privjeski

maximize_lp(8*x+10*y,[4*x+2*y<=40, 0.2*x+0.4*y<=5.6]), nonegative_lp=true;

wxdraw2d(grid=true,fill_color=cyan, region(4*x+2*y<=40 and 0.2*x+0.4*y<=5.6, x,0,11, y,0,15));

2. zadatak - generator i dvije vrste goriva

minimize_lp(3*x+2.5*y, [x+y>=4, 3*x+5*y<=15]), nonegative_lp=true;

wxdraw2d(grid=true,x_voxel=100, y_voxel=100, xtics=[0,0.5,6],
       fill_color=cyan, region(x+y>=4 and 3*x+5*y<=15, x,0,6, y,0,2));

3. zadatak - prehrana životinja s dvije vrste stočne hrane

minimize_lp(2.5*x+3*y, [20*x+30*y>=18, 10*x+30*y>=12, 80*x+60*y>=48]), nonegative_lp=true;

maksimum ne postoji

maximize_lp(2.5*x+3*y, [20*x+30*y>=18, 10*x+30*y>=12, 80*x+60*y>=48]), nonegative_lp=true;

wxdraw2d(grid=true,fill_color=cyan, xtics=[0,0.2,2], ytics=[0,0.2,2],
    region(20*x+30*y>=18 and 10*x+30*y>=12 and 80*x+60*y>=48, x, 0, 2, y, 0, 2));