MATLAB函数,它给出了列向量中的所有正整数

时间:2015-07-27 17:20:10

标签: matlab

我需要创建一个函数,它具有输入参数n,一个整数,n> 1,以及一个输出参数v,它是一个长度为n的列向量,包含所有小于或等于n的正整数,排列以这种方式,矢量的任何元素都不等于它自己的索引。 我知道如何定义函数 这是我到目前为止所尝试的但它不起作用

laravel 4

2 个答案:

答案 0 :(得分:1)

让我们来看看你有什么:

[1,n] = size(n);

这一行没有多大意义:n是一个整数,这意味着size(n)会给你[1,1],你不需要那个。 (同样,[1,n]这样的表达式也不在作业的左侧。)删除该行。它毫无用处。

k=1:n;

该行非常好,k现在是一个大小为n的行向量,其中包含从1n的整数。

v=n(1:n);

没有意义。 n不是一个向量(或者你可以说它是一个1x1向量),无论是哪种方式,索引到它(括号的作用)都没有意义。放弃那条线。

v=k'

这也很好。它会从行向量v中生成列向量k。唯一不满足的是"以这样一种方式排列,即矢量的任何元素都不等于它自己的索引"部分,因为现在每个元素都等于它自己的索引。所以现在你需要找到一种方法来转移这些元素或者以满足这种条件的某种方式对它们进行混洗并且你已经完成了。

答案 1 :(得分:0)

让我们给出一个有效的解决方案。你应该仔细研究它,看看这个东西是如何工作的。以较小的步骤解决问题并了解代码的作用非常重要。

function [v] = int_col(n)
    if n <= 1
        error('argument must be >1')
    end

    v = 1:n;                % generate a row-vector of 1 to n
    v = v';                 % make it a column vector
    v = circshift(v,1);     % shift all elements by 1 
end

结果如下:

>> int_col(5)
ans =
     5
     1
     2
     3
     4

您也可以执行以下操作,而不是使用circshift

v = [v(end);v(1:end-1)];