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