24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1134  |  回复: 6

shangxj

金虫 (正式写手)

[求助] 如何用mathematica8解这一方程的所有整数解?

如题
方程为0.91x+0.45y+0.75z=70

请大侠不吝相助,并另有奖励奉上。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shangxj

金虫 (正式写手)

还没有达人看到吗?
还是根本就无法解?
2楼2012-06-04 12:58:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


感谢参与,应助指数 +1
zhangguangping: 金币+1, 谢谢指教! 2012-06-04 20:37:11
有无穷多组解吧!
有无穷多组解吧!
3楼2012-06-04 14:43:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangguangping

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
shangxj: 金币+10, ★★★很有帮助, 编程解决问题真是好,谢谢回应。 2012-06-06 17:50:45
虽然你要求用mathematica8解这个方程的整数解。但是我不会mathematica8这个软件。我用Fortran编写了一段小程序,给你解了一下。为了减小计算量,首先解了一下非负整数解如下:
x =    10  y =     2  z =    80
x =    10  y =     7  z =    77
x =    10  y =    12  z =    74
x =    10  y =    17  z =    71
x =    10  y =    22  z =    68
x =    10  y =    27  z =    65
x =    10  y =    32  z =    62
x =    10  y =    37  z =    59
x =    10  y =    42  z =    56
x =    10  y =    47  z =    53
x =    10  y =    52  z =    50
x =    10  y =    57  z =    47
x =    10  y =    62  z =    44
x =    10  y =    67  z =    41
x =    10  y =    72  z =    38
x =    10  y =    77  z =    35
x =    10  y =    82  z =    32
x =    10  y =    87  z =    29
x =    10  y =    92  z =    26
x =    10  y =    97  z =    23
x =    10  y =   102  z =    20
x =    10  y =   107  z =    17
x =    10  y =   112  z =    14
x =    10  y =   117  z =    11
x =    10  y =   122  z =     8
x =    10  y =   127  z =     5
x =    10  y =   132  z =     2
x =    25  y =     0  z =    63
x =    25  y =     5  z =    60
x =    25  y =    10  z =    57
x =    25  y =    15  z =    54
x =    25  y =    20  z =    51
x =    25  y =    25  z =    48
x =    25  y =    30  z =    45
x =    25  y =    35  z =    42
x =    25  y =    40  z =    39
x =    25  y =    45  z =    36
x =    25  y =    50  z =    33
x =    25  y =    55  z =    30
x =    25  y =    60  z =    27
x =    25  y =    65  z =    24
x =    25  y =    70  z =    21
x =    25  y =    75  z =    18
x =    25  y =    80  z =    15
x =    25  y =    85  z =    12
x =    25  y =    90  z =     9
x =    25  y =    95  z =     6
x =    25  y =   100  z =     3
x =    25  y =   105  z =     0
x =    40  y =     3  z =    43
x =    40  y =     8  z =    40
x =    40  y =    13  z =    37
x =    40  y =    18  z =    34
x =    40  y =    23  z =    31
x =    40  y =    28  z =    28
x =    40  y =    33  z =    25
x =    40  y =    38  z =    22
x =    40  y =    43  z =    19
x =    40  y =    48  z =    16
x =    40  y =    53  z =    13
x =    40  y =    58  z =    10
x =    40  y =    63  z =     7
x =    40  y =    68  z =     4
x =    40  y =    73  z =     1
x =    55  y =     1  z =    26
x =    55  y =     6  z =    23
x =    55  y =    11  z =    20
x =    55  y =    16  z =    17
x =    55  y =    21  z =    14
x =    55  y =    26  z =    11
x =    55  y =    31  z =     8
x =    55  y =    36  z =     5
x =    55  y =    41  z =     2
x =    70  y =     4  z =     6
x =    70  y =     9  z =     3
x =    70  y =    14  z =     0

在[-1000,1000]这个区间内的整数就有33177组。估计你的这个问题也是有实际应用的,所以我觉得你肯定是有区间界定的。因此我把我的代码放在这儿,你可以通过调整这个区间的上下线来寻找你想要的结果:

      program sovl
         integer*4 i, j, k
         integer*4 max_x, max_y, max_z
         real*8 resu,EPS
        parameter (EPS=1.d-300)

        max_x=int(70d0/0.91d0)+1
        max_y=int(70d0/0.45d0)+1
          max_z=int(70d0/0.75d0)+1
          open(unit=100,file="solv.dat"
        do i=-1000,1000,1
          do j=-1000,1000,1
                      do k=-1000,1000,1
          resu=(real(i)*0.91d0+real(j)*0.45d0+real(k)*0.75d0)
          if(abs(resu-70d0)           write(*,'(a4,I5,2x,a4,I5,2x,a4,I5)')"x = ",i,"y = ",j,"z = ",k
          write(100,'(a4,I5,2x,a4,I5,2x,a4,I5)')"x = ",i,"y = ",j,"z = ",k
          endif

             enddo
                enddo
             enddo

        end program sovl

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : solv2.f
  • 2012-06-04 21:48:57, 631 bytes
弘德明志博学笃行
4楼2012-06-04 21:50:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangguangping

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
shangxj: 金币+10, ★★★很有帮助, 写程序解决问题对我来说有点难度,我还是想使用简单的工具解决相关的一类问题。只是平时杂事颇多,静不下心来深入去学。 2012-06-06 17:53:38
csgt0: 金币+2, 多谢应助 2012-09-19 09:46:09
考虑到你可能不能编译fortran程序,我将fortran程序做成可执行文件了。你只需要下载那个exe按照提示输入你的求解范围,就可以直接将结果输出到文件中去了。

希望对你有用。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : solv2.f
  • 2012-06-04 22:10:38, 1.6 K
  • 附件 2 : solv2.exe
  • 2012-06-04 22:10:43, 344.03 K
弘德明志博学笃行
5楼2012-06-04 22:10:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gotit

新虫 (初入文坛)

【答案】应助回帖


csgt0: 金币+1, 多谢应助 2012-09-19 09:46:17
Solve[0.91 x + 0.45 y + 0.75 z == 70, {x, y, z}, Integers]

{{z -> ConditionalExpression[
    93.3333 - 1.21333 x - 0.6 y, (x | y | z) \[Element] Integers]}}
6楼2012-09-18 21:53:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shangxj

金虫 (正式写手)

引用回帖:
6楼: Originally posted by gotit at 2012-09-18 21:53:23
Solve

{{z -> ConditionalExpression}}

怎么没有出来结果?
out显示还是跟输入的形式一样,是我操作不对吗?
7楼2012-10-08 17:55:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 shangxj 的主题更新
信息提示
请填处理意见