Vektorska algebra u pythonu

In [1]:
import platform
In [2]:
platform.platform()
Out[2]:
'Linux-5.4.143-1-MANJARO-x86_64-with-glibc2.33'
In [3]:
platform.python_version()
Out[3]:
'3.9.6'

Korištenje numpy modula

In [4]:
import numpy as np
In [5]:
import numpy.linalg as LA

Definiranje vektora

In [6]:
v1=np.array([1,2,-3])
v2=np.array([2,-1,1])

Zbrajanje vektora

In [7]:
v1+v2
Out[7]:
array([ 3,  1, -2])

Oduzimanje vektora

In [8]:
v1-v2
Out[8]:
array([-1,  3, -4])

Množenje vektora skalarom

In [9]:
5/4*v1
Out[9]:
array([ 1.25,  2.5 , -3.75])
In [10]:
-3*v2
Out[10]:
array([-6,  3, -3])

Linearna kombinacija vektora

In [11]:
2/5*v1+7*v2
Out[11]:
array([14.4, -6.2,  5.8])

Duljina vektora

In [12]:
LA.norm(v1)
Out[12]:
3.7416573867739413
In [13]:
LA.norm(v2)
Out[13]:
2.449489742783178
In [14]:
LA.norm(2/5*v1+7*v2)
Out[14]:
16.71645895517349

Duljina vektora v1 zaokružena na 5 decimala

In [15]:
round(LA.norm(v1),5)
Out[15]:
3.74166

Skalarni produkt vektora

In [16]:
v1,v2
Out[16]:
(array([ 1,  2, -3]), array([ 2, -1,  1]))
In [17]:
np.dot(v1,v2)
Out[17]:
-3
In [18]:
np.dot(v2,v1)
Out[18]:
-3

Kut između vektora u radijanima

In [19]:
kut_rad=np.arccos(np.dot(v1,v2)/(LA.norm(v1)*LA.norm(v2)))
kut_rad
Out[19]:
1.9042694990467288

Kut između vektora u stupnjevima

In [20]:
kut_rad*180/np.pi
Out[20]:
109.1066053508691

Vektorski produkt vektora

In [21]:
np.cross(v1,v2)
Out[21]:
array([-1, -7, -5])
In [22]:
np.cross(v2,v1)
Out[22]:
array([1, 7, 5])

Mješoviti produkt vektora

In [23]:
a=np.array([1,2,-6])
b=np.array([-3,2,7])
c=np.array([0,2,3])
In [24]:
np.dot(np.cross(a,b),c)
Out[24]:
46

Parnom permutacijom vektora mješoviti produkt se ne mijenja, a neparnom permutacijom vektora mješoviti produkt mijenja predznak.

In [25]:
np.dot(np.cross(b,a),c)
Out[25]:
-46
In [26]:
np.dot(np.cross(b,c),a)
Out[26]:
46

1. zadatak

Nađite ortogonalnu projekciju vektora $\vec{x}=(1,1,1)$ na vektor $\vec{a}=(2,1,2)$.

Rješenje

In [27]:
x=np.array([1,1,1])
a=np.array([2,1,2])
In [28]:
np.dot(x,a)/(LA.norm(a)**2)*a
Out[28]:
array([1.11111111, 0.55555556, 1.11111111])

2. zadatak

Odredite vrijednost izraza $\big(\big(2\vec{a}+\vec{b}\big)\times\vec{c}\big)^2-2\vec{a}\big(\vec{b}+\vec{c}\big)+\vec{a}^2\vec{c}^2$ ako je $\vec{a}=(2,0,-3)$, $\vec{b}=(-5,2,4)$ i $\vec{c}=(-4,6,7)$.

Rješenje

In [29]:
a=np.array([2,0,-3])
b=np.array([-5,2,4])
c=np.array([-4,6,7])

Radi jednostavnosti računat ćemo pojedine dijelove zadanog izraza korak po korak.

In [30]:
vek=np.cross(2*a+b,c)
vek
Out[30]:
array([26, 15,  2])
In [31]:
broj1=np.dot(vek,vek)
broj1
Out[31]:
905
In [32]:
broj2=2*np.dot(a,b+c)
broj2
Out[32]:
-102
In [33]:
broj3=np.dot(a,a)*np.dot(c,c)
broj3
Out[33]:
1313

Konačno rješenje

In [34]:
broj1-broj2+broj3
Out[34]:
2320

Možemo zadani izraz izračunati u jednom koraku

In [35]:
np.dot(np.cross(2*a+b,c),np.cross(2*a+b,c))-2*np.dot(a,b+c)+np.dot(a,a)*np.dot(c,c)
Out[35]:
2320

3. zadatak

Zadani su vektori $\vec{a}=(2,1,-1)$, $\vec{b}=(-1,3,0)$ i $\vec{c}=(5,-1,8)$.

  1. Odredite volumen paralelepipeda razapetog s vektorima $\vec{a}$, $\vec{b}$ i $\vec{c}$.
  2. Odredite duljinu visine paralelepipeda spuštenu na bazu određenu vektorima $\vec{a}$ i $\vec{c}$.

