Graph optimization
For a fixed topology of the graph, the coefficients can be optimized. The package provides some routines for doing the optimization. However, by using the functions eval_graph and eval_jac, external routines based on function values and first derivatives can in principle be used.
GraphMatFun.opt_gauss_newton! — Function(iter,resnorm)=opt_gauss_newton!(
graph,
objfun,
discr;
maxit = 100,
logger = 0,
errtype = :abserr,
stoptol = 1e-6,
cref = get_all_cref(graph),
input = :A,
γ0 = 1.0,
linlsqr = :backslash,
droptol = 0,
)Applies the Gauss–Newton algorithm to solve the nonlinear least squares problem: Fit the output of the graph to the values of objfun, in the points discr.
The variable graph is modified during the iterations. The function returns the iteration iter where it terminated, and the corresponding residual norm resnorm.
The kwargs are as follows:
maxitdetermines the maximum number of iterations. Ifloggerhas a value >0, then the intermediate results are printed.errtypedetermines the error type measured, seeadjust_for_errtype!.stoptolis the corresponding stopping tolerance.crefis aVector{Tuple{Symbol,Int}}that determines which coefficients ofgraphthat are considered free variables and optimized.inputis the label corresponding to the input node of the graph.- The stepsize can be scaled with
γ0. linlsqranddroptoldetermines how the inner linear least squares problem is solved; seesolve_linlsqr!.
GraphMatFun.eval_jac — FunctionJ=eval_jac(
graph,
x,
cref;
vals = nothing,
input = :A,
output = size(graph.outputs, 1),
)Computes Jacobian J = dZ(x_i)/dc, with respect to the coefficients given in the vector cref, and points in x. See eval_graph for description of vals and output.
GraphMatFun.opt_linear_fit! — Functionopt_linear_fit!(
graph,
objfun,
discr,
linear_cref;
input = :A,
errtype = :abserr,
linlsqr = :backslash,
droptol = 0,
)Linear fitting of a graph of the form
c_1 g_1(x) + c_2 g_2(x) + … + c_n g_n(x)to the values of objfun, in the points discr. Reference to the coefficients c_1,…,c_n should be given linear_cref.
The variable graph is modified during the iterations and the function has no return value.
See opt_gauss_newton! for a description the kwarg errtype and input, and solve_linlsqr! for the kwargs linlsqr anddroptol`.
GraphMatFun.solve_linlsqr! — Functiond = solve_linlsqr!(A, b, linlsqr, droptol)Solves the linear least squares problem
Ad=b.The argument linlsqr determines how the linear least squares problem is solved. It can be :backslash, :real_backslash, :nrmeq, :real_nrmeq, :svd, or :real_svd. For the latter two options singular values below droptol are disregarded. The :real_X options optimizes d in the space of real vectors. The input matrix A is sometimes overwritten.
GraphMatFun.adjust_for_errtype! — Functionadjust_for_errtype!(A, b, objfun_vals, errtype)Adjusts the matrix A and vector b to errtype. A is a matrix, e.g., the Jacobian or system matrix in a least squares problem. b is a vector, e.g., the residuals or the right-hand side in a lieast squares problem. objfun_vals is a vector of objective function values, and errtype can be :abserr or :relerr, i.e., absolute error or relative error.