找回密码
 注册
Simdroid-非首页
查看: 388|回复: 16

刚发现Mupad也并非完全不如Maple

[复制链接]
发表于 2009-10-21 22:26:04 | 显示全部楼层 |阅读模式 来自 北京朝阳
本帖最后由 rocwoods 于 2009-10-21 22:29 编辑

偶然间想起以前一个测试问题,这个测试问题是某年韩国的一个IMO竞赛题,可以证明的,原问题以及证明见下面帖子:http://bbs.matwav.com/viewthread.php?tid=575597&highlight=5%5E100%2B5%5E75
现在是用计算机暴力分解它,记得以前用赛扬2.4G,256M内存的台式机+MATLAB6.5时(MATLAB6.5用的maple内核应该比较老),曾经耗时1000多秒!!所以我个人没事的时候经常拿它测试个人计算机速度以及软件某项符号计算的能力,后来随着MATLAB版本的升高(用的maple内核越来越新),以及计算机CPU、内存的升级,所用时间不断减少。目前在我个人笔记本(酷睿T8100,2G内存,XP sp2,MATLAB 2008a)上,这个时间是

  1. tic;result = maple('ifactor(5^100+5^75+5^50+5^25+1)');toc
  2. Elapsed time is 106.496166 seconds.
复制代码
MATLAB2008a是MATLAB和maple联姻的最后一个版本,这个时候MATLAB用的maple内核好像是maple9
为了看看纯maple下的时间,特地在maple12上运行了下(还是我个人笔记本,操作系统也没变):

  1. > result = ifactor(5^100+5^75+5^50+5^25+1);
  2. result = (767186663625251) (4032808198751) (24687045214139234043375683501) (
  3.   28707251) (3597751)
  4. 下方给出的提示:内存10.31M,时间8.53秒
复制代码
从这一点可见MapleSoft公司给Mathworks公司还是留了好几手的。

一直以来,以为Mupad完全不如Maple,于是想看看MATLAB2009a下,暴力分解这个式子要多少时间,当然计算机硬件环境和操作系统没变。本来以为要很长时间,结果大出我的意料;

  1. tic;result = factor(a),toc
  2. result =
  3. 3597751*28707251*4032808198751*767186663625251*24687045214139234043375683501
  4. Elapsed time is 1.762579 seconds.
复制代码
纯Mupad环境没有试验,不过从这个例子看出,Mupad在某些地方还是可以和Maple一拼的。

评分

1

查看全部评分

发表于 2009-10-21 23:18:26 | 显示全部楼层 来自 吉林长春
Simdroid开发平台
我想知道matlab是不是在这个命令上用到了多核,
楼主开任务管理器看cpu占用没?

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-10-22 09:27:08 | 显示全部楼层 来自 黑龙江哈尔滨
偶然间想起以前一个测试问题,这个测试问题是某年韩国的一个IMO竞赛题,可以证明的,原问题以及证明见下面帖子:http://bbs.matwav.com/viewthread.php?tid=575597&highlight=5%5E100%2B5%5E75
现在是用计算机暴力分 ...
rocwoods 发表于 2009-10-21 22:26


你的机器真快。 这是我的机器上的maple13.01和mmtc 7.0.1的时间和结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-22 23:51:26 | 显示全部楼层 来自 北京朝阳
2# feiyuzhen
看CPU占用了,没有多核计算。计算的时候CPU使用率一直都是50%上下
回复 不支持

使用道具 举报

发表于 2009-10-23 12:29:55 | 显示全部楼层 来自 吉林长春
本帖最后由 feiyuzhen 于 2009-10-23 12:32 编辑

我猜测是命令针对cpu进行了优化,
看来,matlab/mupad和mathematica都做得不错,maple要加油啊,
不过以后的方向是针对异构进行优化如cpu+gpu,那就更爽了

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-18 22:37:49 | 显示全部楼层 来自 山东济南
本帖最后由 maplev12 于 2011-1-18 22:41 编辑

