verzija: SageMath 9.4
%display latex
neki načini definiranja vektora - više detalja saznajte pomoću naredbe help(vector)
v1=vector((1,2)); v2=vector([4,3])
crtanje vektora s početkom u ishodištu
(v1.plot()+v2.plot(color="red")+text("$\\vec{v}_1$",(0.3,1),fontsize=16,rgbcolor=(0,0,0))+
text("$\\vec{v}_2$",(3,2),fontsize=16,rgbcolor=(0,0,0))).show(figsize=[6,4])
crtanje reprezentanata koji nemaju početak u ishodištu - za više informacija napišite help(arrow2d)
(arrow((1,1),vector((1,1))+v1)+v1.plot()+
text("dva reprezentanta vektora $\\vec{v}_1$",(0.7,2.6),fontsize=14,rgbcolor=(0,0,0))).show(figsize=[6,4])
v1+v2
pravilo paralelograma
crta1=line([(1,2),(5,5)],linestyle="--",color="black")
crta2=line([(4,3),(5,5)],linestyle="--",color="black")
tekst1=text("$\\vec{v}_1$",(0.35,1.1),color="black",fontsize=16)
tekst2=text("$\\vec{v}_2$",(2.6,1.65),color="black",fontsize=16)
tekst3=text("$\\vec{v}_1+\\vec{v}_2$",(1.6,1.85),color="black",fontsize=16,rotation=45)
slika=crta1+crta2+v1.plot()+v2.plot(color="red")+(v1+v2).plot(color="green")+tekst1+tekst2+tekst3
slika.show(aspect_ratio=1,figsize=[5,5])
pravilo trokuta
tekst4=text("$\\vec{v}_1$",(0.35,1.1),color="black",fontsize=16)
tekst5=text("$\\vec{v}_2$",(2.6,3.5),color="black",fontsize=16)
tekst6=text("$\\vec{v}_1+\\vec{v}_2$",(3,2.65),color="black",fontsize=16,rotation=45)
vektor2=arrow(v1,v1+v2,color="red")
slika2=v1.plot()+vektor2+(v1+v2).plot(color="green")+tekst4+tekst5+tekst6
slika2.show(aspect_ratio=1,figsize=[5,5])
v1-v2
tekst7=text("$\\vec{v}_1$",(0.35,1.1),color="black",fontsize=16)
tekst8=text("$\\vec{v}_2$",(2.6,1.65),color="black",fontsize=16)
tekst9=text("$\\vec{v}_1-\\vec{v}_2$",(2.4,2.62),color="black",fontsize=16,rotation=18)
vektor3=arrow(v2,v1,color="green")
slika3=v1.plot()+v2.plot(color="red")+vektor3+tekst7+tekst8+tekst9
slika3.show(aspect_ratio=1,figsize=[5,5])
2*v1
-3/2*v2
(arrow((3/2,3/2),vector((3/2,3/2))-1/2*v1,color="red")+v1.plot()+
text("$\\vec{v}_1$",(0.4,1),fontsize=16,rgbcolor=(0,0,0))+
text("$-\\frac{1}{2}\\vec{v}_1$",(1.3,0.8),fontsize=16,rgbcolor=(0,0,0))).show(figsize=[6,4])
-2*v1+3/4*v2
v1.norm()
norm(v2)
v1.dot_product(v2)
v3=vector((1,2,-3)); v4=vector((2,-1,1))
napišite help(arrow3d) za opise svih opcija crtanja vektora u prostoru
(v3.plot(radius=0.05)+v4.plot(color="red",radius=0.05)).show(viewer='threejs',online=True)
crtanje reprezentanata koji nemaju početak u ishodištu
(v3.plot(radius=0.05)+arrow3d(vector((2,1,2)),vector((2,1,2))+v3,color="red",radius=0.05)).show(viewer='threejs',online=True)
v3+v4
pravilo paralelograma
(v3.plot(radius=0.05)+v4.plot(color="red",radius=0.05)+
(v3+v4).plot(color="green",radius=0.05)+
line3d([(1,2,-3),(3,1,-2)],color="black")+
line3d([(2,-1,1),(3,1,-2)],color="black")).show(viewer='threejs',online=True)
pravilo trokuta
(v3.plot(radius=0.05)+
arrow3d(v3,v3+v4,color="red",radius=0.05)+
(v3+v4).plot(color="green",radius=0.05)).show(viewer='threejs',online=True)
v3-v4
5/4*v3
-2*v4
plavi vektor: $\vec{v}_3$ crveni vektor: $\frac{3}{5}\vec{v}_3$
(arrow((0,0,0),v3,radius=0.06)+
arrow3d((1,1,1),vector((1,1,1))+3/5*v3,color="red",radius=0.05)).show(viewer='threejs',online=True)
2/5*v3+7*v4
norm(v3)
norm(2/5*v3+7*v4)
vek1=vector((2,1,-5)); vek2=vector((3,-2,8))
vek1.dot_product(vek2)
vek1.cross_product(vek2)
vek2.cross_product(vek1)
vek3=vector((1,0,-5))
vek1.cross_product(vek2).dot_product(vek3)
možemo definirati svoju funkciju radi jednostavnijeg pisanja
def mjesoviti_produkt(v1,v2,v3):
return v1.cross_product(v2).dot_product(v3)
parnom permutacijom vektora mješoviti produkt se ne mijenja, a neparnom permutacijom vektora mješoviti produkt mijenja predznak
mjesoviti_produkt(vek1,vek2,vek3)
mjesoviti_produkt(vek2,vek1,vek3)
mjesoviti_produkt(vek2,vek3,vek1)
U ovom dijelu uvjerit ćemo se u istinitost nekih formula na način da vektore općenito zadamo njihovim koordinatama u ortonormiranoj bazi, a zatim raspišemo lijevu i desnu stranu jednakosti u tim koordinatama i provjerimo da su one zaista jednake.
var("a_x a_y a_z b_x b_y b_z c_x c_y c_z l")
a=vector((a_x,a_y,a_z)); b=vector((b_x,b_y,b_z)); c=vector((c_x,c_y,c_z))
$(\vec{a}+\vec{b})^2=\vec{a}^2+2\vec{a}\vec{b}+\vec{b}^2$
a+b
lijeva_strana=(a+b).dot_product(a+b); lijeva_strana
desna_strana=a.dot_product(a)+2*a.dot_product(b)+b.dot_product(b); desna_strana
expand(lijeva_strana-desna_strana)
$(\lambda\vec{a})\vec{b}=\lambda(\vec{a}\vec{b})$
lijeva_strana=(l*a).dot_product(b); lijeva_strana
desna_strana=l*(a.dot_product(b)); desna_strana
expand(lijeva_strana-desna_strana)
$\vec{a}\times(\vec{b}+\vec{c})=\vec{a}\times\vec{b}+\vec{a}\times\vec{c}$
lijeva_strana=a.cross_product(b+c); lijeva_strana
desna_strana=a.cross_product(b)+a.cross_product(c); desna_strana
dodatno sređivanje lijeve strane po komponentama
lijeva_strana.apply_map(lambda t: expand(t))
razlike lijeve i desne strane je nulvektor, što znači da su vektori s lijeve i desne strane promatrane jednakosti jednaki
lijeva_strana.apply_map(lambda t: expand(t))-desna_strana
$(\vec{a}\times\vec{b})\times\vec{c}=(\vec{a}\vec{c})\vec{b}-(\vec{b}\vec{c})\vec{a}$
lijeva_strana=(a.cross_product(b)).cross_product(c)
lijeva_strana.apply_map(lambda t: expand(t))
desna_strana=(a.dot_product(c))*b-(b.dot_product(c))*a
desna_strana.apply_map(lambda t: expand(t))
lijeva_strana.apply_map(lambda t: expand(t))-desna_strana.apply_map(lambda t: expand(t))
$\vec{a}\times(\vec{b}\times\vec{c})=(\vec{a}\vec{c})\vec{b}-(\vec{a}\vec{b})\vec{c}$
lijeva_strana=a.cross_product(b.cross_product(c))
lijeva_strana.apply_map(lambda t: expand(t))
desna_strana=(a.dot_product(c))*b-(a.dot_product(b))*c
desna_strana.apply_map(lambda t: expand(t))
lijeva_strana.apply_map(lambda t: expand(t))-desna_strana.apply_map(lambda t: expand(t))
Jacobijev identitet: $(\vec{a}\times\vec{b})\times\vec{c}+(\vec{b}\times\vec{c})\times\vec{a}+(\vec{c}\times\vec{a})\times\vec{b}=\vec{0}$
lijeva_strana=(a.cross_product(b)).cross_product(c)+(b.cross_product(c)).cross_product(a)+(c.cross_product(a)).cross_product(b)
lijeva_strana.apply_map(lambda t: expand(t))
Lagrangeov identitet: $(\vec{a}\vec{b})^2+(\vec{a}\times\vec{b})^2=\vec{a}^2\cdot\vec{b}^2$
lijeva_strana=expand((a.dot_product(b))^2+(a.cross_product(b)).dot_product(a.cross_product(b))); lijeva_strana
desna_strana=expand((a.dot_product(a))*(b.dot_product(b))); desna_strana
lijeva_strana-desna_strana
Funkcija projekcija_vektor_vektor(x,a) daje ortogonalnu projekciju vektora x na vektor a.
def projekcija_vektor_vektor(x,a):
return (a.dot_product(x))/(norm(a)^2)*a
Nađite ortogonalnu projekciju vektora $\vec{x}=(1,1,1)$ na vektor $\vec{a}=(2,1,2)$.
projekcija_vektor_vektor(vector((1,1,1)),vector((2,1,2)))
Na kraju dajemo još nekoliko primjera zadataka iz vektora koji se mogu elegantno riješiti pomoću SAGE-a.
Zadani su vektori $\vec{a}=(3,-1,-2)$ i $\vec{b}=(1,2,-5)$. Odredite sljedeće vektore:
a=vector((3,-1,-2))
b=vector((1,2,-5))
a.cross_product(b)
(2*a+b).cross_product(b)
(3*a-b).cross_product(2*b-7*a)
Zadani su vektori $\vec{a}=(2,-3,1)$ i $\vec{b}=(-1,4,2)$. Odredite vektor $\vec{v}$ koji je okomit na os $z$ ako je $\vec{a}\cdot\vec{v}=3\vec{b}\cdot\vec{v}=3$.
var("y z")
a=vector((2,-3,1))
b=vector((-1,4,2))
v=vector((x,y,z))
$\vec{v}=(3,1,0)=3\vec{i}+\vec{j}$
solve([v.dot_product(vector((0,0,1)))==0,a.dot_product(v)==3,3*(b.dot_product(v))==3],[x,y,z])
Vektori $\vec{a}$ i $\vec{b}$ su kolinearni i $\vec{a}\cdot\vec{b}=12$. Odredite $\vec{b}$ ako je $\vec{a}=(2,1,-1)$.
a=vector((2,1,-1))
b=l*a; b
solve(a.dot_product(b)==12,l)
$\vec{b}=(4,2,-2)=4\vec{i}+2\vec{j}-2\vec{k}$
b.subs(l=2)
Zadani su vektori $\vec{a}=2\vec{i}-\vec{j}+2\vec{k}$ i $\vec{b}=-6\vec{i}-3\vec{j}+2\vec{k}$. Odredite jedinični vektor na simetrali kuta između vektora $\vec{a}$ i $\vec{b}$.
a=vector((2,-1,2))
b=vector((-6,-3,2))
duljine vektora $\vec{a}$ i $\vec{b}$
norm(a),norm(b)
neki vektor $\vec{c}$ na simetrali kuta između vektora $\vec{a}$ i $\vec{b}$
c=1/norm(a)*a+1/norm(b)*b; c
vektor $\vec{c}$ nije jedinične duljine
norm(c)
postoje dva jedinična vektora na simetrali kuta između vektora $\vec{a}$ i $\vec{b}$
1/norm(c)*c
-1/norm(c)*c
Zadani su vektori $\vec{a}=(2,3,-1)$, $\vec{b}=(1,-2,3)$ i $\vec{c}=(2,-1,1)$. Odredite vektor $\vec{v}$ koji je okomit na ravninu određenu vektorima $\vec{a}$ i $\vec{b}$ ako je $\vec{v}\cdot\vec{c}=-6$.
1. način: bez upotrebe vektorskog produkta
a=vector((2,3,-1))
b=vector((1,-2,3))
c=vector((2,-1,1))
v=vector((x,y,z))
$\vec{v}=(-3,3,3)=-3\vec{i}+3\vec{j}+3\vec{k}$
solve([v.dot_product(a)==0,v.dot_product(b)==0,v.dot_product(c)==-6],[x,y,z])
2. način: upotrebom vektorskog produkta
v=l*(a.cross_product(b)); v
solve(v.dot_product(c)==-6,l)
$v=(-3,3,3)=-3\vec{i}+3\vec{j}+3\vec{k}$
v.subs(l=-3/7)
Odredite parametar $p$ tako da vektori $\vec{a}=3\vec{i}-4\vec{j}+p\vec{k}$ i $\vec{b}=\vec{i}+4\vec{j}+13\vec{k}$ budu elementi ortogonalne baze prostora $\mathbb{R}^3$.
Da bi vektori $\vec{a}$ i $\vec{b}$ bili elementi ortogonalne baze prostora $\mathbb{R}^3$ mora biti $\vec{a}\perp\vec{b}$, tj. $\vec{a}\vec{b}=0$.
var("p")
a=vector((3,-4,p))
b=vector((1,4,13))
solve(a.dot_product(b)==0,p)
Zadani su vektori $\vec{a}=-\vec{i}+5\vec{j}-2\vec{k}$, $\vec{b}=-\vec{i}+6\vec{j}+4\vec{k}$, $\vec{c}=-7\vec{i}-8\vec{j}+\vec{k}$. Odredite koordinate vektora $(\vec{a}\times\vec{b})\times\vec{c}$ u bazi koju čine vektori $\vec{a},\vec{b},\vec{a}\times\vec{b}$. Objasnite zašto je treća koordinata vektora $(\vec{a}\times\vec{b})\times\vec{c}$ jednaka nula.
a=vector((-1,5,-2))
b=vector((-1,6,4))
c=vector((-7,-8,1))
v=(a.cross_product(b)).cross_product(c); v
$(\vec{a}\times\vec{b})\times\vec{c}=x\cdot\vec{a}+y\cdot\vec{b}+z\cdot(\vec{a}\times\vec{b})$
v1=x*a+y*b+z*(a.cross_product(b)); v1
solve([v1[0]==v[0],v1[1]==v[1],v1[2]==v[2]],[x,y,z])
Posljednja koordinata vektora $(\vec{a}\times\vec{b})\times\vec{c}$ jednaka je nula zato jer je $(\vec{a}\times\vec{b})\times\vec{c}\,\perp\, \vec{a}\times\vec{b}$.
Dokažite da je vektor $\vec{p}=(\vec{a}\,\vec{c})\vec{b}-(\vec{a}\vec{b})\vec{c}$ okomit na vektor $\vec{a}$.
$\vec{a}\perp\vec{p}\ \Leftrightarrow\ \vec{a}\cdot\vec{p}=0$
a=vector((a_x,a_y,a_z))
b=vector((b_x,b_y,b_z))
c=vector((c_x,c_y,c_z))
p=(a.dot_product(c))*b-(a.dot_product(b))*c
p.dot_product(a)
expand(p.dot_product(a))
Zadani su vektori $\vec{v}_1=(1,1,2)$ i $\vec{v}_2=(1,0,c)$.
var("c")
v1=vector((1,1,2))
v2=vector((1,0,c))
jednadzba=v1.dot_product(v2)/(norm(v1)*sqrt(v2.dot_product(v2)))==cos(pi/6); jednadzba
u ovom obliku SAGE-u je teško riješiti jednadžbu
solve(jednadzba,c)
pa mu moramo malo pomoći tako da sami kvadriramo tu jednadžbu (naravno, pritom moramo imati na umu uvjete uz koje smijemo kvadrirati)
solve(jednadzba^2,c)
ortogonalne projekcije vektora $\vec{v}_1$ na vektor $\vec{v}_2$ za $c=1$ i $c=7$
projekcija_vektor_vektor(v1,v2.subs(c=1))
projekcija_vektor_vektor(v1,v2.subs(c=7))
Zadani su vektori $\vec{a}=(2m,1,1-m)$, $\vec{b}=(-1,3,0)$ i $\vec{c}=(5,-1,8)$.
var("m")
a=vector((2*m,1,1-m))
b=vector((-1,3,0))
c=vector((5,-1,8))
jednadzba=a.dot_product(b)/(sqrt(a.dot_product(a))*norm(b))==a.dot_product(c)/(sqrt(a.dot_product(a))*norm(c))
jednadzba
solve(jednadzba,m)
volumen tetraedra
V=1/6*abs(mjesoviti_produkt(a.subs(m=1/4),b,c)); V
površina baze određena s vektorima $\vec{b}$ i $\vec{c}$
B=1/2*norm(b.cross_product(c)); B
duljina visine tetraedra spuštena na bazu određenu vektorima $\vec{b}$ i $\vec{c}$
3*V/B
Zadani su vektori $\vec{a}=(3,-1,4), \vec{b}=(-1,2,5), \vec{c}=(2,-2,k)$.
var("k")
a=vector((3,-1,4))
b=vector((-1,2,5))
c=vector((2,-2,k))
d=vector((-1,4,6))
solve(b.dot_product(c)==0,k)
površina paralelograma
norm(a.cross_product(c.subs(k=6/5)))
volumen piramide
1/6*abs(mjesoviti_produkt(a,b,c.subs(k=6/5)))
Kako je mješoviti produkt vektora $\vec{a}, \vec{b}, \vec{c}$ različit od nule, slijedi da su oni nekomplanarni pa čine bazu za $V^3$. Stoga se vektor $\vec{d}$ može na jedinstveni način prikazati kao linearna kombinacija vektora $\vec{a}, \vec{b}, \vec{c}$.
$\vec{d}=x\cdot\vec{a}+y\cdot\vec{b}+z\cdot\vec{c}$
d1=x*a+y*b+z*c.subs(k=6/5); d1
solve([d1[0]==d[0],d1[1]==d[1],d1[2]==d[2]],[x,y,z])
Zadani su vektori $\vec{a}=(0,-2,3), \vec{b}=(2,1,5), \vec{c}=(2,2,0)$.
var("x_1 x_2 x_3")
a=vector((0,-2,3))
b=vector((2,1,5))
c=vector((2,2,0))
x=vector((x_1,x_2,x_3))
sustav=[x.dot_product(a)==1,x.dot_product(b)==7,x.dot_product(c)==3]; sustav
solve(sustav,[x_1,x_2,x_3])
x=vector((1/2,1,1))
drugi dio zadatka
vektori=[b.cross_product(c),a.cross_product(b.cross_product(c))]; vektori
neki vektor okomit na vektore $\vec{x}$ i $\vec{a}\times(\vec{b}\times\vec{c})$
v=x.cross_product(vektori[1]); v
postoje ukupno dva jedinična vektora koji su okomiti na vektore $\vec{x}$ i $\vec{a}\times(\vec{b}\times\vec{c})$
1/norm(v)*v
-1/norm(v)*v