GNU/Linux >> Znalost Linux >  >> Linux

Vektorová algebra na Scientific Linux 7.1 s Python Script:Část 1

V tomto tutoriálu probereme vektorovou algebru a odpovídající výpočty pod Scientific Linux. Pro náš účel jsem zvolil Python jako programovací jazyk pro jeho jednoduchost a výpočetní sílu. Každá distribuce Linuxu má ve výchozím nastavení editor / kompilátor Pythonu, který se spouští přes okno terminálu. Pojďme si projít některé pojmy vektorové algebry.

Poznámka:budeme pracovat pouze na reálném prostoru dvou nebo tří rozměrů.

Vektorová algebra

Prvek vektorového prostoru může být z matematického hlediska reprezentován jako pole řady prvků, které do tohoto vektorového prostoru patří. Konkrétněji a v přístupu numerických výpočtů jej lze reprezentovat jako seznam reálných čísel, který má tři základní charakteristiky:

Velikost

Velikost vektoru a je reprezentována pomocí  ;toto je skalární část vektoru. Pro výpočet velikosti vektoru musíme provést následující vzorec:

X, Y a Z jsou vektorové souřadnice.

Směr

Směr vektoru je dán směrovou přímkou, která má pro každou osu souřadnicového systému specifický úhel, nazývaný úhly režiséra.

Kde jsou alfa, beta a gama úhly vektoru a jejich kosinus jsou kosinusy, lze je také vypočítat vydělením každé vektorové souřadnice její velikostí.

Orientace

Jedna ze dvou možných orientací mezi stejným směrem.

Vektorový algebraický součet

Abychom vytvořili algebraický součet vektorů, musíme sečíst homologní souřadnice dvou vektorů, které mají stejné vlastnosti jako algebraický součet reálných čísel. Přesně takto:


Jak vidíme, výsledkem je další vektor, patřící do stejného vektorového prostoru.

Součin vektoru pomocí skaláru

Daný vektor a skalár je součinový vektor skalárem definován jako skalární součin každé souřadnice vektoru:

Kde

Vektor jednotky

Přímou aplikací pro vektor produktu pomocí skaláru je jednotkový vektor, jednotkový vektor je normovaný vektor délky 1.

Lineární kombinace

Když smícháme minulé operace, algebraický součet a součin vektor-skalární, získáme lineární kombinaci, ve které je výsledkem také vektor patřící do stejného vektorového prostoru, jako je:

Vektor A je lineární kombinace vektorů B a C.

Python v systému Scientific Linux 7.1

Pro implementaci vektorové algebry jsme zvolili Python jako kalkulový jazyk. Textový editor, který jsme zvolili, je gedit a je standardně dodáván s distribucí Scientific Linux 7.1.

Velikost vektoru

Zavolejte gedit pomocí terminálu nebo stačí kliknout na ikonu na záložce aplikací:



Nejprve musíme pracovat se seznamy, které představují vektory a měly by být deklarovány jako je: 

V=[2, 2, 1]

Pojďme deklarovat proměnnou pro uložení velikosti a dát hodnotu, použijeme 0.

modV=0

Nyní použijeme matematiku třídy k ovládání druhé odmocniny:

import math

Výpočet velikosti:

modV=math.sqrt(V[0]**2+V[1]**2+V[2]**2)

Jak vidíme, musíme použít subindex k označení položky ze seznamu, kterou budeme provozovat, počínaje 0.

Úplný skript je následující:

V=[2, 2, 1]
modV=0
import math
modV=math.sqrt(V[0]**2+V[1]**2+V[2]**2)
print (modV)

Po dokončení musíme uložit soubor s příponou .py a najít cestu k souboru a kliknutím pravým tlačítkem otevřít okno terminálu a poté "otevřít v okně terminálu". Poté, co budeme muset zavolat python interpretu psaní:

$ python [path]/yourfilename.py

tím se otevře okno, jako je toto, a výsledek:



Další způsob, jak to udělat, je použít cyklus for, jako je tento:

for x in range (0,3):
    modV+=V[x]**2
modV=math.sqrt(modV)

Zde musíme použít techniky odsazení, protože python interpreter funguje tímto způsobem.

Směr vektoru

Použijte třídní matematiku

V=[2, 1, 2]
modV=0
import math
for x in range (0,3): #loop for calculating the magnitude
    modV+=V[x]**2