Rješenje

In [36]:
a=np.array([2,1,-1])
b=np.array([-1,3,0])
c=np.array([5,-1,8])

a) dio

In [37]:
vol=np.abs(np.dot(np.cross(a,b),c))
vol
Out[37]:
70

b) dio

površina baze

In [38]:
Baza=LA.norm(np.cross(a,c))
Baza
Out[38]:
23.2163735324878

duljina visine

In [39]:
vol/Baza
Out[39]:
3.015113445777636

Korištenje sympy modula

Ukoliko je potrebno koristiti simbolički račun, to možemo pomoću sympy modula.

In [40]:
import sympy as sp
In [41]:
sp.init_printing()

Vektore možemo definirati kao jednostupčane matrice

In [42]:
v1=sp.Matrix([1,2,-3])
v2=sp.Matrix([2,-1,1])
In [43]:
v1.shape
Out[43]:
$\displaystyle \left( 3, \ 1\right)$

Zbrajanje vektora

In [44]:
v1+v2
Out[44]:
$\displaystyle \left[\begin{matrix}3\\1\\-2\end{matrix}\right]$

Oduzimanje vektora

In [45]:
v1-v2
Out[45]:
$\displaystyle \left[\begin{matrix}-1\\3\\-4\end{matrix}\right]$

Množenje vektora skalarom

In [46]:
5/4*v1
Out[46]:
$\displaystyle \left[\begin{matrix}1.25\\2.5\\-3.75\end{matrix}\right]$
In [47]:
sp.Rational(5,4)*v1
Out[47]:
$\displaystyle \left[\begin{matrix}\frac{5}{4}\\\frac{5}{2}\\- \frac{15}{4}\end{matrix}\right]$
In [48]:
-3*v2
Out[48]:
$\displaystyle \left[\begin{matrix}-6\\3\\-3\end{matrix}\right]$

Linearna kombinacija vektora

In [49]:
2/5*v1+7*v2
Out[49]:
$\displaystyle \left[\begin{matrix}14.4\\-6.2\\5.8\end{matrix}\right]$
In [50]:
sp.Rational(2,5)*v1+7*v2
Out[50]:
$\displaystyle \left[\begin{matrix}\frac{72}{5}\\- \frac{31}{5}\\\frac{29}{5}\end{matrix}\right]$

Duljina vektora

In [51]:
v1.norm()
Out[51]:
$\displaystyle \sqrt{14}$
In [52]:
sp.N(v1.norm())
Out[52]:
$\displaystyle 3.74165738677394$
In [53]:
sp.N(v1.norm(),50)
Out[53]:
$\displaystyle 3.7416573867739413855837487323165493017560198077787$
In [54]:
v2.norm()
Out[54]:
$\displaystyle \sqrt{6}$

Skalarni produkt vektora

In [55]:
v1,v2
Out[55]:
$\displaystyle \left( \left[\begin{matrix}1\\2\\-3\end{matrix}\right], \ \left[\begin{matrix}2\\-1\\1\end{matrix}\right]\right)$
In [56]:
v1.dot(v2)
Out[56]:
$\displaystyle -3$
In [57]:
v2.dot(v1)
Out[57]:
$\displaystyle -3$

Kut između vektora u radijanima

In [58]:
kut_rad=sp.acos(v1.dot(v2)/(v1.norm()*v2.norm()))
kut_rad
Out[58]:
$\displaystyle \operatorname{acos}{\left(- \frac{\sqrt{21}}{14} \right)}$
In [59]:
sp.N(kut_rad)
Out[59]:
$\displaystyle 1.90426949904673$

Kut između vektora u stupnjevima

In [60]:
sp.N(kut_rad*180/sp.pi)
Out[60]:
$\displaystyle 109.106605350869$

Vektorski produkt vektora

In [61]:
v1.cross(v2)
Out[61]:
$\displaystyle \left[\begin{matrix}-1\\-7\\-5\end{matrix}\right]$
In [62]:
v2.cross(v1)
Out[62]:
$\displaystyle \left[\begin{matrix}1\\7\\5\end{matrix}\right]$

Mješoviti produkt vektora

In [63]:
a=sp.Matrix([1,2,-6])
b=sp.Matrix([-3,2,7])
c=sp.Matrix([0,2,3])
In [64]:
(a.cross(b)).dot(c)
Out[64]:
$\displaystyle 46$

Parnom permutacijom vektora mješoviti produkt se ne mijenja, a neparnom permutacijom vektora mješoviti produkt mijenja predznak.

In [65]:
(b.cross(a)).dot(c)
Out[65]:
$\displaystyle -46$
In [66]:
(b.cross(c)).dot(a)
Out[66]:
$\displaystyle 46$

4. zadatak

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)$.

Rješenje

In [67]:
l=sp.var('l')
In [68]:
a=sp.Matrix([2,1,-1])
b=l*a
b
Out[68]:
$\displaystyle \left[\begin{matrix}2 l\\l\\- l\end{matrix}\right]$
In [69]:
sp.solve(a.dot(b)-12,l)
Out[69]:
$\displaystyle \left[ 2\right]$
In [70]:
sp.solveset(a.dot(b)-12,l)
Out[70]:
$\displaystyle \left\{2\right\}$

