fit_frf Function

public function fit_frf(mt, n, freq, rsp, maxp, minp, init, stats, alpha, controls, settings, info, err) result(rst)

Uses

    • peaks

Fits an experimentally obtained frequency response by model for either a receptance model:

or an accelerance model:

.

Internally, the code uses a Levenberg-Marquardt solver to determine the parameters. The initial guess for the solver is determined by a peak finding algorithm used to locate the resonant modes in frequency. from this result, estimates for both the amplitude and natural frequency values are obtained. The damping parameters are assumed to be equal for all modes and set to a default value of 0.1.

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: mt

The excitation method. The options are as follows.

  • FRF_ACCELERANCE_MODEL: Use an accelerance model.

  • FRF_RECEPTANCE_MODEL: Use a receptance model.

integer(kind=int32), intent(in) :: n

The model order (# of resonant modes).

real(kind=real64), intent(in), dimension(:) :: freq

An M-element array containing the excitation frequency values in units of rad/s.

complex(kind=real64), intent(in), dimension(:) :: rsp

An M-element array containing the frequency response to fit.

real(kind=real64), intent(in), optional, dimension(:) :: maxp

An optional 3*N-element array that can be used as upper limits on the parameter values. If no upper limit is requested for a particular parameter, utilize a very large value. The internal default is to utilize huge() as a value.

real(kind=real64), intent(in), optional, dimension(:) :: minp

An optional 3*N-element array that can be used as lower limits on the parameter values. If no lower limit is requested for a particalar parameter, utilize a very large magnitude, but negative, value. The internal default is to utilize -huge() as a value.

real(kind=real64), intent(in), optional, dimension(:) :: init

An optional 3N-element array that, if supplied, provides an initial guess for each of the 3N model parameters for the iterative solver. If supplied, this array replaces the peak finding algorithm for estimating an initial guess.

type(regression_statistics), intent(out), optional, dimension(:) :: stats

An optional 3*N-element array that, if supplied, will be used to return statistics about the fit for each model parameter.

real(kind=real64), intent(in), optional :: alpha

The significance level at which to evaluate the confidence intervals. The default value is 0.05 such that a 95% confidence interval is calculated.

type(iteration_controls), intent(in), optional :: controls

An optional input providing custom iteration controls.

type(lm_solver_options), intent(in), optional :: settings

An optional input providing custom settings for the solver.

type(convergence_info), intent(out), optional :: info

An optional output that can be used to gain information about the iterative solution and the nature of the convergence.

class(errors), intent(inout), optional, target :: err

An optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.

  • DYN_MEMORY_ERROR: Occurs if there are issues allocating memory.

  • DYN_ARRAY_SIZE_ERROR: Occurs if freq and rsp are not the same size.

  • DYN_UNDERDEFINED_PROBLEM_EROR: Occurs if the requested model order is too high for the number of data points available.

  • DYN_TOLERANCE_TOO_SMALL_ERROR: Occurs if the requested solver tolerance is too small to be practical for this problem.

  • DYN_TOO_FEW_ITERATIONS_ERROR: Occurs if convergence cannot be achieved in the allowed number of solver iterations.

Return Value real(kind=real64), allocatable, dimension(:)

An array containing the model parameters stored as .


Contents