-1

我正在尝试求解一个 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/solve 中(第 317 行)

4

2 回答 2

1

您可以尝试制作一个矩阵方程,其中 M xv = ans 为您提供方程组。v = [a,b,c,d....n,p] 和 M 看起来像

在此处输入图像描述

您可以将它们作为 numpy 数组输入,然后:

numpy.linalg.solve(M, ans)

要小心,因为并非所有方程组都是可解的,因为矩阵 M 并不总是固有可解的,即。并非每个矩阵都可以制成单位矩阵。

于 2020-07-13T19:36:36.120 回答
0

所有值为 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" 它返回一个完全不同的解决方案。

于 2020-07-13T20:15:18.547 回答