$\vec{b}=(4,2,-2)=4\vec{i}+2\vec{j}-2\vec{k}$

In [71]:
b.subs({l:2})
Out[71]:
$\displaystyle \left[\begin{matrix}4\\2\\-2\end{matrix}\right]$

5. zadatak

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$.

Rješenje

1. način: bez upotrebe vektorskog produkta

In [72]:
x,y,z=sp.var('x y z')
In [73]:
a=sp.Matrix([2,3,-1])
b=sp.Matrix([1,-2,3])
c=sp.Matrix([2,-1,1])
v=sp.Matrix([x,y,z])

$\vec{v}=(-3,3,3)=-3\vec{i}+3\vec{j}+3\vec{k}$

In [74]:
v.dot(a), v.dot(b), v.dot(c)+6
Out[74]:
$\displaystyle \left( 2 x + 3 y - z, \ x - 2 y + 3 z, \ 2 x - y + z + 6\right)$
In [75]:
sp.linsolve([v.dot(a),v.dot(b),v.dot(c)+6],(x,y,z))
Out[75]:
$\displaystyle \left\{\left( -3, \ 3, \ 3\right)\right\}$

2. način: upotrebom vektorskog produkta

In [76]:
v=l*(a.cross(b)); v
Out[76]:
$\displaystyle \left[\begin{matrix}7 l\\- 7 l\\- 7 l\end{matrix}\right]$
In [77]:
sp.solve(v.dot(c)+6,l)
Out[77]:
$\displaystyle \left[ - \frac{3}{7}\right]$

$\vec{v}=(-3,3,3)=-3\vec{i}+3\vec{j}+3\vec{k}$

In [78]:
v.subs({l:-3/7})
Out[78]:
$\displaystyle \left[\begin{matrix}-3.0\\3.0\\3.0\end{matrix}\right]$
In [79]:
v.subs({l:sp.Rational(-3,7)})
Out[79]:
$\displaystyle \left[\begin{matrix}-3\\3\\3\end{matrix}\right]$

6. zadatak

Zadani su vektori $\vec{a}=(3,-1,4),  \vec{b}=(-1,2,5),  \vec{c}=(2,-2,k)$.

  • Nađite parametar $k$ ako znamo da su vektori $\vec{b}$ i $\vec{c}$ okomiti.
  • Odredite površinu paralelograma određenog s vektorima $\vec{a}$ i $\vec{c}$.
  • Odredite volumen piramide određene s vektorima $\vec{a}$, $\vec{b}$ i $\vec{c}$.
  • Da li vektori $\vec{a},\vec{b},\vec{c}$ čine bazu za $V^3$? Ako je odgovor potvrdan, prikažite vektor $\vec{d}=(-1,4,6)$ kao linearnu kombinaciju vektora $\vec{a}$, $\vec{b}$ i $\vec{c}$.

Rješenje

In [80]:
k=sp.var("k")
a=sp.Matrix([3,-1,4])
b=sp.Matrix([-1,2,5])
c=sp.Matrix([2,-2,k])
d=sp.Matrix([-1,4,6])
In [81]:
sp.solve(b.dot(c),k)
Out[81]:
$\displaystyle \left[ \frac{6}{5}\right]$

površina paralelograma

In [82]:
a.cross(c.subs({k:sp.Rational(6,5)})).norm()
Out[82]:
$\displaystyle \frac{2 \sqrt{510}}{5}$

volumen piramide

In [83]:
sp.Rational(1,6) * sp.Abs((a.cross(b)).dot(c.subs({k:sp.Rational(6,5)})))
Out[83]:
$\displaystyle 3$

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}$

In [84]:
d1=x*a+y*b+z*c.subs({k:sp.Rational(6,5)}); d1
Out[84]:
$\displaystyle \left[\begin{matrix}3 x - y + 2 z\\- x + 2 y - 2 z\\4 x + 5 y + \frac{6 z}{5}\end{matrix}\right]$
In [85]:
sp.linsolve([d1[0]-d[0],d1[1]-d[1],d1[2]-d[2]],[x,y,z])
Out[85]:
$\displaystyle \left\{\left( \frac{17}{15}, \ \frac{11}{15}, \ - \frac{11}{6}\right)\right\}$

7. zadatak

Odredite parametar $k\in\mathbb{R}$ tako da vektori $\vec{a}=(3,-1,4),$  $\vec{b}=(-1,2,5)$ i  $\vec{c}=(2,-2,k)$ budu komplanarni.

Rješenje

In [86]:
a=sp.Matrix([3,-1,4])
b=sp.Matrix([-1,2,5])
c=sp.Matrix([2,-2,k])

Vektori su komplanarni ako i samo ako je njihov mješoviti produkt jednak nula.

In [87]:
sp.solve((a.cross(b)).dot(c),k)
Out[87]:
$\displaystyle \left[ - \frac{12}{5}\right]$
In [ ]: