Ошибка Matlab: слишком много выходных аргументов - PullRequest
0 голосов
/ 09 апреля 2010

Я использую следующую функцию в программе 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 - векторы входов и выходов функции ,

но та же самая программа работает очень хорошо, когда я заменил строку функции ее полным сценарием!

Можете ли вы сказать мне, где я должен искать ошибку?

Ответы [ 8 ]

3 голосов
/ 09 апреля 2010

Вы вызывали свою функцию function?Это ОЧЕНЬ ПЛОХАЯ идея, поскольку function является зарезервированным ключевым словом.

Предполагая, что вы просто заменили имя функции, которую вы хотите вызвать, на функцию в вашем примере: вам нужно определить вводи вывод в определении функции.Например, для функции myFun, которая принимает FP в качестве входных данных и должна возвращать AE в качестве выходных данных, вы пишете в качестве первой строки функции

function [A,B,C,D,E] = myFun(F,G,H,I,J,K,L,M,N,O,P)

EDIT

Для пояснения: вы получаете ошибку, потому что вы запрашиваете больше выходных аргументов, чем может предоставить функция.Вы бы получили ту же ошибку, если бы позвонили [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;

Затем я сохраняю функцию как "myFun.mat" на пути Matlab.

Теперь я могу вызывать myFun следующим образом:

[A,B,C] = myFun(1,2,3);

Однако, если я вызову myFun с четырьмя выходными аргументами, я получу ошибку

[A,B,C,D] = myFun(1,2,3);

Фактически, я получу именно ту ошибку, которую вы получили, потому что я определил myFun только с тремя выходными аргументами.

Примечание. Вы всегда можете вызвать функцию с меньшим количеством заданных выходных аргументов, но не с большим.

2 голосов
/ 06 августа 2013

Matlab отказывается принимать задания, такие как

[x,y]=[firstvalue,secondvalue] 

Попробуйте это в оболочке Matlab .Это даст вам ту же ошибку.

В качестве альтернативы, сделайте

z=[fv,sv]; x=z(1); y=z(2);

РЕДАКТИРОВАТЬ: Не берите в голову этот ответ.Это не соответствует вашему вопросу.

0 голосов
/ 09 апреля 2010

Если вы не хотите изменять определение 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);
0 голосов
/ 09 апреля 2010

Ваша проблема с переменной 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)
0 голосов
/ 09 апреля 2010

@ lebland

Код, который вы опубликовали, определяет функцию с одной возвращаемой переменной с именем matrice_return. Кажется, вы хотите вернуть пять переменных AA,BB,CC,DD,EE. Так что теперь отредактируйте определение вашей функции, как @Jonas объяснил очень четко. если бы вы опубликовали свое определение в своем вопросе, мы бы разобрались с этим несколько часов назад.

0 голосов
/ 09 апреля 2010

Я предполагаю, что ваша функция действительно имеет 5 выходных аргументов. Если это так, возможно, есть какая-то другая функция с тем же именем в Matlab Path с другим числом выходных параметров. Случается и у меня время от времени, если я создаю функции с тем же именем, но с более или менее выходными аргументами.

Как я вижу, вы загружаете данные с указанного пути. Может быть, вы не в папке с функцией, которую вы действительно хотите вызвать.

Попробуйте переименовать вашу функцию (файл + имя функции внутри). Также попробуйте установить путь по умолчанию (File-> Set Path ...-> Default) и изменить каталог на каталог с вашей функцией. Если ничего из этого не помогло, попробуйте все шаги снова, я уверен, что это причина ваших ошибок.

0 голосов
/ 09 апреля 2010

моя программа:

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

моя проблема решена, я благодарю всех, кто уделил время на решение моей проблемы.

Я не ожидал, что решение так просто !!

0 голосов
/ 09 апреля 2010

Я пытался протестировать программу с одним выходом каждый раз для 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)

это работает, и программа работает хорошо, но вывод - единственное отличие между 5 функциями myFun1, myFun2, myFun3, myFun4, myFun5. Я думаю, что это не практично.
Так есть ли способ иметь одну функцию myfun с 5 выходами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...