我尝试在MATLAB中定义一个函数。然后我想在其他程序中使用此功能。代码如下:
function E = maxadd(n,m,A,B)
n = input ('Enter the no. of rows of matrix A or B : ');
m = input ('Enter the no. of columns of matrix A or B : ');
A = input ('enter the matrix A, n*m : ');
B = input ('enter the matrix B, n*m : ');
D = -Inf(n,m);
for i=1:n %addition of matrices
for j=1:m
D(i,j)=max (A(i,j), B(i,j));
end;
end;
E = D ;
end
该程序运行正常但是,如果我在命令窗口中运行maxadd(2,2,[1 2;3 4],[0 4 ;3 7])
,它会再次询问我输入而不是给我一个答案。
请帮我解决这个问题。我的文件名是maxadd.m
。
答案 0 :(得分:1)
第一部分 你的代码
function E = maxadd(n,m,A,B)
n = input ('Enter the no. of rows of matrix A or B : ');
m = input ('Enter the no. of columns of matrix A or B : ');
A = input ('enter the matrix A, n*m : ');
B = input ('enter the matrix B, n*m : ');
您的代码有一个问题要么询问用户输入,要么自己传递值,以便您可以使用 函数E = maxadd(n,m,A,B)只是传递命令窗口中的值即可 不需要这部分
n = input ('Enter the no. of rows of matrix A or B : ');
m = input ('Enter the no. of columns of matrix A or B : ');
A = input ('enter the matrix A, n*m : ');
B = input ('enter the matrix B, n*m : ');
答案 1 :(得分:0)
您已经将n,m,A和B作为maxadd函数的输入参数传递。你不应该在函数内部要求相同的值。如果要在函数内部调用输入,请执行与此类似的操作:
function E = maxadd()
n = input ('Enter the no. of rows of matrix A or B : ');
m = input ('Enter the no. of columns of matrix A or B : ');
A = input ('enter the matrix A, n*m : ');
B = input ('enter the matrix B, n*m : ');
D = -Inf(n,m);
for i=1:n %addition of matrices
for j=1:m
D(i,j)=max (A(i,j), B(i,j));
end;
end;
E = D ;
end
当你打电话时:
>> maxadd
Enter the no. of rows of matrix A or B : 2
Enter the no. of columns of matrix A or B : 2
enter the matrix A, n*m : rand(2,2)
enter the matrix B, n*m : rand(2,2)
ans =
0.8147 0.2785
0.9058 0.9134
如果您不想更改对maxadd
功能的所有调用,只需修改它:
function E = maxadd(n, m, A, B)
D = -Inf(n,m);
for i=1:n %addition of matrices
for j=1:m
D(i,j)=max (A(i,j), B(i,j));
end;
end;
E = D ;
end
答案 2 :(得分:0)
你没有说清楚这一点,但我猜你正在尝试编写一个函数,该函数在询问用户的默认行为上采用可选参数。如果是这样,您需要在函数中显式写入逻辑,如下所示:
function E = maxadd(n,m,A,B)
%//prompt user for values if they weren't passed as parameters
if nargin < 1
n = input ('Enter the no. of rows of matrix A or B : ');
end
if nargin < 2
m = input ('Enter the no. of columns of matrix A or B : ');
end
if nargin < 3
A = input ('enter the matrix A, n*m : ');
end
if nargin < 4
B = input ('enter the matrix B, n*m : ');
end
%//your logic here
end
这将检查调用者指定的输入参数的数量,并相应地请求丢失的参数。
但是,我们可以做得更好。
通常,当我们请求用户输入时,我们应该始终假设用户可以搞砸并给我们无意义的输入。因此,最好始终检查您的输入。
在你的情况下,前两个参数应该是数字,最后两个参数应该是矩阵,所以我们检查它们是这样的:
function E = maxadd(n,m,A,B)
%//prompt user for values if they weren't passed as parameters
if nargin < 1
n = input ('Enter the no. of rows of matrix A or B : ');
end
if nargin < 2
m = input ('Enter the no. of columns of matrix A or B : ');
end
if nargin < 3
A = input ('enter the matrix A, n*m : ');
end
if nargin < 4
B = input ('enter the matrix B, n*m : ');
end
%//validate input
if ~isnumeric(n)
error('Input parameter n must be numeric');
elseif ~isnumeric(m)
error('Input parameter m must be numeric');
elseif ~ismatrix(A)
error('Input parameter A must be a matrix');
elseif ~ismatrix(B)
error('Input parameter B must be a matrix');
end
%//your logic here
end
但我们可以进一步改善这一点。请注意,n
和m
实际上是矩阵A
和B
的属性,请注意两个矩阵确实需要与算法相同的维度才能工作。结合这些知识,我们将代码最小化:
function E = maxadd(A,B)
%//prompt user for values if they weren't passed as parameters
if nargin < 1
A = input ('enter the matrix A, n*m : ');
end
if nargin < 2
B = input ('enter the matrix B, n*m : ');
end
%//validate input
if ~ismatrix(A)
error('Input parameter A must be a matrix');
elseif ~ismatrix(B)
error('Input parameter B must be a matrix');
elseif ~isequal(size(A), size(B))
error('Matrices A and B must have the same dimensions')
end
n = size(A, 1);
m = size(A, 2);
%//your logic here
end
最后,我想指出两件事:
max
已经完成了您尝试做的事情。调用max(A,B)
将为您提供相同的输出E
根本没有必要。如果您将输出变量更改为D
并删除行E = D;
,则代码也可以正常工作。