标题:解限制条件下线性不定方程的解组数
只看楼主
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
好的编程都是建立在对问题的熟练程度上,对问题的来龙去脉不清楚,你就不可能有好的算法。

素数问题的解决是我学习编程永恒的动力。
2022-11-03 21:20
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
以下是引用独木星空在2022-11-3 14:45:41的发言:

这些表与它的关系,第一步,相当于x+y=N
                  第二步,相当于(x+y)+(z+u)=N
                  第三步,相当于[(x+y)+(z+u)]+(v+m)=N
     这三步,周期矩阵,与单位矩阵,操作步骤一样,只是起点,与参与的元素不同。
     
     单位矩阵,用1到P-1之间的几个元素,不能用0,也不能用P(限制条件值,比如,未知数,或者说变量,不能取7的倍数,则P=7,所用值就是1,2,3,4,5,6了)

      但是周期矩阵是从0开始,到某一个值即可,如果,想获得10个周期的数据,则此时,是从0到9,即0代表第一个周期,9实际上是第10个周期的。
      如N=36时,可以写成7*5+1的形式,7是限制条件(不能取它的倍数),5是周期值,5个周期,实际求出来的是第六个周期上的数据,在周期矩阵与单位矩阵耦合时,周期矩阵的值(周期数),需要乘7(周期值,或不能取得某数的倍数中,某数,这里不能取7的倍数,某数即7了);但是,单位矩阵的合成值不变,直接参与运算,统计值,是得到这个合成值的方法数,即得到对应N的不定方程的解组数。
       第一步,统计用的是Excel中的COUNTIF(B$2:G$7,I2)计数函数
       以后各步,统计用的是Excel中的SUMIF(B$16:L$26,AA16,O$16:Y$26)计数函数

搞不懂,太专业了,又是耦合,又是周期的。
为什么不一步到位?单论[(x+y)+(z+u)]+(v+m)=N这个式子,在不考虑排除模数的情况下,似乎总解数是有公式的,比如N=36,在xyzuvm>0的情况下,xyzuvm最大值就是31,在前五个数确定的情况下,最后一个数只有唯一值,前4个值确定的情况下,后两个数有31种组合,所以总解数应该是31×31×31×31×31×1=28629151组解。如果排除1至31被7整除的4个数,总解数应该是27×27×27×27×27×1=14348907组解。
不知道理解的正确不。

能编个毛线衣吗?
2022-11-04 09:04
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 22楼 wmf2014
可以一步到位,但是那样的话,数据量会惊人,就比方算10个周期的,限制条件是不能为7的倍数(指未知数(变量)不为7的倍数),10*6个元素=60个元素,60^6=46656000000,这样大的数据量,你如何去处理,即便电算化,程序也是勉为其难,再想大点,根本就不现实,所以有必要,分别处理,把未知数(变量)表示成:tP+r的形式,分别处理r,及周期t即可,它们用乘法原理(也就是最后一步的耦合矩阵),这种处理是把加法,变成乘法,其目的就是大大缩减数据量,用程序可能多少算大点(指你说的一步到位法),要是手工在Excel上计算,那是不可能办到的,所以单位矩阵(即r的处理),和周期矩阵(即对周期的处理),应分步完成,而不是一步到位法,那样处理的结果就是计算机瘫痪,死机。  所以,要拆分,划块,分区,分步完成,而后合到一起。

素数问题的解决是我学习编程永恒的动力。
2022-11-04 10:29
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
题目是说求满足一定条件的线性方程的解的组数,现在要确认一下是只要数目,还是要列出各个解的值,如果是后者,小规模可以做出,规模大了很难实现,如果只要组数,是有成熟的数学模型和算法的,计算量也不是很大。
2022-11-04 20:19
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 24楼 jklqwe111
只要解组数,不要具体解。如N=6,有1组解;N=7时,有6组解;等等。

素数问题的解决是我学习编程永恒的动力。
2022-11-04 22:52
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
'型如 x1+x2+x3+x4+x5+x6=N 解的个数
'设定 变量个数 number 和值 sum  过滤整除数 modK 变量能否取0

'最简单的形式 modk=1
'可取0的情况 公式为 C(sum+number-1,sum)= C(sum+number-1,number-1)
'当number=2时  sum + 1

'以下是递归代码
Public Function nums0(ByVal sum As Long, ByVal number As Long) As Long
  If number = 2 Then
      nums0 = sum + 1
      Exit Function
  End If
  
  Dim s As Long
  nums0 = 0
  
  For s = 0 To sum
  
     nums0 = nums0 + nums0(sum - s, number - 1)
  
  Next
  
  
End Function

'最简单的形式 modk=1
'不可取0的情况 公式为 C(sum-1,number-1) C(sum-1,sum-number)
'当number=2时  sum - 1

'以下是递归代码