modV=math.sqrt(modV)
for y in range (0,3): #loop for calculating the director cosines
    V[y]=V[y]/modV
print (V)

Výsledkem je následující:



Dalším způsobem, jak toho dosáhnout, je použití goniometrických funkcí matematické třídy, stačí takto:

Nejprve spočítejme úhly režiséra:

V=[2, 1, 2]
angles=[0,0,0]
modV=0
import math
for y in range (0,3): #loop for calculating the director angles in degrees
    angles[y]=math.degrees(math.acos(V[y]/modV))

A pak spočítejme direktorové kosiny a vytiskněte je

for z in range(0,3):    #loop for calculating the director cosines
    V[z]=math.cos(math.radians(angles[z]))
print (angles)
print (V)


A výsledek:



Můžeme pozorovat, že kosiny ředitele mají stejnou hodnotu

Orientace vektoru

Pokud změníme znaménko všech souřadnic vektoru, inherentně změníme orientaci vektoru, jako je:

V=[-2, -1, -2]
angles=[0,0,0]
modV=0
import math
for y in range (0,3): #loop for calculating the director angles in degrees
    angles[y]=math.degrees(math.acos(V[y]/modV))for z in range(0,3):    #loop for calculating the director cosines
    V[z]=math.cos(math.radians(angles[z]))
print (angles)
print (V)



Na dalším obrázku vidíme, že úhly režiséra se liší o 180 stupňů z originálů

Vektorový algebraický součet

Nejprve musíme deklarovat všechny vektory zahrnuté v algebraickém součtu, jako je:

A=[1,2,4]
B=[2,1,4]
S=[0,0,0]

kde sečteme A plus B a výsledek se uloží do S

Přidání dvou vektorů (seznamů) v Pythonu je ekvivalentní spuštění cyklu „for“ pro každou souřadnici výsledného vektoru, takže musíme udělat následující:

for x in range(0,3):
    S[x]=A[x]+B[x]

Zde máme kompletní skript pro součet algebraických vektorů:

A=[1,2,4]
B=[2,1,4]
S=[0,0,0]

for x in range(0,3): #For loop for adding the homologue coordinate of each vector
    S[x]=A[x]+B[x]
print 'S=',A, '+', B, '=', S

A výsledek je:

Součin vektoru pomocí skaláru

Je dán vektor: 

A=[1,-2,3]

a skalár:

scalar=-2

produktový vektor podle skaláru je definován jako skalární součin všech souřadnic vektoru:

for x in range(0,3):
    R[x]=scalar*A[x]

a výsledek je:

Vektor jednotky

Pomocí skriptu 'Magnituda vektoru' máme:

V=[2, 2, 1]
U=[0,0,0]
modV=0
invmodV=0
import math
modV=math.sqrt(V[0]**2+V[1]**2+V[2]**2)
invmodV=1/modV
for x in range(0,3):
    U[x]=invmodV*V[x]
print 'U=',V,'/',modV,'=',U 

a výsledek je:

Lineární kombinace

Vzhledem ke třem vektorům , A, B a C , můžeme vypočítat skalární hodnoty, které po vynásobení B a C vedou k vektoru A. Jinými slovy umístění vektoru A jako lineární kombinace vektorů B a C :

A=[7, 9, -8]
B=[1, 3, -2]
C=[-2, 0, 1]

Lineární kombinace vede k soustavě rovnic, 3 rovnicím se 2 proměnnými (skaláry), pokud tři vektory r3, nebo 2 rovnicím se 2 proměnnými, pokud jsou to dva vektory v R3, které lze řešit aplikací determinantu matice. Zde musíme upozornit na datové typy, které Python zpracovává. V mnoha případech při výpočtu skalárů zahrnutých v lineární kombinaci bude mít výsledek desetinná místa, což vede k operacím s plovoucí desetinnou čárkou. Číselné datové typy, které Python zpracovává, jsou:Integer, Real, Long. Musíme tedy vložit souřadnice vektorů jako datový typ Real, takže tyto představují reálná čísla (s plovoucí desetinnou čárkou). Musíme znát a rozumět některým charakteristikám datového typu v Pythonu:

  • Celé číslo zabírá méně místa v paměti než typ Real.
  • Operace s Real jsou pomalejší než Integer.

