GNU/Linux >> Linux Esercitazione >  >> Linux

Algebra vettoriale su Scientific Linux 7.1 con script Python:parte 1

In questo tutorial, discuteremo l'algebra vettoriale e i relativi calcoli in Scientific Linux. Per il nostro scopo, ho scelto Python come linguaggio di programmazione per la sua semplicità e potenza di calcolo. Qualsiasi distribuzione Linux ha per impostazione predefinita un editor/compilatore Python che viene richiamato tramite una finestra del terminale. Esaminiamo alcuni concetti di algebra vettoriale.

Nota:lavoreremo solo sullo spazio reale di due o tre dimensioni.

Algebra vettoriale

L'elemento di uno spazio vettoriale, da un punto di vista matematico, può essere rappresentato come l'array di un numero di elementi che appartengono a quello spazio vettoriale. Più specificamente, e nell'approccio del calcolo numerico, può essere rappresentato come un elenco di numeri reali, che ha tre caratteristiche fondamentali:

Magnitudo

La dimensione del vettore ed è rappresentata con  ;questa è la parte scalare di un vettore. Per calcolare la grandezza di un vettore dobbiamo eseguire la seguente formula:

X, Y e Z sono le coordinate vettoriali.

Direzione

La direzione di un vettore è data da una direttrice avente un angolo specifico per ciascun asse del sistema di coordinate chiamato angoli direttrice.

Laddove alfa, beta e gamma sono gli angoli del direttore del vettore ei loro coseni sono i coseni del direttore, possono anche essere calcolati dividendo ciascuna coordinata del vettore per la sua magnitudine.

Orientamento

Uno dei due possibili orientamenti tra la stessa direzione.

Somma algebrica vettoriale

Per fare una somma algebrica di vettori, dobbiamo sommare le coordinate omologhe di due vettori, rispettando le stesse proprietà della somma algebrica di numeri reali. Proprio come segue:


Come possiamo vedere, il risultato è un altro vettore, appartenente allo stesso spazio vettoriale.

Prodotto di un vettore da uno scalare

Dati un vettore e uno scalare, il vettore prodotto di uno scalare è definito come il prodotto scalare di ciascuna coordinata del vettore:

Dove

Unit Vector

Un'applicazione diretta per Product vector da uno scalare è il vettore unitario, a unità vettoriale è un vettore normato di lunghezza 1.

Combinazione lineare

Quando mescoliamo le operazioni passate, somma algebrica e prodotto vettore-scalare, otteniamo una combinazione lineare, in cui il risultato è anche un vettore appartenente allo stesso spazio vettoriale, come è:

Dove il vettore A è una combinazione lineare di vettori B e C.

Python su Scientific Linux 7.1

Per implementare l'algebra vettoriale abbiamo scelto Python come linguaggio di calcolo. L'editor di testo che scegliamo è gedit e viene fornito per impostazione predefinita con la distribuzione Scientific Linux 7.1.

Magnitudo di un vettore

Chiamiamo gedit utilizzando un terminale o semplicemente fare clic sull'icona nella scheda delle applicazioni:



Per prima cosa dobbiamo lavorare con le liste, in quanto rappresentano vettori e devono essere dichiarate come è: 

V=[2, 2, 1]

Dichiariamo una variabile per memorizzare la grandezza e diamo un valore, usiamo 0.

modV=0

Ora usiamo la matematica di classe per operare sulla radice quadrata:

import math

Il calcolo della grandezza:

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

Come possiamo vedere, dobbiamo usare sub-index per indicare l'elemento della lista che opereremo, partendo da 0.

Lo script completo è il seguente:

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

Una volta terminato, dobbiamo salvare il file con estensione .py e individuare il percorso del file e aprire una finestra di terminale con il tasto destro del mouse e quindi "apri nella finestra di terminale". Dopo dobbiamo chiamare l'interprete Python digitando:

$ python [path]/yourfilename.py

questo aprirà una finestra come questa e darà il risultato:



Un altro modo per farlo è usare un ciclo for come questi:

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

Qui dobbiamo usare le tecniche di indentazione poiché l'interprete Python funziona in questo modo.

Direzione di un vettore

Usa la matematica in classe

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)

Il risultato è il seguente:



Un altro modo per farlo è usare le funzioni trigonometriche della classe di matematica, semplicemente in questo modo:

Calcoliamo innanzitutto gli angoli della regia:

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

E poi calcoliamo i coseni del direttore e li stampiamo

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


E il risultato:



Possiamo osservare che i coseni del direttore hanno lo stesso valore

Orientamento di un vettore

Se cambiamo il segno di tutte le coordinate di un vettore, intrinsecamente, stiamo cambiando l'orientamento del vettore, così com'è:

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)



Nell'immagine successiva possiamo vedere gli angoli del regista sono diversi a 180 gradi dagli originali

Somma algebrica vettoriale

Per prima cosa dobbiamo dichiarare tutti i vettori coinvolti nella somma algebrica, così come:

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

dove sommiamo A più B e il risultato memorizzeremo in S

L'aggiunta di due vettori (liste) in Python equivale a eseguire un ciclo 'for' per ciascuna coordinata del vettore risultante, quindi dobbiamo fare quanto segue:

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

Qui abbiamo lo script completo per la somma vettoriale algebrica:

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

E il risultato è:

Prodotto di un vettore da uno scalare

Dato un vettore: 

A=[1,-2,3]

e uno scalare:

scalar=-2

prodotto vettore da uno scalare è definito come il prodotto scalare di ciascuna coordinata del vettore:

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

e il risultato è:

Unit Vector

Utilizzando lo script 'Magnitudo di un vettore' abbiamo:

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 

e il risultato è:

Combinazione lineare

Dati tre vettori, A, B e C, possiamo calcolare i valori scalari che, moltiplicati rispettivamente per B e C, risultano nel vettore A. In altre parole, ponendo il vettore A come combinazione lineare dei vettori B e C :

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

Una combinazione lineare porta ad un sistema di equazioni, 3 equazioni con 2 variabili (scalari) se tre vettori r3, oppure 2 equazioni con 2 variabili se sono due vettori in R3, che possono risolversi applicando un determinante di una matrice. Qui dobbiamo fare un punto a causa dei tipi di dati gestiti da Python. In molti casi, quando si calcolano gli scalari coinvolti in una combinazione lineare, il risultato avrà cifre decimali, che si tradurranno in operazioni in virgola mobile. I tipi di dati numerici, gestiti da Python, sono:Integer, Real, Long. Quindi, dobbiamo inserire le coordinate dei vettori come tipo di dati Real, quindi questi rappresentano numeri reali (virgola mobile). Dobbiamo conoscere e comprendere alcune caratteristiche del tipo di dati in Python:

  • Intero occupa meno spazio di memoria rispetto al tipo Reale.
  • Le operazioni con Real sono più lente di Integer.

Qui abbiamo gli stessi vettori, ma dichiarati come tipo Real:

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

Quindi, con questo possiamo scambiare i vettori e quindi avere sempre la soluzione del sistema.

Il primo controllo che dobbiamo fare è se c'è o meno complanarità tra i vettori, quindi sapere se c'è o meno è una combinazione lineare. Per questo, implementeremo una matrice determinante:




Codice:
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

Se questo determinante è uguale a zero (0) allora c'è una dipendenza lineare tra i vettori e possiamo continuare a calcolare gli scalari. Come accennato in precedenza, il sistema di equazioni ha tre equazioni con due variabili, ottenendo un sistema compatibile determinato, per il quale dobbiamo prendere due delle tre equazioni e risolvere valori scalari, quindi verificare con la terza equazione, non presa prima, se la precedente i valori scalari lo risolvono. Se non lo risolvono, allora non c'è una Combinazione Lineare.


Qui abbiamo il codice completo:

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'


E il risultato:

[[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]#


In conclusione, l'algebra vettoriale di base risulta in una serie di operazioni che coinvolgono sistemi lineari di equazioni e/o semplici operazioni aritmetiche con numeri reali. In un altro tutorial vedremo come possiamo sviluppare prodotti con vettori, come prodotto punto, prodotto incrociato o prodotto misto.


Linux
  1. Fai uno screenshot tramite uno script Python su Linux

  2. Ottieni il tempo di creazione del file con Python su Linux

  3. Come uscire dal terminale Linux usando lo script Python?

  4. Come uccidere lo script Python con lo script bash

  5. Come eseguire parte di uno script con privilegi ridotti?

Impara i comandi Git con esempi pratici su Linux - Parte 1

Shell Scripting Parte I:Introduzione agli script bash

Scopri come rilevare le apparecchiature di rete con Scientific Linux 7.1 e Python

Introduzione a VirtualBox in Linux – Parte 1

Debug in pyCharm con privilegi sudo?

Rendi lo script Python combinato con i pacchetti Linux facilmente installabili per l'utente finale