Error: Too many output arguments
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello. In my main M script I have:
% X is defined previously - m x 9 array
N = 100;
alpha = zeros(N,1);
lambda = zeros(N, 9); % N x 9 vector - it can be multiplied by X' with getting N x m array
% 2. Function to minimize:
h = Hypothesis(X, T4, alpha, lambda); % 1 x m vector
J = @(alpha, lambda) SCBCost4(X, T4, alpha, lambda, h); % a number (1 x 1)
% 2.1 Partial derivatives:
dJ_alpha = @(alpha, lambda) DerivCost_alpha(X, T4, lambda, h); % N x 1 vector
% dJ_lambda = @(alpha, lambda) DerivCost_lambda(X, T4, alpha, lambda, h); % N x 9 array
GAMMA = 0.01;
MAX_ITER = 100;
FUNC_TOL = 0.1;
Jvals = [];
progress = @(iter, alpha, lambda) fprintf('iter = %d: alpha = %s, lambda = %s, J(alpha, lambda) = %f\n', ...
iter, mat2str(alpha(1),3), mat2str(lambda(1, :),9), J(alpha, lambda));
% 3.2 Iterate:
iter = 1;
Jvals(iter) = J(alpha, lambda);
progress(iter, alpha, lambda);
while iter < MAX_ITER && Jvals(end) > FUNC_TOL
iter = iter + 1;
alpha = alpha - GAMMA * dJ_alpha(alpha, lambda); % HERE I HAVE THE ERROR (N x 1 vector = N x 1 vector - number*[N x 1 vector])
% lambda = lambda - GAMMA * dJ_lambda(alpha, lambda);
Jvals(iter) = J(alpha, lambda);
progress(iter, alpha, lambda); % show progress
end
In function 'DerivCost_alpha' I have:
function dJ_alpha = DerivCost_alpha(X, y, lambda, h)
N = 100;
m = length(y);
h = Hypothesis (X, y, alpha, lambda); % 1 x m vector
s = zeros(N, m); % N x m array
for n = 1:N
s(n, :) = sin(lambda(n, :)*X'); % 1 x m vector. N of such vectors form the N x m array
end
dJ_alpha = zeros(N, 1);
for n = 1:N
for j = 1:m
dJ_alpha(n, :) = dJ_alpha(n, :) + (1/m)*((h(j) - y(j))*s(n, i));
end
end
In function 'Hypothesis' I have:
function h = Hypothesis(X, y, alpha, lambda)
N = 100;
m = length(y);
S = zeros(N, m); % N x m array
for n = 1:N
S(n, :) = (alpha(n))*sin((lambda(n, :))*X'); % 1 x m vector. N of such vectors form the N x m array
end
h = zeros(1, m);
for i = 1:m
h(i) = sum(S(:, i)); % summing elements in each column of array S. Get 1 x m vector
end
end
When I run it I get the next:
>> iter = 1: alpha = 0, lambda = [0 0 0 0 0 0 0 0 0], J(alpha, lambda) = 1426.354673
Error using alpha
Too many output arguments.
Error in DerivCost_alpha (line 5)
h = Hypothesis (X, y, alpha, lambda);
Error in Draft2>@(alpha,lambda)DerivCost_alpha(X,T4,lambda,h) (line 23)
dJ_alpha = @(alpha, lambda) DerivCost_alpha(X, T4, lambda, h);
Why could this error happen? I can't really understand. Please, help.
Thanks for reading!
1 comentario
Adam Danz
el 23 de Sept. de 2019
The error message says it all.
The function you're calling has 1 output.
function dJ_alpha = DerivCost_alpha(X, y, lambda, h)
but you're asking for two outputs
dJ_alpha = @(alpha, lambda) DerivCost_alpha(X, T4, lambda, h); % N x 1 vector
% ^^^^^ ^^^^^^
Respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!