Проблема в следующем: у меня есть уравнение: A * x = 0, где A - матрица 8x8, x - вектор с 8 элементами, а 0 - нулевой вектор.Элементы матрицы A содержат параметр E, значения которого, для которых уравнение разрешимо, я должен найти - и я уже сделал это, используя условие: det (A) = 0.И есть источник моей проблемы - det (A) для найденных значений E не точно 0.0, но что-то очень, очень близко к 0.0, например 9.5e-12.Я интерпретирую это как числовую проблему, но я могу ошибаться?Следующий шаг - найти х.Моя концепция состояла в том, чтобы найти ядро матрицы A, но там моя проблема с ненулевым возвратом det (A), потому что у меня нет E, для которого моё уравнение может быть решено.Можно ли заставить Python работать с приблизительными значениями?
Подводя итог: мне нужно найти метод для определения ядра, когда A * x не совсем 0,0, но значение очень, очень близко к 0,0.
Редактировать: Значение матрицы: [[6.60489454233399, -0.000899873003155720, -1111.26791946547, 0, 0, 0, 0, 0], [8.46748025849121e-8 + 2.5809235665861e-7 * I, -9.08063389853990e-10, 0.00112138236223004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,635021913463456, +1,57474880598360, -1,95244188971305, -0,512179135916290, 0, 0, 0], [0, 6.40801701294518e-7, -1.58908171921515e-6, 2.90298102267184e-6, -7.61531659204450e-7, 0, 0, 0],[0, 0, 0, 0,512179135916290, 1,95244188971305, -1,57474880598360, -0,635021913463456, 0], [0, 0, 0, -7.61531659204450e-7, 2.90298102267184e-6, -1.58908171915, 6151801011915], [0, 0, 0, 0, 0, 784198.968204183, 1.27518657961257e-6, -38.6053002011412], [0, 0, 0, 0, 0,791336522920740, -1.28679296313874e-12, -1.04862603277821e-5])
И пример кода:
from scipy import *
from numpy.linalg import *
from sympy import *
import sys
import numpy
import cmath
import math
a2= 65e5 #Ae-5
a3= 9e5 #Ae-5
a4= 130e5 #Ae-5
l = -a2-a3/2.0
t = -a3/2.0
f = a3/2.0
g = a4+a3/2.0
print 'Defined thickness'
V1= 0.74015 #eV fabs
V2= 1.1184 #eV fabs
V3= 0.74015 #eV fabs
m= 0.11*0.511e6/(2.99792458e+23)**2 #eV*s**2/A**2
hkr= 6.582119514e-16 #eV*s
x= 0.765705051154
print 'other symbols'
k1=(cmath.sqrt(2.0*(V1-x)*m))/hkr
k2=(cmath.sqrt(2.0*(V2-x)*m))/hkr
k3=(cmath.sqrt(-2.0*x*m))/hkr
k4=(cmath.sqrt(2.0*(V2-x)*m))/hkr
k5=(cmath.sqrt(2.0*(V3-x)*m))/hkr
print 'k-vectors'
a11 = cmath.exp(1.0j*k1*l)
a12 = -1.0*cmath.exp(k2*l)
a13 = -1.0*cmath.exp(-k2*l)
print '1st row'
a21 = 1.0j*k1*cmath.exp(k1*l)
a22 = -k2*cmath.exp(k2*l)
a23 = k2*cmath.exp(-k2*l)
print '2nd row'
a32 = cmath.exp(k2*t)
a33 = cmath.exp(-k2*t)
a34 = -1.0*cmath.exp(1.0j*k3*t)
a35 = -1.0*cmath.exp(-1.0j*k3*t)
print '3rd row'
a42 = k2*cmath.exp(k2*t)
a43 = -k2*cmath.exp(-k2*t)
a44 = -1.0j*k3*cmath.exp(1.0j*k3*t)
a45 = 1.0j*k3*cmath.exp(-1.0j*k3*t)
print '4th row'
a54 = cmath.exp(1.0j*k3*f)
a55 = cmath.exp(-1.0j*k3*f)
a56 = -1.0*cmath.exp(k4*f)
a57 = -1.0*cmath.exp(-k4*f)
print '5th row'
a64 = 1.0j*k3*cmath.exp(1.0j*k3*f)
a65 = -1.0j*k3*cmath.exp(-1.0j*k3*f)
a66 = -k4*cmath.exp(k4*f)
a67 = k4*cmath.exp(-k4*f)
print '6th row'
a76 = cmath.exp(k4*g)
a77 = cmath.exp(-k4*g)
a78 = -1.0*cmath.exp(-1.0j*k5*g)
print '7th row'
a86 = k4*cmath.exp(k4*g)
a87 = -k4*cmath.exp(-k4*g)
a88 = 1.0j*k5*cmath.exp(-1.0j*k5*g)
print '8th row'
M = Matrix([[a11,a12,a13,0,0,0,0,0],
[a21,a22,a23,0,0,0,0,0],
[0,a32,a33,a34,a35,0,0,0],
[0,a42,a43,a44,a45,0,0,0],
[0,0,0,a54,a55,a56,a57,0],
[0,0,0,a64,a65,a66,a67,0],
[0,0,0,0,0,a76,a77,a78],
[0,0,0,0,0,a86,a87,a88]])
v=M.nullspace()
m=lcm([val.q for val in v])
PSI=m*v
print M
print PSI