# ROOT::Math::Minimizer ( Not every variable of minimized function set to minimize)

Suppose that I have a function `f` which takes `n` parameters. And I want to minimize this function. But I want to variate only `n-k` parameters. At the same time I should pass all parameters to the function (sounds strange, I know, but it is program’s flaw):

``````FunctionToMinimize( const double* allParameters ){
//do staff with them
}

...
//I want something like the following
for( int i = 0; i < n; i++){
if(/* I want to minimize this parameter */){
Minimizer->SetLimitedVariable( i, "ivarToMin", step, ll, lo );
}
else{
Minimizer->SetVariable( i, "ivarToNotMin" );
}
``````

Two questions:
Is it possible to do something like that? And If so, what I’ll get from `X()` method after the minimization? What it will be with “stable” variables?

EDIT: One more question. When I use `SetFunction` method should I provide number `n` or `n-k`:

``````ROOT::Math::Functor functor( &FunctionToMinimize, n /*or n-k*/ );
``````

I think the total number of parameters remains constant and you should be able to use: ` Minimizer->SetFixedVariable( i, "ivarToNotMin", value ); // new fixed variable` and / or: ```Minimizer->SetVariable( i, "ivarToNotMin", value, step ); // new free variable Minimizer->FixVariable( i ); // fix an existing variable```
Note: there is also: `Minimizer->ReleaseVariable( i ); // "free" an existing "fixed" variable`

Thank you. It is what I want. Actually I want to variate those `k` variables but not in the minimizer`s procedure.

Hi,

You have two possibility:

1. Define you function with n parameters. This means also n should be used when creating the `ROOT::Math::Functor` class. Then you need to defined n-k variable parameters using either `Minimizer::SetVariables` or `Minimizer::SetLimitedVariables` and k fixed parameters using `MInimizer::SetFixedvariables`.

2. Define your function with n-k parameters. In this case the `double *` array used to in `f(double*)` should be of n-k dimension and the same value should be used when creating the `Functor`.
Also in this case no parameter needs to be defined as fixed.

Best Regards

Lorenzo

Thank you, I use the 1st case. Here is a question. Is there explicit method to know minimized function value at the found minima? I do not see it in class reference.

Hi,

You can use

``````Minimizer->MinValue()
``````

Lorenzo

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.