在Command Line下进行运算,可见并不是Maple计算耗费时间,而是重新分配内存耗费了时间,当第一次运算之后,内存变大,时间耗费小于计算机计时器的最小时间单位,计时器显示为0。速度远远快于Mathematica以及MuPad。的确强大……
【Maple 14 cmaple 运行】
C:\Documents and Settings\Administrator>"C:\Program Files\Maple 14\bin.win\cmapl
e"
    |\^/|     Maple 14 (IBM INTEL NT)
._|\|   |/|_. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2010
\  MAPLE  /  All rights reserved. Maple is a trademark of
<____ ____>  Waterloo Maple Inc.
      |       Type ? for help.
> ti := time(): ifactor(5^100+5^75+5^50+5^25+1); time()-ti;
memory used=53.8MB, alloc=35.6MB, time=3.97
memory used=92.0MB, alloc=35.6MB, time=10.39
memory used=130.1MB, alloc=42.6MB, time=12.58
(767186663625251)  (4032808198751)  (24687045214139234043375683501)

     (28707251)  (3597751)

                                    12.766

> tr := time(): ifactor(5^100+5^75+5^50+5^25+1); time()-tr;
(767186663625251)  (4032808198751)  (24687045214139234043375683501)

     (28707251)  (3597751)

                                      0.                             #注意看这里,运算时间为“0”

>

【Mathematica Kernel运算结果】
C:\Documents and Settings\Administrator>"C:\Program Files\Wolfram

Research\Mathe
matica\7.0\math.exe"
Mathematica 7.0 for Microsoft Windows (32-bit)
Copyright 1988-2009 Wolfram Research, Inc.

In[1]:= FactorInteger[5^100+5^75+5^50+5^25+1]//Timing

Out[1]= {1.609, {{3597751, 1}, {28707251, 1}, {4032808198751, 1},

>     {767186663625251, 1}, {24687045214139234043375683501, 1}}}

In[2]:=
回复 不支持

使用道具 举报

发表于 2011-1-18 22:46:22 | 显示全部楼层 来自 山东济南
无图无真相,重新运行了一下,把图贴上~~谁说Maple不如M@~~
^_^
以下是Maple 14的:


以下是Mathematica 7的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-18 22:51:15 | 显示全部楼层 来自 北京
7# maplev12
都Mathematica 8 了
回复 不支持

使用道具 举报

发表于 2011-1-19 10:41:06 | 显示全部楼层 来自 山东烟台
为什么我出错?

  1. clear
  2. tic;
  3. a=5^100+5^75+5^50+5^25+1
  4. f=factor(a)
  5. toc
复制代码


??? Error using ==> factor at 27
The maximum value of n allowed is 2^32.



  1. clear
  2. tic;
  3. digits(300)
  4. a=5^100+5^75+5^50+5^25+1
  5. f=factor(a)
  6. toc
复制代码

??? Error using ==> factor at 27
The maximum value of n allowed is 2^32.
回复 不支持

使用道具 举报

发表于 2011-1-19 11:02:46 | 显示全部楼层 来自 山东烟台
还有一个错误答案


  1. >> feval(symengine, 'factor',a)

  2. ans =

  3. 2^180*997*1367*8243*458197
复制代码
回复 不支持

使用道具 举报

发表于 2011-1-19 11:46:33 | 显示全部楼层 来自 山东济南
  1. clear
  2. tic;
  3. digits(300)
  4. a=sym(5^100+5^75+5^50+5^25+1)
  5. f=factor(a)
  6. toc
复制代码
  1. a =

  2. 5147557589468029*2^(180)



  3. f =

  4. (2)^180*(997)*(1367)*(458197)*(8243)


  5. Elapsed time is 1.161588 seconds.
复制代码



