# MultiDimFit Print method.

From: Marcos Gimenez <margial_at_ific.uv.es>
Date: Mon, 11 Jul 2005 20:48:51 +0200

Hello all

After making a succesfull fit using the MultiDimFit class, i printed the output function using fit->Print("m"); and i found that there were diferences in the powers shown between fit->Print("m") and fit->Print("c");

Using Print("m") (bad results after testing the fit)

Parameterization:

Normalised variables:
```        y_0     = 1 + 2 * (x_0 - 1) / (1 - -1)
y_1     = 1 + 2 * (x_1 - 1) / (1 - -1)

f(y_0, y_1) = 0.6374

+ 28.69 * y_0
- 0.4414 * y_0^3

+ 0.005439 * y_0 * y_1^3
+ 14.73 * y_0^4
+ 19.87 * y_1^5
+ 0.5973 * y_0^3 * y_1^3
- 0.1731 * y_0^5
- 22.42 * y_0^6
- 17.31 * y_1^7

+ 0.2964 * y_1
- 3.186 * y_1^3
- 0.2975 * y_1^4

```

Using Print("c") (good results after testing the fit, same results when using fit->Eval(x) method)

Coefficients:

# Value Error Powers

```   0        0.6374        0.3363     0   0
1         28.69         1.419     1   0
2       -0.4414         2.462     2   0
3      0.005439        0.8616     1   2
4         14.73         10.56     3   0
5         19.87          75.6     0   4
6        0.5973         1.171     2   2
7       -0.1731         2.452     4   0
8        -22.42         9.288     5   0
9        -17.31         65.37     0   6
10        0.2964          0.63     0   1
11        -3.186         10.77     0   2
12       -0.2975        0.7781     0   3

```

If i look in the TMultiDimFit source and i search what it does when "m" option it is selected there is a part in the code after the switch(fPolyType) that i think it should be using p-1 instead of p, because TMultiDimFit stores power+1.

Now

```      for (Int_t j = 0; j < fNVariables; j++) {
Int_t p = fPowers[fPowerIndex[i] * fNVariables + j];
switch (p) {
case 1: break;
case 2: cout << " * y_" << j; break;
default:
switch(fPolyType) {
case kLegendre:  cout << " * L_" << p << "(y_" << j << ")"; break;
case kChebyshev: cout << " * C_" << p << "(y_" << j << ")"; break;
default:         cout << " * y_" << j << "^" << p; break;
}
}

}

```

I think it should be

```      for (Int_t j = 0; j < fNVariables; j++) {
Int_t p = fPowers[fPowerIndex[i] * fNVariables + j];
switch (p) {
case 1: break;
case 2: cout << " * y_" << j; break;
default:
switch(fPolyType) {
case kLegendre:  cout << " * L_" << p-1 << "(y_" << j << ")"; break;
case kChebyshev: cout << " * C_" << p-1 << "(y_" << j << ")"; break;
default:         cout << " * y_" << j << "^" << p-1; break;
}
}

}

```

Anyway i am not really really sure of that.

I am using ROOT 4.02 but i looked also at 5.02/00 source to be sure and i found the same.

Thank you

Marcos Received on Mon Jul 11 2005 - 20:49:04 MEST

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:10 MET