MATLAB Answers

Problem passing function to lsqnonlin with costant parameters

13 views (last 30 days)
Eugenio Grabovic
Eugenio Grabovic on 15 Jan 2019
Commented: Matt J on 18 Jan 2019
Hello, i have this function to pass to lsqnonlin :
[val,Jac] = myfunction(x,par1,par2,par3)
my function computes already the Jacobian that im planning to pass to slqnonlin and is essential.
x is the optimization variable and par1,par2... are constant parameters required to evaluate the function and are computed separately.
The problem then is how i declare x as the only optimization variable?
I can't use function handle otherwise i would lose my multi ouput;
I can't declare par1,par2,... as globals cause myfunction has parallelization in it;
I could pass the code to evaluate pars into myfunction but it would add not necessary heavy computation into each iteration of lsqnonlin which i'd like to avoid;
Any other ideas? Thank you

  0 Comments

Sign in to comment.

Accepted Answer

Matt J
Matt J on 15 Jan 2019
Edited: Matt J on 15 Jan 2019
par1=______;
par2=______;
par3=______;
lsqnonlin(@(x) myfunction(x,par1,par2,par3), __________);

  3 Comments

Eugenio Grabovic
Eugenio Grabovic on 15 Jan 2019
This would be perfect if i had only one output from myfunction but in this way it doesn't recognize the Jacobian (as second output). For example i tried to just compute:
out = @(x) myfunction(x,par1,par2,par3)
out(xgiven)
and it simply gave me the value omitting the jacobian.
Am i wrong ?
Eugenio Grabovic
Eugenio Grabovic on 15 Jan 2019
Edit: i found another way thanks to your link given Passing Extra Parameters. by using nested functions. This way the parameters act as global inside the function and somehow allow the parallelization. Thanks
Matt J
Matt J on 18 Jan 2019
There shouldn‘t have been issues with a 2nd output argument either way. I’d have to see your complete code to say why there was.

Sign in to comment.

More Answers (0)

Sign in to answer this question.