声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1482|回复: 5

[编程技巧] 怎么用循环求几个矩阵的特征值?

[复制链接]
发表于 2006-12-21 16:13 | 显示全部楼层 |阅读模式

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

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

x
function B=meanB1(b1,b2,b3,b4,b5)
b1=[1 3 1
    1/3 1 1/3
    1 3 1];
b2=[1 2 2 5
    1/2 1 2 5
    1/2 1/2 1 3
    1/5 1/5 1/3 1];
b3=[1 2 1/2 1 5
    1/2 1 1/3 1/2 3
    2 3 1 2 7
    1 2 1/2 1 5
    1/5 1/3 1/7 1/5 1];
b4=[1 1/5 1/3
    5 1 2
    3 1/2 1];
b5=[1 1/5 1
    5 1 5
    1 1/5 1];
%求特征值
for i=1:5
    tb(i)=eig(bi);
end
tb
请帮忙看一下这个程序,运行后总提示:Undefined function or variable 'bi'.

Error in ==> meanB1 at 22
    tb(i)=eig(bi);
回复
分享到:

使用道具 举报

发表于 2006-12-21 16:34 | 显示全部楼层
程序有不少问题, 很明显matlab不会知道bi是什么?
对于你的这个程序, 建议用元胞数组计算,很容易实现.
发表于 2006-12-21 17:04 | 显示全部楼层
我自己做了一下:code is :

b{1,1}=[1 3 1
    1/3 1 1/3
    1 3 1];
b{1,2}=[1 2 2 5
    1/2 1 2 5
    1/2 1/2 1 3
    1/5 1/5 1/3 1];
b{1,3}=[1 2 1/2 1 5
    1/2 1 1/3 1/2 3
    2 3 1 2 7
    1 2 1/2 1 5
    1/5 1/3 1/7 1/5 1];
b{1,4}=[1 1/5 1/3
    5 1 2
    3 1/2 1];
b{1,5}=[1 1/5 1
    5 1 5
    1 1/5 1];

tb=cell(1,5);
for i=1:5
   
    tb{1,i}=eig(cell2mat(b(1,i)));
   
end

for i=1:5
cell2mat(tb(1,i))
end

result is :

ans =

         0
    3.0000
    0.0000


ans =

   4.0648         
  -0.0246 + 0.5119i
  -0.0246 - 0.5119i
  -0.0156         


ans =

   5.0220         
  -0.0024 + 0.3326i
  -0.0024 - 0.3326i
   0.0000         
  -0.0171         


ans =

   3.0037         
  -0.0018 + 0.1053i
  -0.0018 - 0.1053i


ans =

         0
    3.0000
   -0.0000


你看是你想要的结果吗 ?

[ 本帖最后由 yukeyyxh 于 2006-12-21 17:08 编辑 ]
 楼主| 发表于 2006-12-21 21:07 | 显示全部楼层

谢谢

要的就是这个结果,非常感谢
发表于 2006-12-21 21:53 | 显示全部楼层
恩,其实可以尝试实用eval这个函数

循环的语句可以这样表示
eval( [' tb('num2str(i)')=eig(b'  num2str(i) ')']  )
发表于 2006-12-22 09:22 | 显示全部楼层
stephenhope你的回答很不错,向你学习,只是循环语句的表达式有些问题!


应该是:eval( [' tb',num2str(i),'=eig(b',  num2str(i), ')']  )

code is :
b1=[1 3 1
    1/3 1 1/3
    1 3 1];
b2=[1 2 2 5
    1/2 1 2 5
    1/2 1/2 1 3
    1/5 1/5 1/3 1];
b3=[1 2 1/2 1 5
    1/2 1 1/3 1/2 3
    2 3 1 2 7
    1 2 1/2 1 5
    1/5 1/3 1/7 1/5 1];
b4=[1 1/5 1/3
    5 1 2
    3 1/2 1];
b5=[1 1/5 1
    5 1 5
    1 1/5 1];
%求特征值

for i=1:5
    eval( [' tb',num2str(i),'=eig(b',  num2str(i), ')']  )
   
end



得到结果一样!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-5 19:29 , Processed in 0.067618 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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