Question
Hello, I have the objective function and I want to minmize this gradiant. e is a vector of ones and y is a vector of size . The . I want find that minmize this objective function. Here is my attempt: y = rand(1000, 1); % Random target values e = ones(size(y)) global y My target function is : function gradient = gradient(h) global y gradient = 2 * (h*ones(size(y)) - y); end and then calling the function into fminsearch to get the result by : mu_y = fminsearch( @(h)gradient(h),0); and I got the error massage : >> mu_y = fminsearch( @(h)gradient(h),0); Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1000-by-1. Error in fminsearch (line 201) fv(:,1) = funfcn(x,varargin{:}) Can someone please help in this problem thanks.
Related Questions
Expert Answer
Kshitij Singh
PhD Expert
Answered Nov 20, 2025
y is 1000 x 1.
You are passing scalar 0 as the initial value for fminsearch() so at each step h will be 0 inside your gradient function.
gradient = 2 * (h*ones(size(y)) - y);
ones(size(y)) is 1000 x 1. h is scalar and scalar * 1000 x 1 is 1000 x 1. Subtract the 1000 x 1 y and you get a 1000 x 1. Multiply that by 2 and you get 1000 x 1 that is returned.
However fminsearch requires that you return a scalar.
You need to return something closer to
gradient = sum(2 * (h*ones(size(y)) - y).^2);
Note though that scalar * ones(size(y)) - y is going to give you the same result as (h - y) -- the scalar would automatically be replicated to the size of y.
I suspect that your
should be a 1 x 1000 vector. Because if not, then you can calculate the optimal h without using fminsearch() by using calculus:
numel(y)*4*h == 4*sum(y) ---> h = sum(y)/numel(y) --> h = mean(y)
Have a different question? Ask here