楼上的……你的做法是符号计算的…应该是上边的这段代码~否则数太大就溢出了…
楼主的意思“暴力分解”啊~~就是把数值一个一个穷举算出~不是符号计算的~

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-19 12:06:49 | 显示全部楼层 来自 山东烟台
clear
tic;
digits(300)
a=sym(5^100+5^75+5^50+5^25+1)
f=factor(a)
toc
a =

5147557589468029*2^(180)



f =

(2)^180*(997)*(1367)*(458197)*(8243)


Elapsed time is 1.161588 secon ...

maplev12 发表于 2011-1-19 11:46


但是你的答案明显是错的!
正确答案是:

  1. f:=factor(a)
  2. 3597751*28707251*4032808198751*767186663625251*24687045214139234043375683501
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-19 12:23:54 | 显示全部楼层 来自 北京海淀
从这一点可见MapleSoft公司给Mathworks公司还是留了好几手的

我注意到这两段代码前者是在MATLAB中调用MAPLE引擎,后者是直接在MAPLE中执行,感觉时间上很大的差异会不会是前者在做初始化?

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-19 12:38:11 | 显示全部楼层 来自 山东烟台
个人觉得matlab在计算

  1. a=sym(5^100+5^75+5^50+5^25+1)
复制代码

的时候会溢出,导致计算出错

所以首先得把a的准确的syms类型的结果计算出来再分解:
  1. clear
  2. tic;
  3. factor( evalin(symengine,'5^100+5^75+5^50+5^25+1'))
  4. toc

  5. ans =

  6. 3597751*28707251*4032808198751*767186663625251*24687045214139234043375683501

  7. Elapsed time is 1.137125 seconds.
复制代码



还是比较慢
PS:四核ie3,内存4G
回复 不支持

使用道具 举报

发表于 2011-1-19 21:51:56 | 显示全部楼层 来自 山东济南
本帖最后由 maplev12 于 2011-1-21 14:21 编辑

Sorry……把sym()与sym('')写混了~~应该是这样的:
  1. >> clear
  2. tic;
  3. digits(300)
  4. a=sym('5^100+5^75+5^50+5^25+1')
  5. f=factor(a)
  6. toc

  7. a =

  8. 5^100+5^75+5^50+5^25+1



  9. f =

  10. (767186663625251)*(24687045214139234043375683501)*(4032808198751)*(28707251)*

  11. (3597751)


  12. Elapsed time is 0.028711 seconds.
  13. >>
复制代码
符号计算在相当情况下还是挺高效的~~
这样够快吧0.028711s…当时我还开着Splayer、foobar2000、Safari等等来着~PC配置1.67GHz主频、1G内存~
回复 不支持

使用道具 举报

 楼主| 发表于 2011-10-9 16:16:30 | 显示全部楼层 来自 北京
本帖最后由 rocwoods 于 2011-10-9 16:16 编辑
maplev12 发表于 2011-1-19 21:51
Sorry……把sym()与sym('')写混了~~应该是这样的:符号计算在相当情况下还是挺高效的~~
这样够快吧0.028711 ...


最近又测试了下,
采用Mupad内核:
>>
  1. tic;factor(sym('5^100+5^75+5^137+5^55+1')),toc
  2. ans =
  3. 47*113*191*380346198138430183870192306511493813939537992576921062833101930565220127*189491*7850788148293
  4. Elapsed time is 2.688395 seconds.
复制代码
采用Maple内核:

  1. tic;maple('ifactor(5^100+5^75+5^137+5^55+1)'),toc
  2. ans =
  3.    (47)  (113)  (191)  (7850788148293)  (380346198138430183870192306511493813939537992576921062833101930565220127)  (189491)
  4. Elapsed time is 1348.521825 seconds.
复制代码
很无语啊。
回复 不支持

使用道具 举报

发表于 2011-10-30 20:21:44 | 显示全部楼层 来自 四川大学
我用mathematica8试了下,0.76s,Core2Duo,P7570,2.26GHz,4G内存。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 07:53 , Processed in 0.063725 second(s), 24 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表