声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1087|回复: 2

[编程技巧] 产生随机符号矩阵的问题

[复制链接]
发表于 2007-2-16 15:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这是本人写的一个产生随机符号矩阵的函数,在运行的时候总是产生一些奇怪的字符,比如:(0)+(-1)*sqrt(-1)
怎么回事情??
function out=symand(in1,in2)
syms a b c d e f g h i j k l m n o p q r s t u v w x y z
go=[a b c d e f g h i j k l m n o p q r s t u v w x y z];
for ii=1:1:in1
    for jj=1:1:in1
        out(ii,jj)=sym(go(round((in2-1)*rand+1)));
    end
end

[ 本帖最后由 eight 于 2007-2-16 16:09 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-2-16 16:11 | 显示全部楼层
原帖由 roumots 于 2007-2-16 15:29 发表
这是本人写的一个产生随机符号矩阵的函数,在运行的时候总是产生一些奇怪的字符,比如:(0)+(-1)*sqrt(-1)
怎么回事情??
function out=symand(in1,in2)
syms a b c d e f g h i j k l m n o p q r s t u v ...



这是由于matlab自动把'i','j','pi','inf','nan','eps'等特殊字母不当成符号变量造成的,其中(0)+(-1)*sqrt(-1) 就是i、j作为虚数单位的值。另外,如果in2 > 26,你的程序会出现索引越界,因此应完善一下以及避免。改进后如下:

  1. function out=symrand(in1,in2)
  2. syms a b c d e f g h ii jj k l m n o p q r s t u v w x y z
  3. go = [a b c d e f g h ii jj k l m n o p q r s t u v w x y z];
  4. ind = round(rand(in1)*(in2-1)+1);
  5. out = go(mod(ind,length(go)));
  6. out(out == 'ii') = 'i';
  7. out(out == 'jj') = 'j';
复制代码

[ 本帖最后由 eight 于 2007-2-16 16:13 编辑 ]
 楼主| 发表于 2007-2-16 17:17 | 显示全部楼层
谢谢了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 19:14 , Processed in 0.065185 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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