作业帮 > 综合 > 作业

matlab中循环改成矩阵运算的问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 11:42:46
matlab中循环改成矩阵运算的问题
之前用多项式拟合得到了系数阵M,现在利用M来计算result
M是一个6*6的系数阵,已知.
X是一个1*6的矩阵,已知;Y是一个6*1的矩阵,也是已知的.
求result
X=[1,r,r.^2,r.^3,r.^4,r.^5];
Y=[1,l,l.^2,l.^3,l.^4,l.^5]';
result= X * M * Y;
我现在是循环来求,r和l都是一个数,得到的result也是一个值.但是这样太慢了,想改成矩阵运算
如果r和l都是一个m*n的矩阵,不用循环,怎么计算result?result得到的也是一个m*n的矩阵.
有点麻烦.我举个简单例子吧
把X*M*Y展开成一个多项式,比如2+r^2+r.*l+l.^2;
然后代码如下:
[m, n] = size(R);
Rc = R(:); Lc = L(:);
Resultc = 2+Rc.^2+Rc.*Lc+Lc.^2;
Result = reshape(Resultc, [m n]);
但是,实际上的式子远比2+r^2+r.*l+l.^2这样复杂,所以这一行会写很长.
再问: 是个解决办法,这么写会比在循环里快很多吗? 前面的处理中m*n的大循环是不可避免的,我现在是在循环里单个计算的。如果不计算,只是记录在m*n的矩阵中,循环结束以后再计算,这么做有必要吗?我是说在效率上会有明显的加速吗?
再答: “如果不计算,只是记录在m*n的矩阵中,循环结束以后再计算” 我不理解这句话的含义。 至于到底加速效果如何,取决于你现在的实现,建议你把核心的代码贴出来看看。
再问: result=X*M*Y它其实就是利用一个多项式拟合的结果来计算的,M相当于是多项式的系数。我是处理M行n列的图像。对每个点循环进行区域增长的处理,这个大循环不可避免,我现在是在循环里一个循环处理一次X*M*Y。我是在考虑,如果单独把result=X*M*Y提到循环外面,究竟会加速多少?会加速很多吗?因为现在还在写前面的算法,在验证结果的时候感觉很慢,想加快一点。
再答: 我不能理解”单独把result=X*M*Y提到循环外面“的含义和影响。 如果能够把这个运算提出来,不改变循环体的其他部分,当然可以加速。至于加速多少:这个运算是纯粹的矩阵运算,这正是matlab的擅长之处。所以,仅仅这句话本身,不会耗费很多时间。