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

请教matlab中多个矩阵计算编程的问题

[复制链接]
发表于 2007-1-24 14:11:37 | 显示全部楼层 |阅读模式 来自 山东青岛
问题:一个单行矩阵(23列)乘以多个(〉1000)矩阵(23行、5列),将结果输出到同一个矩阵中,每个计算结果生成矩阵的一行
可以用M文件编辑,但我不知道这个循环该怎样写
其中,我将多个矩阵命名为a1~a1036,单行矩阵为w,结果矩阵为c

请高手指点,非常感谢!
发表于 2007-1-24 17:31:18 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
for i=1:1036;
    c(i,:)= eval(['w*a' num2str(i)]);
end
 楼主| 发表于 2007-1-24 17:45:17 | 显示全部楼层 来自 山东青岛
我试一下,非常感谢shunfly!!!!!!!
 楼主| 发表于 2007-1-24 17:57:57 | 显示全部楼层 来自 山东青岛
shunfly兄,w*a中的a似乎不能表示a1~a1036
我换成a(i)后运算提示“Undefined command/function 'a'”
应该怎么解决?
发表于 2007-1-25 10:00:00 | 显示全部楼层 来自 湖北武汉
i=4
eval(['w*a' num2str(i)]);
即表示执行下面这个字符串
(['w*a' num2str(i)]);
也就是w*a4
PS:为什么不试试数组或者元胞之类
而要起这些a1,a23等等只有程序员明白,机器不明白的变量?
 楼主| 发表于 2007-1-25 10:32:50 | 显示全部楼层 来自 山东青岛
shunfly兄,麻烦你看一下M文件是否可以这样写
function c(i,:)
for i=1:1036;
    c(i,:)= eval(['w*a' num2str(i)]);
end

谢谢

[ 本帖最后由 bainhome 于 2007-1-25 11:41 编辑 ]
 楼主| 发表于 2007-1-26 20:38:19 | 显示全部楼层 来自 山东青岛
还是麻烦高手帮我写一下这个M文件吧
我实在是搞不懂,可是又很着急用啊!!!
发表于 2007-1-26 21:00:38 | 显示全部楼层 来自 湖北武汉
function c=haha;
%
% 取数据你的W.A
for i=1:1036;
    c(i,:)= eval(['w*a' num2str(i)]);
end

[ 本帖最后由 bainhome 于 2007-1-26 21:29 编辑 ]
 楼主| 发表于 2007-1-29 13:54:11 | 显示全部楼层 来自 山东青岛
运行时出现如下问题,该如何解决??

??? Error using ==> eval
Undefined function or variable 'w'.

Error in ==> haha at 3
    c(i,:)= eval(['w*a' num2str(i)]);

w矩阵已经在工作空间里了,难道还需要在M文件里定义一次吗?

[ 本帖最后由 ccsd 于 2007-1-29 13:55 编辑 ]
发表于 2007-1-29 14:19:34 | 显示全部楼层 来自 新疆乌鲁木齐
1.doc evalin&assignin
2.check the code shown as below:
  1. function EvalUseage
  2. clc
  3. a1=zeros(1,5);
  4. for i=1:4
  5.     str=['a',num2str(i+1),'=a',num2str(i),'+ones(1,5);'];
  6.     eval(str)
  7. end
  8. a1,a2,a3,a4,a5
复制代码
发表于 2007-1-29 14:27:24 | 显示全部楼层 来自 湖北武汉
.....
在你程序之前
check w
如果没有
就装载。通过将工作区的数据存MAT或者直接传参数
打个比方
你在命令窗口中输入a=5;
然后你随便写个M文件
你说怎么认这个a
原帖由 ccsd 于 2007-1-29 13:54 发表
运行时出现如下问题,该如何解决??

??? Error using ==> eval
Undefined function or variable 'w'.

Error in ==> haha at 3
    c(i,:)= eval();

w矩阵已经在工作空间里了,难道还需要在M文件 ...
 楼主| 发表于 2007-1-29 19:40:47 | 显示全部楼层 来自 山东青岛
原帖由 shunfly 于 2007-1-29 14:27 发表
.....
在你程序之前
check w
如果没有
就装载。通过将工作区的数据存MAT或者直接传参数
打个比方
你在命令窗口中输入a=5;
然后你随便写个M文件
你说怎么认这个a

我已经把a1~a1036这1036个矩阵和w矩阵的.mat文件都保存在matlab的工作目录中,在运行M文件之前也已经装载,但是我不知道该怎样调用这些矩阵
我现在的问题是:M文件和命令窗口中的工作空间是互相独立的,在M文件的循环中该如何添加一行命令,成功调用已经保存好的a1~a1036这些矩阵
已经调试了一整天都没有成功过,除非将矩阵a1~a1036在M文件中直接创建
可是那样的话前一段时间的工作就全部白做了

