【问题标题】:Solution to a non-linear equation system un MatlabMatlab中非线性方程组的求解
【发布时间】:2017-02-25 17:27:01
【问题描述】:

我需要使用 Matlab 解算术图。为此,我提出了一个由 6 个非线性方程组和 9 个变量组成的系统,使系统具有无限解。 当使用 solve () 函数时,我得到的唯一结果(因为我只得到一个解决方案)有理数,而它们都应该是整数。事实上,我已经验证并且有一个整数的解决方案,但我无法弄清楚如何使用该函数获得该解决方案。
当我尝试将 solve () 与整数变量 (syms x integer) 一起使用时,希望强制程序找到我正在寻找的解决方案,Matlab 无法完全找到系统的解决方案。 这是我使用的代码:

syms a b c d e f g h i integer;
ecuacion = solve(a*b*c==vertical(1),d*e*f==vertical(2),g*h*i==vertical(3),a*d*g==horizontal(1),b*e*h==horizontal(2),c*f*i==horizontal(3),a,b,c,d,e,f,g,h,i);
solucion = eval([ecuacion.a ecuacion.b ecuacion.c;ecuacion.d ecuacion.e ecuacion.f;ecuacion.g ecuacion.h ecuacion.i]);

有什么功能可以帮助我解决这个问题吗?还是我做错了什么?
如果您想查看算术图,这里有一个链接到我原来的西班牙语帖子:https://es.stackoverflow.com/posts/51725/edit

【问题讨论】:

  • 既然你需要一个整数解,你就处于困难的境地:-) 即使是线性整数程序也很难求解,更不用说非线性程序了。有这类问题的文献吗?

标签: matlab


【解决方案1】:

由于所有方程都是 abc = d 的形式,也许你应该考虑先取对数:A = log(a), B = log(b), C = log(c ),因此 A + B + C = log(d)。这会将您的问题转化为线性问题。

【讨论】:

  • 此外,请注意,您的方程不是独立的,线性问题的矩阵 P(在对数变换之后)的维度为 6x9,秩为 5。删除一个方程可能有助于算法(任何算法)找到解决方案。
  • 这实际上是一个非常优雅的想法,我已经实现了。但是,Matlab 总是给我相同的解决方案,而不是只有整数的解决方案。如果我能找到一种方法来获得一个矩阵,其中每个向量都是一个解决方案(可能有 10、50 或 100 个可能的解决方案),那么我就可以搜索我需要的解决方案。有什么想法吗?
  • @PedroZampella,问题实际上是组合的,因为变量是整数。正如我之前所说,你处于困难的境地。我通过枚举任何变量的可能值(如果 a*b*c = d 则 a、b 和 c 是 d 的除数),然后取交集(如果 a*b*c = da*e*f = g 则必须除以d 和 g)。这样的观察显着减少了搜索空间,因此也许可以编写一个枚举所有可能解决方案的程序(通过一些巧妙的修剪和回溯)。但是,恕我直言,这不是一件容易的事。
  • 我应该使用遗传算法的方法吗?
  • 我个人对遗传算法没有任何尊重,我会采用我提到的方法。请问您为什么要尝试解决这样的问题?是为了好玩吗?是为了上课吗?如果有,是哪个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多