Zde máme stejné vektory, ale deklarované jako typ Real:

A=[7.0,9.0,-8.0]
B=[1.0,3.0,-2.0]
C=[-2.0,0.0,1.0]

Takže s tímto můžeme zaměnit vektory a tak mít vždy systémové řešení.

První kontrola, kterou musíme udělat, je o tom, zda existuje koplanarita mezi vektory nebo ne, takže vědět, zda existuje nebo není je lineární kombinace. Za tímto účelem implementujeme determinantovou matici:




Kód:
det0=A[0]*(B[1]*C[2]-B[2]*C[1])-A[1]*(B[0]*C[2]-B[2]*C[0])+A[2]*(B[0]*C[1]-B[1]*C[0]) #Main Determinant involving all vectors

Pokud je tento determinant roven nule (0), je mezi vektory lineární závislost a můžeme pokračovat ve výpočtu skalárů. Jak bylo uvedeno výše, systém rovnic má tři rovnice se dvěma proměnnými, což dává určený kompatibilní systém, pro který musíme vzít dvě ze tří rovnic a vyřešit skalární hodnoty, poté zkontrolovat pomocí třetí rovnice, kterou jsme předtím nepoužili, pokud předchozí skalární hodnoty to řeší. Pokud toto nevyřeší, pak neexistuje lineární kombinace.


Zde máme úplný kód:

A=[7.0,9.0,-8.0]
B=[1.0,3.0,-2.0]
C=[-2.0,0.0,1.0]
det0=A[0]*(B[1]*C[2]-B[2]*C[1])-A[1]*(B[0]*C[2]-B[2]*C[0])+A[2]*(B[0]*C[1]-B[1]*C[0]) #Main Determinant involving all vectors
if det0==0:
    det1=B[0]*C[1]-B[1]*C[0] #First Determinant involving the first and second lines of the equations system
    if det1==0:
        det2=B[1]*C[2]-B[2]*C[1] #Second Determinant involving the second and third lines of the equations system
        if det2==0:
            print 'Linear Combination Unexistent'
        else:
            det3=A[1]*C[2]-A[2]*C[1]
            det4=B[1]*A[2]-B[2]*A[1]
            sc1=det3/det2
            sc2=det4/det2
            if sc1*B[0]+sc2*C[0]==A[0]:
                print 'Scalar 1 =', sc1, 'Scalar 2 =', sc2
                print A,'=',sc1,'*',B,'+',sc2,'*',C
            else:
                print 'Linear Combination Unexistent'
    else:
        det3=A[0]*C[1]-A[1]*C[0]
        det4=B[0]*A[1]-B[1]*A[0]
        sc1=det3/det1
        sc2=det4/det1
       
        if sc1*B[2]+sc2*C[2]==A[2]:
            print 'Scalar 1 =', sc1, 'Scalar 2 =', sc2
            print A,'=',sc1,'*',B,'+',sc2,'*',C
        else:
            print 'Linear Combination Unexistent'
else:
    print 'Linear Combination Unexistent'


A výsledek:

[[email protected] ejemplos python]# python lincomb.py
Scalar 1 = 3.0 Scalar 2 = -2.0
[7.0, 9.0, -8.0] = 3.0 * [1.0, 3.0, -2.0] + -2.0 * [-2.0, 0.0, 1.0]
[[email protected] ejemplos python]#


Na závěr, základní vektorová algebra vede k sérii operací zahrnujících lineární soustavy rovnic a/nebo jednoduchou aritmetiku s reálnými čísly. V dalším tutoriálu uvidíme, jak můžeme vyvíjet produkty s vektory, jako je tečkovaný produkt, křížový produkt nebo smíšený produkt.


Linux
  1. Jak zabít python skript pomocí bash skriptu

  2. Jak spustit část skriptu se sníženými oprávněními?

  3. Šablony s Linuxem ve skriptu Shell?

  1. Udělejte snímek obrazovky pomocí skriptu Python v systému Linux

  2. Získejte čas na vytváření souborů s Pythonem na linuxu

  3. Jak používat export s Pythonem na Linuxu

  1. Změňte pracovní adresář v shellu pomocí python skriptu

  2. Simulujte úhoz v Linuxu pomocí Pythonu

  3. Skript Python nelze zabít pomocí Ctrl-C