Public Function nums1(ByVal sum As Long, ByVal number As Long) As Long
If number = 2 Then
      nums1 = sum - 1
      Exit Function
  End If
  
  Dim s As Long
  nums1 = 0
  
  For s = 1 To sum - 1
  
     nums1 = nums1 + nums1(sum - s, number - 1)
  
  Next
  
  
End Function
' 有过滤条件,写出组合公式很困难,但还有其他的数学模型,以后再说
'在函数nums1基础上添加过滤条件,写出代码还是可以的
'


Public Function nums1ModK(ByVal sum As Long, ByVal number As Long, ByVal ModK As Long)
  Dim k As Long
  Dim r As Long
  
  If number = 2 Then
      nums1ModK = sum - 1
      k = (sum - 1) \ ModK '需要过滤的个数
      r = sum Mod ModK
      If r = 0 Then 'sum能被整除
         nums1ModK = nums1ModK - k '当sum能被整除时,两个变量必定同被整除或同式不被整除,那么两个同被整除变量要剪掉两个解的个数
      Else
         nums1ModK = nums1ModK - k * 2
      End If
      Exit Function
  End If
  
  Dim s As Long
  nums1ModK = 0
  
  For s = 1 To sum - 1
     If (s Mod ModK) <> 0 Then nums1ModK = nums1ModK + nums1ModK(sum - s, number - 1, ModK)
      
  Next
End Function

'当sum增大时,解的个数迅速增加,sum<500时解的个数没超过long范围,如果要计算更大的值,就要增加大数处理了
2022-11-05 08:44
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
我看,有重复。直接计算,是我们最终追求的目标。

素数问题的解决是我学习编程永恒的动力。
2022-11-05 20:18
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
一般的数论方法是用母函数法,但是,对于一个多变的题型,它(指母函数法)并不适应。

素数问题的解决是我学习编程永恒的动力。
2022-11-08 17:20
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
感觉只需要解总数应该有公式直接运算,用最笨的遍历法写了个excel vba探索,建议和值取小于25的数做实验,否则太慢了。有数学高手可以试着摸索一下规律。

函数和.zip (19.95 KB)

能编个毛线衣吗?
2022-11-09 16:22
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
我看,有重复


以下是两组数据,看看其中是否有重复的
x+y+z+a+b+c=8 - mod 3

21

1     1     1     1     1     3     
1     1     1     1     2     2     
1     1     1     1     3     1     
2     1     1     1     1     2     
2     1     1     1     2     1     
3     1     1     1     1     1     
1     2     1     1     1     2     
1     2     1     1     2     1     
2     2     1     1     1     1     
1     3     1     1     1     1     
1     1     2     1     1     2     
1     1     2     1     2     1     
2     1     2     1     1     1     
1     2     2     1     1     1     
1     1     3     1     1     1     
1     1     1     2     1     2     
1     1     1     2     2     1     
2     1     1     2     1     1     
1     2     1     2     1     1     
1     1     2     2     1     1     
1     1     1     3     1     1     


x+y+z+a=14 - mod 3

90

1     1     1     11   
1     1     2     10   
1     1     4     8     
1     1     5     7     
1     1     7     5     
1     1     8     4     
1     1     10    2     
1     1     11    1     
2     1     1     10   
2     1     4     7     
2     1     7     4     
2     1     10    1     
4     1     1     8     
4     1     2     7     
4     1     4     5     
4     1     5     4     
4     1     7     2     
4     1     8     1     
5     1     1     7     
5     1     4     4     
5     1     7     1     
7     1     1     5     
7     1     2     4     
7     1     4     2     
7     1     5     1     
8     1     1     4     
8     1     4     1     
10    1     1     2     
10    1     2     1     
11    1     1     1     
1     2     1     10   
1     2     4     7     
1     2     7     4     
1     2     10    1     
2     2     2     8     
2     2     5     5     
2     2     8     2     
4     2     1     7     
4     2     4     4     
4     2     7     1     
5     2     2     5     
5     2     5     2     
7     2     1     4     
7     2     4     1     
8     2     2     2     
10    2     1     1     
1     4     1     8     
1     4     2     7     
1     4     4     5     
1     4     5     4     
1     4     7     2     
1     4     8     1     
2     4     1     7     
2     4     4     4     
2     4     7     1     
4     4     1     5     
4     4     2     4     
4     4     4     2     
4     4     5     1     
5     4     1     4     
5     4     4     1     
7     4     1     2     
7     4     2     1     
8     4     1     1     
1     5     1     7     
1     5     4     4     
1     5     7     1     
2     5     2     5     
2     5     5     2     
4     5     1     4     
4     5     4     1     
5     5     2     2     
7     5     1     1     
1     7     1     5     
1     7     2     4     
1     7     4     2     
1     7     5     1     
2     7     1     4     
2     7     4     1     
4     7     1     2     
4     7     2     1     
5     7     1     1     
1     8     1     4     
1     8     4     1     
2     8     2     2     
4     8     1     1     
1     10    1     2     
1     10    2     1     
2     10    1     1     
1     11    1     1     

2022-11-09 17:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510483-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052451 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved