当前位置: 首页 > 仿真模拟 >如何使用matlab求解非线性方程组的所有整数解?

如何使用matlab求解非线性方程组的所有整数解?

作者 snowwhite1
来源: 小木虫 450 9 举报帖子
+关注

例如:下面的方程组
x1^2=x1
x2^2=x2
x3^2=x3
x4^2=x4
x1^2=x1x2x3x4
使用fsolve需要预设初值,并且只能求出一个解,有没有什么较好的方法能求出所有解?(这里所有的解都只能取值0或1)。 返回小木虫查看更多

今日热帖
  • 精华评论
  • sogooda

    一共就4个数,每个数还都只能取0和1两种情况,那就穷举法就行了。
    换句话说,编个4重循环,一下子就出来了。

  • sogooda

    CODE:
    clc
    format compact
    for x1=0:1
        for x2=0:1
            for x3=0:1
                for x4=0:1
                    if x1^2==x1 & ...
                       x2^2==x2 & ...
                       x3^2==x3 & ...
                       x4^2==x4 & ...
                       x1^2==x1*x2*x3*x4
                    disp([x1,x2,x3,x4]);
                    end
                end
            end
        end
    end

    可得结果
         0     0     0     0
         0     0     0     1
         0     0     1     0
         0     0     1     1
         0     1     0     0
         0     1     0     1
         0     1     1     0
         0     1     1     1
         1     1     1     1

  • snowwhite1

    引用回帖:
    2楼: Originally posted by sogooda at 2012-03-25 21:26:47:
    一共就4个数,每个数还都只能取0和1两种情况,那就穷举法就行了。
    换句话说,编个4重循环,一下子就出来了。

    谢谢,我只是举例,实际情况是方程以及变量都很多,没办法穷举的。但方程的解就只有0或1两种情况,有没有什么较好的办法?

  • sogooda

    引用回帖:
    4楼: Originally posted by snowwhite1 at 2012-03-26 00:14:08:
    谢谢,我只是举例,实际情况是方程以及变量都很多,没办法穷举的。但方程的解就只有0或1两种情况,有没有什么较好的办法?

    暂时还没有别的想法。
    但是我还是固执的认为穷举法对于你的问题来说可能确实是一个很好的方法。
    如果问题的规模很大,可以考虑一部分一部分的解决。

  • snowwhite1

    没有其他办法了吗?

  • dingd

    1stOpt求解:

    CODE:
    MultiRun = 30;
    BinParameter x(4);
    Function
    x1^2=x1;
    x2^2=x2;
    x3^2=x3;
    x4^2=x4;
    x1^2=x1*x2*x3*x4;

    结果:
    No.        x1        x2        x3        x4
    1        0        1        1        1
    2        0        0        0        1
    3        0        1        0        0
    4        0        0        1        1
    5        0        0        1        0
    6        0        1        0        1
    7        1        1        1        1
    8        0        0        0        0
    9        0        1        1        0

  • feign_te

    大概有多少个变量?
    比如有n个变量,每个变量时0或者1,一个变量组就相当于一个2进制数字。
    共有2^n组变量,要检验2^n次约束方程,1000万次时n=23,得考虑时间问题了。

    n很大的话可能要分析约束方程,提取公因子,整体考虑
    比如这题约束方程为x1*(1-x2*x3*x4)=0

    如果约束方程很复杂的话,从约束方程的系数入手,说不定有一般解法。
    约束方程只有一个时,有2^n项,借助线性代数,可能会发现什么。

    不知道7楼解法的极限,如果能很随意的求出四五十个变量,二三十个约束方程下的解,那么几乎可以断定有一般解了。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