我在 Matlab 程序中使用以下函数:
...
...
...
[A, B, C, D, E] = function (F, G, H, I, J, K, L, M, N, O, P)
...
...
...
我收到以下错误消息:
??? Error using ==> function
Too many output arguments.
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P 是输入和输出的矢量。功能。
但是当我用完整的脚本替换函数行时,同样的程序工作得很好!
你能告诉我应该在哪里找到错误吗?
答案 0 :(得分:3)
您是否致电您的职能function
?这是一个非常糟糕的想法,因为function
是一个保留的关键词。
假设您在示例中仅使用“function”替换了要调用的函数的名称:您需要在函数定义中定义输入和输出。例如,对于一个名为'myFun'的函数,它接受F-P作为输入,并且应该返回A-E作为输出,你写为函数的第一行
function [A,B,C,D,E] = myFun(F,G,H,I,J,K,L,M,N,O,P)
修改强>
澄清:你得到错误,因为你要求的输出参数多于函数可以提供的参数。如果您调用[u,v]=sin(0)
,则会收到相同的错误,因为sin
仅定义为1输出。因此,您必须检查函数的签名以解决问题。
编辑2
让我们举个例子
我打开编辑器并定义函数
function [A,B,C] = myFun(D,E,F)
%# myFun returs the pairwise sums of the input arguments
A = D+E;
B = E+F;
C = F+D;
然后,我将该函数保存为Matlab路径上的“myFun.mat”。
现在我可以这样打电话给myFun:
[A,B,C] = myFun(1,2,3);
但是,如果我用四个输出参数调用myFun,我将收到错误
[A,B,C,D] = myFun(1,2,3);
事实上,我得到了你所得到的错误,因为我只用三个输出参数定义了myFun。
注意:您总是可以使用少于定义的输出参数的数量来调用函数,但是永远不会更多。
答案 1 :(得分:2)
Matlab 拒绝接受诸如
之类的作业[x,y]=[firstvalue,secondvalue]
在 Matlab shell中试试这个。它会给你同样的错误。
或者,做
z=[fv,sv]; x=z(1); y=z(2);
编辑:没关系。它不适合你的问题。
答案 2 :(得分:0)
我试图用A,B,C,D,E每次输出单个输出来测试程序
功能[A] = myFun1(F,G,H,I,J,K,L,M,N,O,P)
功能[B] = myFun2(F,G,H,I,J,K,L,M,N,O,P)
功能[C] = myFun3(F,G,H,I,J,K,L,M,N,O,P)
功能[D] = myFun4(F,G,H,I,J,K,L,M,N,O,P)
函数[E] = myFun5(F,G,H,I,J,K,L,M,N,O,P)
它有效并且程序运行良好,但输出是myFun1,myFun2,myFun3,myFun4,myFun5等5个功能之间的唯一区别。
我觉得这不实用
那么有没有办法让单个函数myfun有5个输出?
答案 3 :(得分:0)
我的节目:
clc;
clear all;
load('C:\Users\Documents\MATLAB\myFile\matrice_F.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_G.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_H.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_I.mat');
F = m_F;
G = m_G;
H = m_H;
I = m_I;
load('C:\Users\Documents\MATLAB\myFile\matrice_J.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_K.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_L.mat');
load('C:\Users\Documents\MATLAB\myFile\matrice_M.mat');
J = m_J;
K = m_K;
L = m_L;
M = m_M;
load('C:\Users\Documents\MATLAB\myFile\matrice_Result.mat');
N = m_N ;
O = m_O;
P = m_P;
[A,B,C,D,E] = myFun(F,G,H,I,J,K,L,M,N,O,P);
file_name = 'matrice_final.mat';
save(file_name,'A','B','C','D','E');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
我的职能:
function %matrice_return% [AA,BB,CC,DD,EE] = myFun(Q,R,S,T,U,V,W,X,Y,Z,ZZ)
AA=zeros(1,10);
BB=zeros(1,10);
CC=zeros(1,10);
DD=zeros(1,10);
EE=zeros(1,10);
for i=1:1:10
if Q(i)>1
AA(i)=R(i)*S(i);
end
if R(i)>1
BB(i)=T(i)*U(i);
end
if S(i)>1
CC(i)=V(i)*W(i);
end
if T(i)>1
DD(i)=X(i)*Y(i);
end
if U(i)>1
EE(i)=Z(i)*ZZ(i);
end
end
%matrice_return = [AA,BB,CC,DD,EE];% %%error
我的问题解决了,我感谢所有花时间解决问题的人。
我没想到解决方案如此简单!!
答案 4 :(得分:0)
我假设你的函数确实有5个输出参数。 如果是这样,可能在Matlab路径中有一些具有相同名称的其他函数具有不同数量的输出参数。 如果我创建具有相同名称但更多或更少输出参数的函数,我现在也会发生这种情况。
我看到你从指定的路径加载数据。也许你不在你真正想要调用的功能的文件夹中。
尝试重命名您的函数(文件+函数名称)。同时尝试将路径设置为默认值(文件 - >设置路径...->默认值)并将目录更改为包含您的功能的目录。如果这些都不起作用,那么再次尝试所有步骤,我很确定这是你错误的原因。
答案 5 :(得分:0)
@lebland
您发布的代码定义了一个函数,其中包含一个名为matrice_return
的返回变量。您似乎想要返回五个变量AA,BB,CC,DD,EE
。所以现在编辑你的函数定义@Jonas非常清楚地解释了。如果您在问题中发布了您的定义,我们会在几个小时前对其进行整理。
答案 6 :(得分:0)
您的问题在于matrice_return变量。而不是:
function matrice_return = myFun(Q,R,S,T,U,V,W,X,Y,Z,ZZ)
.
.
.
matrice_return = [AA,BB,CC,DD,EE];
尝试:
function [AA,BB,CC,DD,EE] = myFun(Q,R,S,T,U,V,W,X,Y,Z,ZZ)
答案 7 :(得分:0)
如果您不想更改myFun定义,可以在脚本中执行以下操作:
myFun_result = myFun(F,G,H,I,J,K,L,M,N,O,P);
A = myFun_result(1:10);
B = myFun_result(11:20);
C = myFun_result(21:30);
D = myFun_result(31:40);
E = myFun_result(41:50);