workaround for handling a large number of variables in the objective function of lsqnonlin
1 view (last 30 days)
Show older comments
Abdelwahab Afifi
on 12 May 2020
Commented: Abdelwahab Afifi
on 12 May 2020
I want to optimize my objective function
w0=zeros(m,1)
[w,resnorm] = lsqnonlin(@myfun,w0)
How can I dynamically define weights w(1) w(2) w(3) in my function to adapt any possible change in number of variables (m) as follow
function F = myfun(w)
global X % regression matrix of (nxm)
global Y % output vector (nx1)
F = Y - ( w(1)*X(:,1) + w(2)*X(:,2) + w(3)*X(:,3) + .. + w(m)*X(:,m) );
end
1 Comment
Stephen23
on 12 May 2020
Note that the global variables should be replaced by function parameterization:
Accepted Answer
Stephen23
on 12 May 2020
Edited: Stephen23
on 12 May 2020
>> X = rand(7,3);
>> w = rand(3,1);
>> w(1)*X(:,1) + w(2)*X(:,2) + w(3)*X(:,3) % what you do now
ans =
0.63892
0.43089
0.59637
0.89806
1.08999
0.98472
0.38443
>> X*w(:) % what you should do: matrix multiply
ans =
0.63892
0.43089
0.59637
0.89806
1.08999
0.98472
0.38443
3 Comments
Stephen23
on 12 May 2020
Edited: Stephen23
on 12 May 2020
"I ask about defining the objective function (myfun) interms of large number of variables (w)"
And that is what I gave you. Matrix multiplcation neatly solves your problem of how to "...dynamically define weights w(1) w(2) w(3) in my function to adapt any possible change in number of variables (m)". You gave this verbose code
w(1)*X(:,1) + w(2)*X(:,2) + w(3)*X(:,3) + .. + w(m)*X(:,m)
which I simply replaced with one matrix multply
X*w(:)
giving exactly the same output as your code, and yet it also works for any m (thus answering your question). So far you have not actually stated why it would not work, nor given any counter-example. If it did not work as expected please show your exact input data and the expected output.
function F = myfun(w)
global X % regression matrix of (nxm)
global Y % output vector (nx1)
F = Y - X*w(:);
end
Note that the global variables should be replaced by function parameterization:
More Answers (0)
See Also
Categories
Find more on Get Started with Optimization Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!