Поиск по сайту:

Векторная алгебра в Scientific Linux 7.1 со скриптом Python: часть 1


На этой странице

  1. Векторная алгебра
    1. Величина
    2. Направление
    3. Ориентация
    4. Векторная алгебраическая сумма
    5. Произведение вектора на скаляр
    6. Единичный вектор
    7. Линейная комбинация

    1. Величина вектора
    2. Направление вектора
    3. Ориентация вектора
    4. Векторная алгебраическая сумма
    5. Произведение вектора на скаляр
    6. Единичный вектор
    7. Линейная комбинация

    В этом уроке мы обсудим векторную алгебру и соответствующие вычисления в Scientific Linux. Для нашей цели я выбрал Python в качестве языка программирования из-за его простоты и мощности вычислений. В любом дистрибутиве Linux по умолчанию есть редактор/компилятор Python, который вызывается через окно терминала. Давайте рассмотрим некоторые понятия векторной алгебры.

    Примечание: мы будем работать только с реальным двух- или трехмерным пространством. =div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins=document .createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive =правда;}

    Векторная алгебра

    Элемент векторного пространства, с математической точки зрения, может быть представлен как массив элементов, принадлежащих этому векторному пространству. Более конкретно, и в подходе численных вычислений его можно представить в виде списка действительных чисел, который имеет три основные характеристики:

    Величина

    X, Y и Z — координаты вектора.

    Направление

    Направление вектора задается направляющей линией, имеющей определенный угол для каждой оси системы координат, называемой углами направления.

    Если альфа, бета и гамма — углы направления вектора, а их косинусы — косинусы направления, их также можно вычислить, разделив каждую координату вектора на ее величину.

    Ориентация

    Одна из двух возможных ориентаций между одним и тем же направлением.

    Векторная алгебраическая сумма

    Чтобы составить алгебраическую сумму векторов, мы должны сложить гомологичные координаты двух векторов, учитывая те же свойства алгебраической суммы действительных чисел. Просто следующим образом:

    Произведение вектора на скаляр

    Для вектора и скаляра произведение вектора на скаляр определяется как скалярное произведение каждой координаты вектора:

    Единичный вектор

    Прямое приложение для вектора продукта с помощью скаляра — это единичный вектор, единичный вектор — это нормированный вектор длины 1.

    Линейная комбинация

    Когда мы смешиваем прошлые операции, алгебраическую сумму и векторно-скалярное произведение, мы получаем линейную комбинацию, в которой результатом также является вектор, принадлежащий тому же векторному пространству, как есть:

    Где вектор A представляет собой линейную комбинацию векторов B и C.

    Python в Scientific Linux 7.1

    Для реализации векторной алгебры мы выбрали Python в качестве языка вычислений. Мы выбираем текстовый редактор gedit, который по умолчанию входит в состав дистрибутива Scientific Linux 7.1.

    Величина вектора

    Давайте вызовем gedit через терминал или просто кликнем по иконке на вкладке приложений:

    V=[2, 2, 1]

    Давайте объявим переменную для хранения величины и присвоим значение, мы используем 0.

    modV=0

    Теперь мы используем математику класса для работы с квадратным корнем:

    import math

    Расчет величины:

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

    Как мы видим, мы должны использовать субиндекс, чтобы указать элемент из списка, с которым мы будем работать, начиная с 0.

    Полный скрипт выглядит следующим образом:

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

    После завершения мы должны сохранить файл с расширением .py и найти путь к файлу и открыть там окно терминала, щелкнув правой кнопкой мыши, а затем «открыть в окне терминала». После того, как мы должны вызвать интерпретатор Python, введите:

    $ python [path]/yourfilename.py
    for x in range (0,3):
        modV+=V[x]**2
    modV=math.sqrt(modV)

    Здесь мы должны использовать методы отступов, поскольку интерпретатор Python работает таким образом.

    Направление вектора

    Используйте математику класса

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

    Ориентация вектора

    Если мы изменим знак всех координат вектора, мы, по сути, изменим ориентацию вектора, как есть:

    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)

    Векторная алгебраическая сумма

    Сначала мы должны объявить все векторы, участвующие в алгебраической сумме, как есть:

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

    где собирались суммировать A плюс B и результат будет храниться в S

    Добавление двух векторов (списков) в Python эквивалентно запуску цикла for для каждой координаты результирующего вектора, поэтому нам нужно сделать следующее:

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

    Здесь у нас есть полный скрипт для алгебраической векторной суммы:

    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=[1,-2,3]

    и скаляр:

    scalar=-2

    вектор произведения на скаляр определяется как скалярное произведение каждой координаты вектора:

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

    Единичный вектор

    Используя величину векторного скрипта, мы имеем:

    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, B и C, мы можем вычислить скалярные значения, которые, умноженные на B и C соответственно, дают вектор A. Другими словами, поместив вектор A как линейную комбинацию векторов B и C :

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

    Линейная комбинация приводит к системе уравнений, 3 уравнения с 2 переменными (скалярами), если три вектора r3, или 2 уравнения с 2 переменными, если они являются двумя векторами в R3, которые можно решить, применяя определитель матрицы. Здесь мы должны сделать замечание из-за типов данных, обрабатываемых Python. Во многих случаях при вычислении скаляров, участвующих в линейной комбинации, результат будет иметь десятичные разряды, что приводит к операциям с плавающей запятой. Python обрабатывает числовые типы данных: Integer, Real, Long. Итак, мы должны вставить координаты векторов как тип данных Real, чтобы они представляли действительные числа (с плавающей запятой). Мы должны знать и понимать некоторые характеристики типа данных в Python:

    • Целые числа занимают меньше места в памяти, чем вещественные.
    • Операции с вещественным числом выполняются медленнее, чем с целым числом.

    Здесь у нас есть те же векторы, но объявленные как тип Real:

    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

    Если этот определитель равен нулю (0), значит между векторами существует линейная зависимость и можно продолжить вычисление скаляров. Как упоминалось выше, система уравнений состоит из трех уравнений с двумя переменными, что дает определенную совместную систему, для которой мы должны взять два из трех уравнений и решить скалярные значения, а затем проверить с помощью третьего уравнения, не взятого ранее, если предыдущее скалярные значения решают это. Если они не решают этого, то нет линейной комбинации.


    Здесь у нас есть полный код:

    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'


    И результат:

    [ ejemplos python]#


    В заключение, базовая векторная алгебра приводит к ряду операций, включающих линейные системы уравнений и/или простую арифметику с действительными числами. В другом уроке мы увидим, как мы можем разрабатывать продукты с векторами, такие как точечный продукт, перекрестный продукт или смешанный продукт.