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); 行中出现错误

这就是为什么你应该使用matlabeditor 本身

【讨论】:

【参考方案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编程与应用系列-第3章 矩阵运算

MATLAB编程与应用系列-第3章 矩阵运算

Matlab与C/C++混合编程之Matlab调用OpenCV库函数

Matlab与C/C++混合编程之Matlab调用OpenCV库函数

MATLAB编程与应用系列-第3章 矩阵运算

MATLAB编程 逆矩阵怎么表示