Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2011-08-02, 00:20   #1
heinz_2008
初级会员
 
注册日期: 2011-08-01
帖子: 6
声望力: 0
heinz_2008 正向着好的方向发展
默认 矩阵乘方计算的优化

我有一段用for 计算矩阵乘方的语句:
for i=1:1:T
x(i)=i;
y(i)=V*M^x(i)*S;
end
plot(x,y,'r');
legend ('pfd')

其中M是一个4x4的矩阵,V是一个1x4的行向量,S是一个4x1的列向量,i从1到T逐渐变大,最后得到y(i)的一系列值,并用描点法输出图线。
但这算法有个缺点,若T=1000,算y(500),M作500次的乘方; 算y(501),M又要再作501次的乘方。。。当T特别大时,运算就显得特别没有效率

我是希望能不能改成下面的算法,M的乘方在计算后都被存下来,下一次计算时,只要上一次的乘上M就可以了,最后输出z(i)
y(0)=1;
y(i)=y(i-1)*M;
z(i)=V*y(i)*S;
i从1到T逐渐变大,计算z(i)的值,最后用描点法输出z(i)随i 变化的图线。

请问大家,matlab可以实现上面的功能吗?先谢谢了!
heinz_2008 当前离线   回复时引用此帖
旧 2011-08-02, 08:27   #2
anbcjys
高级会员
 
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24
anbcjys 正向着好的方向发展
默认 回复: 矩阵乘方计算的优化

你写的方法不可行 因为y(1)是4*4的 下一步y(2)没有办法运算了
__________________
qq604443022
anbcjys 当前离线   回复时引用此帖
旧 2011-08-02, 15:33   #3
heinz_2008
初级会员
 
注册日期: 2011-08-01
帖子: 6
声望力: 0
heinz_2008 正向着好的方向发展
默认 回复: 矩阵乘方计算的优化

y(1)是4*4,M也是4*4,为什么不能继续运算啊?
heinz_2008 当前离线   回复时引用此帖
旧 2011-08-03, 07:12   #4
anbcjys
高级会员
 
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24
anbcjys 正向着好的方向发展
默认 回复: 矩阵乘方计算的优化

引用:
作者: heinz_2008 查看帖子
y(1)是4*4,M也是4*4,为什么不能继续运算啊?
我看错了 你写的向量表示 我以为就一个数呢 应该写成y{1} 不过你这样表示 还是要循环计算y{i}
__________________
qq604443022
anbcjys 当前离线   回复时引用此帖
旧 2011-08-03, 15:57   #5
heinz_2008
初级会员
 
注册日期: 2011-08-01
帖子: 6
声望力: 0
heinz_2008 正向着好的方向发展
默认 回复: 矩阵乘方计算的优化

引用:
作者: anbcjys 查看帖子
我看错了 你写的向量表示 我以为就一个数呢 应该写成y{1} 不过你这样表示 还是要循环计算y{i}
是啊,C里写循环还行,matlab里就不知道怎么写循环了。。。还是用for语句吗?你能具体说说怎么写吗?谢谢!

此帖于 2011-08-03 16:39 被 heinz_2008 编辑。
heinz_2008 当前离线   回复时引用此帖
旧 2011-08-03, 17:59   #6
heinz_2008
初级会员
 
注册日期: 2011-08-01
帖子: 6
声望力: 0
heinz_2008 正向着好的方向发展
默认 回复: 矩阵乘方计算的优化

搞定了!!!用三维数组!!!

Y(:,:,1)=eye(4);
for i=1:T
X(i)=i;
Y(:,:,i+1)=Y(:,:,i)*M;
Z(i)=V*Y(:,:,i+1)*S;
end
plot(X,Z,'b');

此帖于 2011-08-03 22:35 被 heinz_2008 编辑。
heinz_2008 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 17:12


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.