matlab编程错误

Matlab programming error

我正在尝试将 Coursera 课程中关于 Matlab 编程的编程作业中的问题作为练习。这是我自学的。

问题:

Write a function called classify that takes one input argument x. That argument will have no more than two dimensions. If x is an empty matrix, the function returns -1. If x is a scalar, it returns 0. If x is a vector, it returns 1. Finally, if x is none of these, it returns 2. Do not use the built-in functions isempty, isscalar, or isvector.

我的代码片段:

function num = classify(x)
num = -1;
if(x == 3.14159265358979)
    num = 0;
elseif(size(x, 2) == 3)
    num = -1;
end
end

我在 Matlab 上得到了以下结果。

Problem 4 (classify):
    Feedback: Your function performed correctly for argument(s) []
    Feedback: Your function performed correctly for argument(s) zeros(1,0)
    Feedback: Your function performed correctly for argument(s) zeros(0,4)
    Feedback: Your function performed correctly for argument(s) 3.14159265358979
    Feedback: Your function made an error for argument(s) [1 2 3]

我对参数 [1 2 3] 做错了什么吗?

您的目标应该是编写一个通用函数,例如,您的函数不适用于 pi 以外的任何标量输入。

使用size函数确定输入的维度,例如:

>> size([])
ans = 0     0

>> size(5)
ans = 1     1 

>> size([5 6 7])
ans =  1     3

>> size([5;6;7])
ans =  3     1

基于此,您的函数可能如下所示:

function [num] = classify(x)

s = size(x);
if s == [0 0]
    num = -1;
elseif s == [1 1]
    num = 0;
elseif sort(s) == [1 3]
    num = 1;
else
    num = 2;
end

end

您可以通过计算元素的数量(即使用 numel 函数)最轻松地检查 x 是否为空或标量。然后要确定它是向量还是更高维矩阵,您需要检查维数是否小于 3(这是因为 ndims returns 2 对于 1D 和 2D矩阵)并验证前两个维度中至少有一个维度的大小为 1:

function num = classify(x)
    n = numel(x);
    if n < 2
        num = n-1;
    else
        if ndims(x) < 3 && any(size(x) == 1)
            num = 1;
        else
            num = 2;
        end
    end
end

如果你只想要代码,我会为你提供答案,但我建议你坐下来试着理解这些代码如何以及为什么解决问题,我猜你想学习一些东西从中。好吧,这是代码:

function [num] = classify(x)
   if numel(x) == 0
      num = -1;
      return
   end
   num = sum(size(x) > 1);
end

是的,您试图将数组与浮点数进行比较。 它允许为 [] 做那件事(编程错误),因为数组是空的 对于零,因为数组再次为空:在第一种情况下为 0 列,在第二种情况下为 0 行

function i=classify(x)
[m, n]=size(x);
if n==1 && m==1
    i=0;
elseif (m==0 && n==0)|| (m>=1 && n==0) || (m==0 && n>=1)
    i=-1;
elseif (n>=1 && m==1) || (n==1 && m>=1)
    i=1;
else i=2;
end
function y=classify(x) 
    [a b]=size(x);

    %check for empty matrix
    % Do not forget that an empty matrix can be size a x 0 or 0x a, where a can be 
    % arbitrary number

    if (a>0)&&(b==0)||(a==0)&&(b>0)||(a==0)&&(b==0)
        y=(-1);

    %check for scalar
    elseif (a==1)&&(b==1)
        y=0;

    %check for vector 
    elseif (a>=1)&&(b==1)||(a==1)&&(b>=1)
        y=1;

    %other case
    else
        y=2;
end