matlab编程处理矩阵
Posted
技术标签:
【中文标题】matlab编程处理矩阵【英文标题】:Matlab programming dealing with matrix 【发布时间】:2015-05-12 06:06:17 【问题描述】:我正在尝试一个 matlab 编程问题。
问题:
编写一个名为 hulk 的函数,它以行向量 v 作为输入,然后 返回一个矩阵 H,其第一列由 v 的元素组成, 其第二列由 v 的元素的平方组成,并且 其第三列由元素 v 的立方体组成。对于 例如,如果你像这样调用函数 A = hulk(1:3) ,那么 A 将是 [ 1 1 1; 2 4 8; 3 9 27]。
我的代码:
function H = hulk(v)
H = [v; v.^2; v.^3];
size(H) = (n,3);
end
当我使用 A = hulk(1:3)
测试我的代码时,它会在控制台上引发错误。
Your function made an error for argument(s) 0
我做错了吗?我错过了什么吗?
【问题讨论】:
如果您想要所需的输出,请使用H = [v; v.^2; v.^3]' ;
并按照 Surajeet 的建议删除 size(H) = (n,3);
不错的函数名:-)
【参考方案1】:
删除size(H) = (n,3);
这一行
并添加行H = H';
最终代码应该如下
function H = hulk(v)
H = [v; v.^2; v.^3];
H = H';
end
您的代码在matlab
编辑器中的size(H) = (n,3);
行中出现错误
这就是为什么你应该使用matlab
editor 本身
【讨论】:
【参考方案2】:为了您将来的参考,您可以在 Matlab 中非常轻松地推广此函数,以允许用户指定输出矩阵中的列数。我还建议您通过确保您正在使用列向量,即使您的用户提交了行向量,也可以使这个函数更具防御性。
function H = hulk(v, n)
%//Set default value for n to be 3 so it performs like your current function does when called with the same signature (i.e. only 1 argument)
if nargin < 2 %// nargin stands for "Number of ARGuments IN"
n = 3;
end if
%// Next force v to be a row vector using this trick (:)
%// Lastly use the very useful bsxfun function to perform the power calcs
H = bsxfun(@power, v(:), 1:n);
end
【讨论】:
【参考方案3】:您可以使用cumprod
减少操作次数。这样,每个v.^k
都被计算为之前的v.^k
乘以v
:
function H = hulk(v, n)
H = cumprod(repmat(v,n,1),1);
第一个输入参数是向量,第二个是最大指数。
【讨论】:
以上是关于matlab编程处理矩阵的主要内容,如果未能解决你的问题,请参考以下文章
Matlab与C/C++混合编程之Matlab调用OpenCV库函数