Как найти действительную часть сложного векторного поля в простом Python? - PullRequest
0 голосов
/ 04 апреля 2019

У меня слишком сложное векторное поле. Я должен выделить реальную часть сложного векторного поля. Как отделить действительную часть комплексного векторного поля, используя sympy в Python? (векторное поле, связанное с ягодным соединением и ягодной кривизной)

Я пытался объявить k_x, k_y, k_z действительными и взять сопряжение векторного поля и добавить вектор и его сопряжение, чтобы получить действительную часть вектора. Но я получил некоторые ошибки, когда объявил k_x, k_y, k_z реальными. Поэтому нужна помощь, чтобы отделить реальную часть от вектора. Сложное поле, которое я получил, - B в коде, и я должен отделить его реальную часть. (здесь это в системе отсчета k и k_x, k_y, k_z , как x, y, z в реальной плоскости и kx, ky, kz - единичные векторы в соответствующих направлениях)

import numpy as np 
from sympy import *
from sympy.physics.vector import *
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt



sigma_x = Matrix([[0,1],[1,0]]);
sigma_y = Matrix([[0,-1j],[1j,0]]);
sigma_z = Matrix([[1,0],[0,-1]]);

k=ReferenceFrame('k');

H=sigma_x*k[0]+sigma_y*k[1]+sigma_z*k[2];
H1=sigma_x*k[0]-sigma_y*k[1]+sigma_z*k[2];

t = H.eigenvects();
print(t);
psi_1=t[0][2];
psi_2=t[1][2];
psi_1=Matrix(psi_1);
psi_2=Matrix(psi_2);

t1 = H1.eigenvects();
psi_1h=t1[0][2];
psi_2h=t1[1][2];
psi_1h=Matrix(psi_1h).T;
psi_2h=Matrix(psi_2h).T;

grad_psi_1_0 = gradient(psi_1[0],k);
grad_psi_1_1 = gradient(psi_1[1],k);

A = (psi_1h[0]*grad_psi_1_0 + psi_1h[1]*grad_psi_1_1);
A=A*1j;


B=curl(A,k);

Результат B (комплексное векторное поле), полученный из кода:

(- 1,0 * k_y k_z I * (- k_x + k_y I) (k_x + k_y I) (k_x 2 + k_y 2 + k_z 2) (- 1,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) ** 0,5) ** 3 + 3,0 * k_y I (- k_x + k_y I) (k_x + k_y I) (- 1,0 * k_z * (k_x 2) + k_y 2 + k_z 2) (- 0,5) - 1) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0.5) ** 4 + 1,0 * (- k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) / (k_z + ( k_x 2 + k_y 2 + k_z 2) 0,5) ** 3 + 1,0 * I * (k_x + k_y I) (- 1,0 * k_y k_z (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 1,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 + 1,0 * k_y * (k_x - k_y I) (- 2,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 2 ) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 +) k_z 2) 0,5) ** 3 + I * (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2) / (k_z + (k_x 2 + k_y 2) + k_z 2) 0,5) + 1,0 * I * (k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z *) 1110 * 2) (- 0,5) - 1) * (1,0 * k_y * (k_x) - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y * 1119) * 2 + k_z 2) 0,5) ** 2 + I / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5)) / ( k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 + 1,0 * (k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 3) * k.x + (1,0 * k_x k_z I * (- k_x + k_y I) (k_x + k_y I) (k_x 2 + k_y 2 + k_z 2) (- 1,5) / (k_z + (к_х 2 + k_y 2 + k_z 2) 0,5) ** 3 - 3,0 * k_x I (- k_x + k_y I) (k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 4 + 1,0 * I * (- k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 3 - 1,0 * I * (k_x + k_y I) (- 1,0 * k_x k_z (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 1,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 + 1,0 * k_x * (k_x - k_y I) (- 2,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 2 ) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 +) k_z 2) 0,5) ** 3 - (-1,0 * k_z * (k_x 2 + k_y 2 + k_z 2) (- 0,5) - 1) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2) / (k_z + (k_x 2 + k_y 2)+ k_z 2) 0,5) - 1,0 * I * (k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 + k_z *) 1226 * 2) (- 0,5) - 1) * (1,0 * k_x * (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 - 1 / (k_z + (k_x 2 + k_y 2 + k_z 2) 0.5)) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 - 1,0 * I * (k_x + k_y I) (- 1,0 * k_z * (k_x 2 + k_y 2 +) k_z 2) (- 0,5) - 1) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 3) * ky + (1,0 * k_x I (k_x + k_y I) (1,0 * k_y * (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / ( k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 + I / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5)) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 +) k_y 2 + k_z 2) 0,5) ** 2 - 1,0 * k_y I (k_x + k_y I) (1,0 * k_x * (k_x) - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y ) 2 + k_z 2) 0,5) ** 2 - 1 / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5)) * (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 - 1,0 * (1,0 * k_x * (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + ( k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 - 1 / (k_z + (k_x 2 + k_y 2 +) k_z 2) 0,5)) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) - 1,0 * I * (1,0 * k_y * (k_x - k_y I) (k_x 2 + k_y 2 + k_z 2) (- 0,5) / (k_z + (k_x 2 + k_y 2 + k_z 2) 0,5) ** 2 + I / (k_z + (k_x 2 + k_y 2 +) k_z 2) 0,5)) / (k_z + (k_x 2 + k_y 2 + k_z 2) ** 0,5)) * k.z

Мне нужно найти реальную часть этого вектора.

...