help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: passing constant parameters to fsolve function, and iterating across


From: fibonacci4
Subject: Re: passing constant parameters to fsolve function, and iterating across parameters
Date: Sun, 19 May 2019 06:01:12 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

Am 19.05.19 um 01:29 schrieb collin3271:
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


Hi Collin,

maybe this helps:

https://de.mathworks.com/help/optim/ug/passing-extra-parameters.html

Ciao

Charly




reply via email to

[Prev in Thread] Current Thread [Next in Thread]