[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
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
- passing constant parameters to fsolve function, and iterating across parameters,
collin3271 <=