Matlab编程处理矩阵

时间:2015-05-12 06:06:18

标签: matlab matlab-compiler

我正在尝试一个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

我做错了吗?我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

删除第size(H) = (n,3);行 并添加行H = H';

总代码应如下

function H = hulk(v)
    H = [v; v.^2; v.^3];
    H = H';
end

您的代码在matlab行的size(H) = (n,3);编辑器中显示错误 enter image description here

这就是你应该使用matlab编辑器

的原因

答案 1 :(得分:2)

为了将来参考,您可以在Matlab中非常容易地概括此函数,以允许用户指定输出矩阵中的cols数。我还建议您通过确保使用列向量即使您的用户提交行向量来使此功能更具防御性。

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

答案 2 :(得分:2)

您可以使用packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/LICENSE' } 减少操作次数。这样,每个cumprod计算为之前的v.^kv.^k

v

第一个输入参数是向量,第二个是最大指数。