Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have two arrays of length n. One of them is obtained by experiment, so every element of

the array is a number. The other array is parametric, each element is a combination of a

parameter and numbers. There are 8 parameters. In theory, arrays one and two must be the same.

I want to find the best possible set of 8 parameters which fit the parametric array to the

experimental one.

How can I do that in Mathematica? FindFit needs an array and a function. I do not know how

to fit the two arrays.

I tried to subtract the two arrays and use NMinimize to minimum the new array with respect

to the parameters. It didn't work. It returns:

NMinimize::bcons: The following constraints are not valid: {0.004 -4 (E^(-

(0.002/Subscript[<<2>>])) Subscript[a, 1]+E^(-(0.002/Subscript[<<2>>])) Subscript[a, 

2]+E^(-(0.002/Subscript[<<2>>])) Subscript[a, 3]+E^(-(0.002/Subscript[<<2>>])) 

Subscript[a, 4]),4-4 (E^(-(0.002/Subscript[<<2>>])) Subscript[a, 1]+E^(-

(0.002/Subscript[<<2>>])) Subscript[a, 2]+E^(-(0.002/Subscript[<<2>>])) Subscript[a, 

3]+E^(-(0.002/Subscript[<<2>>])) Subscript[a, 4]),<<48>>,<<1588>>}. Constraints should 

be equalities, inequalities, or domain specifications involving the variables. >>

Mathematica thinks that the first argument of NMinimize contains some constraints, which

is not the case. It thinks so perhaps because the first argument cannot be an array.

share|improve this question
Take a look at NMinimize. – Kuba Mar 19 '14 at 13:19
I tried that. It didn't work. – MOON Mar 19 '14 at 13:44
Please add the actual code and any data necessary to reproduce the problem. – Yves Klett Mar 19 '14 at 14:19
up vote 2 down vote accepted

For example:

experimArray = Range@20;
theoretArray = ListConvolve[{a, b, c, d, e}, Range@24]
sol = NMinimize[Norm[experimArray - theoretArray], {a, b, c, d, e}]


theoretArray /. sol[[2]]
{1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20.}
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.