[ 本帖最后由 ccsd 于 2007-1-29 19:45 编辑 ]
发表于 2007-1-29 20:15:40 | 显示全部楼层 来自 新疆乌鲁木齐
恕我直言,这根本就不该是个很大的问题,结合shunfly和我的提示,问题的解决之道已经非常明了了:
首先,初始化ai矩阵不要用你的eval的方法,用我的.即:把那个什么"c( i, : )"写到eval的string中执行,其次,让你看看evalin和assignin命令,看了没有?M文件和workspace确实是两个相互独立的空间,可要联系起来也不是太难的事情.最后,不知道具体是什么工程问题,对于你这种思路的执行效率也不敢做优劣的评价,但是至少不是一种很好的方法.可以再斟酌.
另外就是为什么要在M文件执行之前装载mat数据,直接写到M文件中一条龙完成不就ok?如果是这样,我和shunfly就太冤了:lol

[ 本帖最后由 bainhome 于 2007-1-29 20:18 编辑 ]
 楼主| 发表于 2007-1-29 20:29:55 | 显示全部楼层 来自 山东青岛
原帖由 bainhome 于 2007-1-29 20:15 发表
恕我直言,这根本就不该是个很大的问题,结合shunfly和我的提示,问题的解决之道已经非常明了了:
首先,初始化ai矩阵不要用你的eval的方法,用我的.即:把那个什么"c( i, : )"写到eval的string中执行,其次,让 ...


你们是高手,我是初学者,以前基本上没用过matlab :L
我也曾经考虑过,如果能把这1000多个矩阵都写在M函数文件中,自然很方便,一下就可以算出来了,可是整个编辑过程太麻烦
我在做一个景观评质量价,每个评价单元的评价结果都是一个矩阵,然后同时乘权重
可能这个方法确实比较拙劣,可是目前为止我也只能这样做,似乎没有更好的办法
我正在学习中,希望今天晚上或者明天上午就能解决这个问题
让高手们见笑了:$
发表于 2007-1-29 20:55:20 | 显示全部楼层 来自 湖北武汉
俺不是高手
不过
俺知道计算机肯定不是高手
人知道算
a1*a2,a2*a3,a3*a4
计算机不认识,计算机最简便的莫过过a(1)*a(2),a(2)*a(3)
或者说,计算机很懒,最方便的莫过于埃着寻址
还有
我已经把a1~a1036这1036个矩阵和w矩阵的.mat文件都保存在matlab的工作目录中,在运行M文件之前也已经装载,
你都会这样了,在M文件中直接LOAD数据不就得了
或者。你都吧数据导到WORK了,直接在命令窗口写那几句不就得了
 楼主| 发表于 2007-1-29 21:08:44 | 显示全部楼层 来自 山东青岛
说实话,我就是不会load数据,所以才想彻底弄明白的,呵呵

顺便问一下,shunfly是哪个学校的?
发表于 2007-1-29 21:29:43 | 显示全部楼层 来自 湖北武汉
俺告诉你俺哪个学校的
你能请喝俺喝酒?
技术论坛请不要灌水^_^
 楼主| 发表于 2007-1-29 21:34:36 | 显示全部楼层 来自 山东青岛
喝酒不成问题啊,只要你来青岛,呵呵

麻烦你看一下这个问题出在哪:
function c=haha;
for i=1:4;
    str1=['a',num2str(i)];str2=['b',num2str(i)];
    assignin('base','eval(str1)',eval(str2));
    c(i,:)=eval(['w*b' num2str(i)]);
end

运行时的提示是
??? Error using ==> eval
Undefined function or variable 'b1'.

Error in ==> haha at 4
    assignin('base','eval(str1)',eval(str2));

[ 本帖最后由 bainhome 于 2007-1-29 21:45 编辑 ]
发表于 2007-1-29 23:37:51 | 显示全部楼层 来自 湖北武汉
错误提示请尝试理解
b1未定义
跟你分析一哈
b1是什么?你自己知道
那么,在FOR循环之前,是不是应该CHECK一哈b1的存在列
如果不存在,那么,你是不是应该LOAD或者传参数什么的列?
同一个错误犯两次就没劲了吧:)

[ 本帖最后由 bainhome 于 2007-1-29 23:45 编辑 ]
发表于 2012-6-23 17:02:40 | 显示全部楼层 来自 上海
M文件怎么也不会编呢
有什么号的方法啊
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-9-30 11:39 , Processed in 0.043734 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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