Matlab编程错误

Matlab编程错误,matlab,function,matrix,vector,scalar,Matlab,Function,Matrix,Vector,Scalar,我正在尝试Matlab编程课程的编程作业中的问题,作为练习。这是我自学用的 问题: 编写一个名为classify的函数,该函数接受一个输入参数x。那个 参数将不超过两个维度。如果x是空的 矩阵,函数返回-1。如果x是标量,则返回0。如果x 是一个向量,它返回1。最后,如果x不是其中的任何一个,它将返回 2.不要使用内置函数isempty、isscalar或isvector 我的代码片段: function num = classify(x) num = -1; if(x == 3.1415926

我正在尝试Matlab编程课程的编程作业中的问题,作为练习。这是我自学用的

问题:

编写一个名为classify的函数,该函数接受一个输入参数x。那个 参数将不超过两个维度。如果x是空的 矩阵,函数返回-1。如果x是标量,则返回0。如果x 是一个向量,它返回1。最后,如果x不是其中的任何一个,它将返回 2.不要使用内置函数isempty、isscalar或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
对于1D和2D矩阵都返回
2
),并验证前两个维度中至少有一个大小为
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)
n=努美尔(x);
如果n<2
num=n-1;
其他的
如果ndims(x)<3&&any(尺寸(x)==1)
num=1;
其他的
num=2;
终止
终止
终止

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

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

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

代码片段如何符合问题?同意,代码不做问题中提到的任何事情。您应该尝试使用有问题的输入运行程序,看看调试器告诉您什么!哦,我同意上面的评论,这并不是说你在为某个特定的案件做错事,这是因为您的代码与所述问题无关,只在非常特定的情况下工作,其中一些情况恰好是测试的情况。您的代码在任何时候都不会输出要求的
1
2
,那么它如何工作呢?此外,此函数也会派上用场:返回
2
?@m.s.该解决方案不起作用。给出了这个错误<代码>问题4(分类):反馈:您的函数对参数正确执行[]反馈:您的函数对参数0(1,0)出错。您的解决方案不正确。您的解决方案出错<代码>您的函数为参数出错[0 0 1 0 1 1 1 0;1 1 0 0 0 1 1;1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;1 1 1 1 1 0 0 0 1 1 1 1 1 1;1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0@tmgr您因为它们仍然应该返回
2
。引用您的问题陈述:“该参数将不超过两个维度。”,我猜这意味着我不必检查是否有超过两个维度。
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