QQ登录

只需要一步,快速开始

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

[问题求助] mathlab小程序,求助

[复制链接]
字体大小: 正常 放大
stan503 实名认证       

7

主题

5

听众

248

积分

升级  74%

  • TA的每日心情
    无聊
    2013-3-28 15:40
  • 签到天数: 62 天

    [LV.6]常住居民II

    群组数学建模培训课堂1

    群组计量经济学之性

    跳转到指定楼层
    1#
    发表于 2012-5-15 21:37 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    10体力
    a=[0.90        0.85        0.80        0.40        0.50        0.20];
    b=[1.00        0.75        0.45        0.30        0.55        0.25];


    for(kk=1:10)
    p=0;
    for k=1:4

    aa=size(a);
    c=random('unif',1,aa(2)+2-k);
    cc=fix(c);
    ccc(k)=cc;
    d=random('unif',1,aa(2)+2-k);
    dd=fix(d);
    ddd(k)=dd;
    p=a(cc)/(a(cc)+b(dd))+p;


    a(cc)=[];b(dd)=[];

    end
    pp=zeros(1,10);
    pp(kk)=p;
    end      %想让pp保存p每次的值来着,不知道怎么老是不对。     坐等指点

    最佳答案

    liwenhui 查看完整内容

    第二层循环中,每次循环以后,要剔除掉随机挑选出来的那个a/b中的元素,这不是很麻烦,可以用一个线性变换来解决,即用初始a/b向量乘以一个起到筛选作用的矩阵就行了,这个矩阵有如下的分块结构: 用它左乘待变换向量就可将需要剔除的矩阵元素剔除掉: 例如,将向量(1,2,3,4)的第二个元素2剔除掉: 构建矩阵M比较麻烦,但并不是毫无规律可循,注意到每次需要剔除元素的位置为frdm_a和frdm_b,即 ...
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    stay calm
    liwenhui        

    70

    主题

    65

    听众

    5192

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    本帖最后由 liwenhui 于 2012-5-19 12:49 编辑
    stan503 发表于 2012-5-19 01:33
    问题出在语句:a(cc)=[];b(dd)=[];  我是想用过矩阵的这个元素后,就给删除掉。


    第二层循环中,每次循环以后,要剔除掉随机挑选出来的那个a/b中的元素,这不是很麻烦,可以用一个线性变换来解决,即用初始a/b向量乘以一个起到筛选作用的矩阵就行了,这个矩阵有如下的分块结构:

    QQ截图20120519123343.jpg

    用它左乘待变换向量就可将需要剔除的矩阵元素剔除掉:

    QQ截图20120519123352.jpg

    例如,将向量(1,2,3,4)的第二个元素2剔除掉:

    QQ截图20120519123415.jpg



    构建矩阵M比较麻烦,但并不是毫无规律可循,注意到每次需要剔除元素的位置为frdm_a和frdm_b,即M矩阵的k,可以这样做:

    Svcmpt=zeros(1,10);
    apckot=zeros(2,10);
    bpckot=zeros(2,10);
    for k1=1:10
        A=[0.90 0.85 0.80 0.40 0.50 0.20]';
        B=[1.00 0.75 0.45 0.30 0.55 0.25]';
      for k2=1:4
          lgth_a=length(A);
          lgth_b=length(B);
          
          rdm_a=random('unif',1,lgth_a+2-k2);
          frdm_a=fix(rdm_a);
          
          rdm_b=random('unif',1,lgth_b+2-k2);
          frdm_b=fix(rdm_b);
          
          p=A(frdm_a)/(A(frdm_a)+B(frdm_b));
          
          %产生a剔除矩阵--------------------------------------------------------
          E_right1=eye(frdm_a-1,frdm_a-1);
          O_middle_up1=zeros(frdm_a-1,1);
          O_left1=zeros(frdm_a-1,lgth_a-frdm_a);
          O_right1=zeros(lgth_a-frdm_a,frdm_a-1);
          O_middle_down1=zeros(lgth_a-frdm_a,1);
          E_left1=eye(lgth_a-frdm_a,lgth_a-frdm_a);
          pckot1=[E_right1,O_middle_up1, O_left1;O_right1,O_middle_down1,E_left1];
          %--------------------------------------------------------------------
          %产生b剔除矩阵--------------------------------------------------------
          E_right2=eye(frdm_b-1,frdm_b-1);
          O_middle_up2=zeros(frdm_b-1,1);
          O_left2=zeros(frdm_b-1,lgth_b-frdm_b);
          O_right2=zeros(lgth_b-frdm_b,frdm_b-1);
          O_middle_down2=zeros(lgth_b-frdm_b,1);
          E_left2=eye(lgth_b-frdm_b,lgth_b-frdm_b);
          pckot2=[E_right2,O_middle_up2, O_left2;O_right2,O_middle_down2,E_left2];
          %--------------------------------------------------------------------
          A=pckot1*A;
          B=pckot2*B;   
      end
    apckot([1:2],k1)=A;
    bpckot([1:2],k1)=B;
    Svcmpt(1,k1)=p;
    end
    apckot
    bpckot
    Svcmpt


    每循环一个K1就得到一个p的计算值、一组a值、一组b值,最后得到10组值,a保存在apckot中,b保存在bpckot中,p保存在Svcmpt中。



    QQ截图20120519123415.jpg (11.6 KB, 下载次数: 636)

    QQ截图20120519123415.jpg

    回复

    使用道具 举报

    zjqylcy 实名认证       

    7

    主题

    5

    听众

    1205

    积分

    宇宙无敌霹雳大头衔

    升级  20.5%

  • TA的每日心情
    奋斗
    2013-5-18 15:14
  • 签到天数: 101 天

    [LV.6]常住居民II

    自我介绍
    男~~

    新人进步奖

    群组杭州联盟

    群组小草的客厅

    群组C 语言讨论组

    群组数学建模

    群组数学趣味、游戏、IQ等

    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5192

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    问题应该出在语句:a(cc)=[];b(dd)=[];
    不知道楼主希望通过这个语句达到什么结果,将矩阵a和b中的值变成“空”?
    如果不要这句话的话可以改正一下得到一个结果,pp矩阵应该在第一个for语句前就定义才说得过去,不然每循环一个k1,pp就重新定义一次,无法存储p的值。
    这句:p=a(cc)/(a(cc)+b(dd))+p;也有问题,p的初始值为0,为什么在计算新的p值时需要加p一次呢?加与不加是相同的结果。


    a=[0.90 0.85 0.80 0.40 0.50 0.20];
    b=[1.00 0.75 0.45 0.30 0.55 0.25];

    pp=zeros(1,10);
    for k1=1:10
        p=0;
      for k2=1:4
          aa=length(a);
          
          c=random('unif',1,aa+2-k2);
          cc=fix(c);
          ccc(k1,k2)=cc;
          
          d=random('unif',1,aa+2-k2);
          dd=fix(d);
          ddd(k1,k2)=dd;
          
          p=a(cc)/(a(cc)+b(dd))+p;
      end
    pp(1,k1)=p;
    end
    pp

    每次运行的结果不一样,比如运行一次得到结果:

    pp =

        1.8059    2.3851    1.9156    2.0470    1.7376    2.1391    2.2067    2.4490    2.2704    2.6522

    回复

    使用道具 举报

    stan503 实名认证       

    7

    主题

    5

    听众

    248

    积分

    升级  74%

  • TA的每日心情
    无聊
    2013-3-28 15:40
  • 签到天数: 62 天

    [LV.6]常住居民II

    群组数学建模培训课堂1

    群组计量经济学之性

    liwenhui 发表于 2012-5-17 13:56
    问题应该出在语句:a(cc)=[];b(dd)=[];
    不知道楼主希望通过这个语句达到什么结果,将矩阵a和b中的值变成“ ...

    高手!
    恩恩,是啊   
    问题出在语句:a(cc)=[];b(dd)=[];  我是想用过矩阵的这个元素后,就给删除掉。


    也就是说每次任取取a,b的一个不同的值,四次后,a,b都只剩两个元素。   该怎么写啊?
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5192

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    stan503 发表于 2012-5-18 21:10
    高手!
    恩恩,是啊   
    问题出在语句:a(cc)=[];b(dd)=[];  我是想用过矩阵的这个元素后,就给删除掉。 ...

    不太明白你的意思,请再详细叙述一遍。从我给的语句可以得到一个10维向量,但是它不是固定的,每次基本上都不同。你的意思是,除了这个10维向量意外,你还想得到怎么样的一个a,b呢?a b是输入变量,也就是说你也想改变输入变量,并保存它们的值?但是我不明白你需要怎样去改变。
    回复

    使用道具 举报

    stan503 实名认证       

    7

    主题

    5

    听众

    248

    积分

    升级  74%

  • TA的每日心情
    无聊
    2013-3-28 15:40
  • 签到天数: 62 天

    [LV.6]常住居民II

    群组数学建模培训课堂1

    群组计量经济学之性

    liwenhui 发表于 2012-5-18 23:15
    不太明白你的意思,请再详细叙述一遍。从我给的语句可以得到一个10维向量,但是它不是固定的,每次基本上 ...

    问题出在语句:a(cc)=[];b(dd)=[];  我是想用过矩阵的这个元素后,就给删除掉。


    也就是说每次任取取a,b的一个不同的值,四次后,a,b都只剩两个元素。   该怎么写啊?

    a,b最开始有六个元素(1*6),每次随机取出a,b里的一个元素计算p,然后删除刚才取出的元素,也就是说第二次循环开始时a,b各有5个元素,以此类推.....四次后获得一个累积的p值(每次循环的p值累加),a,b则变为1*2的矩阵。       然后重复试验,得到很多个p值,用pp保存。    基本思路就是这样了,谢谢指导。
    回复

    使用道具 举报

    liwenhui        

    70

    主题

    65

    听众

    5192

    积分

    独孤求败

  • TA的每日心情
    擦汗
    2018-4-26 23:29
  • 签到天数: 1502 天

    [LV.Master]伴坛终老

    自我介绍
    紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。 重剑无锋,大巧不工。四十岁前恃之横行天下。 四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进至无剑胜有剑之境。

    社区QQ达人 邮箱绑定达人 发帖功臣 元老勋章 新人进步奖 风雨历程奖 最具活力勋章

    群组计量经济学之性

    群组LINGO

    回复

    使用道具 举报

    stan503 实名认证       

    7

    主题

    5

    听众

    248

    积分

    升级  74%

  • TA的每日心情
    无聊
    2013-3-28 15:40
  • 签到天数: 62 天

    [LV.6]常住居民II

    群组数学建模培训课堂1

    群组计量经济学之性

    liwenhui 发表于 2012-5-19 12:51
    我这个方法有点麻烦,或许还有更好的方法,希望其他朋友能提出来。

    谢谢了,这个矩阵的构造还要研究研究,不过程序通过了,   是应该把a,b放在第一个for循环里面,

    至于删除元素,就可以用a(cc)=[];因为是按列存储。。。

    再次感谢,加好友
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-10-1 08:50 , Processed in 1.006437 second(s), 101 queries .

    回顶部