Решите линейное уравнение с 16 переменными. - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь решить линейное уравнение с 16 переменными. Я пробовал в Matlab, но там написано, что решение не найдено. Есть ли эффективный способ решения уравнений.

The equations are

a = a^2+e^2+i^2+m^2,
b = a*b+e*f+I*j+m*n,
c = a*c+e*g+I*k+m*o,
d = a*d+e*h+I*l+m*p,
e = a*b+e*f+I*j+m*n,
f = b^2+f^2+j^2+n^2,
g = b*c+f*g+j*k+n*o,
h = b*d+f*h+j*i+n*p,
i = c*a+g*e+I*k+o*m,
j = c*b+g*f+k*j+o*n,
k = c^2+g^2+k^2+o^2,
l = c*d+g*h+k*l+o*p,
m = d*a+h*e+i*l+p*m,
n = d*b+h*f+l*j+p*n,
o = d*c+h*g+l*k+p*o,
p = d^2+h^2+l^2+p^2

в MATLAB Я пробовал способом, упомянутым ниже,

>> syms a b c d e f g h i j k l m n o p
>> e1 = a^2+e^2+i^2+m^2 == a;
>> e2 = a*b+e*f+i*j+m*n == b;
>> e3 = a*c+e*g+i*k+m*o == c;
>> e4 = a*d+e*h+i*l+m*p == d;
>> e5 = a*b+e*f+i*j+m*n == e;
>> e6 = b^2+f^2+j^2+n^2 == f;
>> e7 = b*c+f*g+j*k+n*o == g;
>> e8 = b*d+f*h+j*i+n*p == h;
>> e9 = c*a+g*e+k*i+o*m == i;
>> e10 = c*b+g*f+k*j+o*n == j;
>> e11 = c^2+g^2+k^2+o^2 == k;
>> e12 = c*d+g*h+k*l+o*p == l;
>> e13 = d*a+h*e+l*i+p*m == m;
>> e14 = d*b+h*f+l*j+p*n == n;
>> e15 = d*c+h*g+l*k+p*o == o;
>> e16 = d^2+h^2+l^2+p^2 == p;
>> sol = solve([e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16],[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p]);

Предупреждение: невозможно найти явное решение. Чтобы узнать о вариантах, см. Справку.

В sym / resolve (строка 317)

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы можете попробовать составить матричное уравнение, где M xv = ans дает вам систему уравнений. v = [a, b, c, d .... n, p] и M будут выглядеть как

введите описание изображения здесь

Вы можете ввести их как массив numpy, а затем:

numpy.linalg.solve(M, ans)

Будьте осторожны, потому что не все системы уравнений разрешимы, потому что матрица M не всегда разрешима по своей природе ie. не каждую матрицу можно превратить в единичную матрицу.

0 голосов
/ 13 июля 2020

Все переменные со значением 0 - это одно решение

Все переменные со значением 1/4 - это другое решение.

Для других решений попробуйте NMinimize.

NMinimize[
  (a-(a^2+e^2+i^2+m^2))^2+(b-(a*b+e*f+i*j+m*n))^2+(c-(a*c+e*g+i*k+m*o))^2+(d-(a*d+e*h+i*l+m*p))^2+
  (e-(a*b+e*f+i*j+m*n))^2+(f-(b^2+f^2+j^2+n^2))^2+(g-(b*c+f*g+j*k+n*o))^2+(h-(b*d+f*h+j*i+n*p))^2+
  (i-(c*a+g*e+i*k+o*m))^2+(j-(c*b+g*f+k*j+o*n))^2+(k-(c^2+g^2+k^2+o^2))^2+(l-(c*d+g*h+k*l+o*p))^2+
  (m-(d*a+h*e+i*l+p*m))^2+(n-(d*b+h*f+l*j+p*n))^2+(o-(d*c+h*g+l*k+p*o))^2+(p-(d^2+h^2+l^2+p^2))^2,
  {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}]

и мгновенно возвращает одно решение:

{8.51161*^-15,{
  a->0.345102,b->0.0918863,c->-0.435568,d->0.166866,
  e->0.0918863,f->0.961563,g->-5.19543*^-7,h->-0.168869,
  i->-0.435567,j->-4.85207*^-7,k->0.564101,l->-0.237006,
  m->0.166866,n->-0.168869,o->-0.237006,p->0.129235}}

С опцией Method -> «RandomSearch» возвращает совершенно другое решение.

...