help-octave
[Top][All Lists]

## passing constant parameters to fsolve function, and iterating across par

 From: collin3271 Subject: passing constant parameters to fsolve function, and iterating across parameters Date: Sat, 18 May 2019 18:29:28 -0500 (CDT)

```Hello,
New to the forum, and wanted to ask about some code that I have working, but
could use improvement.

In using fsolve to evaluate non-linear equation(s), I wanted to vary some of
the constants in the evaluated equation.

The go-to method seems to be using global defined variables. It seems a bit
messy(in needing to update global list everywhere it was used), so I was
looking for something cleaner to use within functions.

After seeing a note about the movement away from inline functions, I was
able to use an anonymous function (which has access to variables in the
enclosing scope). A detail of this is that the anonymous function has to be
re-stated each time the constants within it are redefined elsewhere.

Questions:
1) It works, but am I sacrificing something by doing this?
2) Is there a non-for-loop method you might think of to evaluating fsolve
across different parameters?

*Example code*, passing script level variable to anonymous function
C = [1 2]; % Parameters in the evaluated equation that do not vary with the
independent variable
anonymous_function = @(x) C(1)*x(1)^2+C(2)*sqrt(x(2)) %Non-linear equation
system to be evaluated
x0=[1,1]; % Set initial values of independent variables in fsolve execution
xout = fsolve(anonymous_function,x0);

*Example Code*, iterating across parameters sent to anonymous
function/fsolve
C_matrix=[1 2;2 3;3 4] % Set of parameters to be used in evaluation
[m n] = size(C_matrix);
x_values = zeros(m,2); % Matrix for storing fsolve output, 2 independent
variables
for i=1:m
C = C_matrix(i,:); % Select relevant constant parameter set
anonymous_function = @(x) C(1)*x(1)^2+C(2)*sqrt(x(2))-15; % Re-instantiate
anonymous function to include updated parameters
x0=[10,100]; % Set initial values of independent variables in fsolve
execution
xout = fsolve(anonymous_function,x0);
x_values(i,:) = xout; % Save output of fsolve result for independent
variables
endfor

Thanks for the feedback, massive appreciation for octave and the people who
keep it alive

--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html

```