QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 982|回复: 1
打印 上一主题 下一主题

Matlab中自定义的函数怎么能支持向量化操作?

[复制链接]
字体大小: 正常 放大
红薯        

4

主题

6

听众

127

积分

升级  13.5%

  • TA的每日心情
    开心
    2013-10-12 17:29
  • 签到天数: 33 天

    [LV.5]常住居民I

    自我介绍
    love mathematics, love mathematica

    群组2013年数学建模国赛备

    跳转到指定楼层
    1#
    发表于 2013-9-26 18:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1. function r=primeQ(n)
    2. r=1;
    3. for i=2:sqrt(n);
    4.     if mod(n,i)==0;
    5.         r=0;
    6.         return
    7.     end
    8. end;
    复制代码
    上面的primeQ是个判断素数的函数,调用的时候只会这样用
    sum( arrayfun(@primeQ, 2:1e6) )
    听说arraygfun的速度不快,我希望可以支持向量化操作,就像下面这样
    sum(primeQ(2:1e5))
    应该怎么做?
    注意:我知道判断素数有更好的算法,我关心的不是算法问题
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    lvyanlong        

    93

    主题

    48

    听众

    2225

    积分

    升级  7.5%

  • TA的每日心情
    擦汗
    2019-9-9 17:09
  • 签到天数: 321 天

    [LV.8]以坛为家I

    2013挑战赛参赛者

    自我介绍
    参加数学建模

    发帖功臣 新人进步奖

    群组2013年电工杯B题讨论群

    群组数模思想方法大全

    群组学术交流A

    群组第三届数模基础实训

    群组认证人才交流群

    你可以使用arrayfun这个函数

    你首先测试是否为偶数,如果不是,后边的偶数因子可以全部跳过,这样可以减少更多的时间
    当然可以也对3做同样的操作,判断数不是2或3的倍数后只要判断那些6k+1和6k+5的因子
    可以继续下去,但是越往后提升的效果就越差,所以自行斟酌

    对于比较大的数可以考虑用Fermat小定理或者Miller-Rabin检验去判断;双精度最大连续整数上限是2^53

    另外可以用matlab coder把m文件转换成mex,这样会更快
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-24 20:26 , Processed in 0.493871 second(s), 57 queries .

    回顶部