[Mathematica] : Mathlink/Evaluation of a function using NMinValue/NMin

  • Context: Mathematica 
  • Thread starter Thread starter Hepth
  • Start date Start date
  • Tags Tags
    Function Mathematica
Click For Summary
SUMMARY

The discussion focuses on the evaluation issues encountered with the NMinValue function in Mathematica 7 when using a custom function chi2 that relies on Mathlink. The user experiences an error indicating that the function value is not a number at a specific parameter value, despite the function returning a valid number when called directly. The issue arises from NMinValue attempting to evaluate the function before minimization, which is problematic due to the Mathlink dependency. A suggested solution involves modifying the function definition to enforce numeric inputs using the pattern m_?NumericQ.

PREREQUISITES
  • Familiarity with Mathematica 7 syntax and functions
  • Understanding of Mathlink and its integration with Mathematica
  • Knowledge of function evaluation and minimization techniques in Mathematica
  • Basic concepts of numeric patterns in function definitions
NEXT STEPS
  • Explore the use of NumericQ patterns in Mathematica function definitions
  • Investigate the differences in function evaluation between Mathematica 7, 8, and 9
  • Learn about the implications of using Mathlink with external code in Mathematica
  • Study the behavior of NMinValue and NMinimize in handling symbolic versus numeric inputs
USEFUL FOR

Mathematica users, particularly those working with numerical optimization and Mathlink integration, as well as developers needing to troubleshoot function evaluation issues in computational environments.

Hepth
Science Advisor
Gold Member
Messages
458
Reaction score
40
I have a function that is defined using a variety of things, some matrix algebra, some mathlink functions, etc. But they are all defined to evaluate when called with the parameters :

chi2[mb, vmc, v1, v2, v3, v4, 0.1066, 0.219]

gives me a number back. I can even do a table over some range of parameters and it always returns a value, no matter how fine my grid becomes.

But when I run something like :

Code:
NMinValue[chi2[mb, 0.9882, 0.4536, 0.1485, 0.2981, -0.142279, 0.1066, 0.219], {mb, 4.6 - 0.2, 4.6 + 0.2}, AccuracyGoal -> 5]

Mathematica gives me :
Code:
NMinValue::nnum: The function value 0.584316+<<49>>+<<1>> is not a number at {mb} = {4.66099}. >>

though

Code:
chi2[4.660987123189611`, 0.9882000000000001`, 0.4536`, \
0.14850000000000002`, 0.29810000000000003`, -0.14227941068376537`, \
0.1066`, 0.219`]

gives me a value, 120.067.

So I don't know why it is complaining about that point.

I believe it has to do with NMinValue trying to evaluate the expression before it runs its minimization, and due to Mathlink it can't return a value or functional form unless its passed the parameters first. Like how you can specifiy SymbolicPreprocessing in NIntegrate.


I tried Evaluate[] over the chi2, but that doesn't work.

I can't really give a sample code, its much too difficult. But does anyone know if you can force a function to be evaluated at each given point?

I can also plot the function over the range of mb, it is just a simple parabola with a minimum right where I expected it. Plot has no trouble evaluating it.

Does NMinimize use algebraic derivatives? Does it try to preprocess functions before passing it a test argument?

This is all in Mathematica 7 for the moment. I can try 8 and 9 later, but not for a bit.
 
Physics news on Phys.org
Yes, Mathematica does all sorts of things in the evaluation process that can break things which expect constant numeric values and get symbols.

Try changing your definition to use m_?NumericQ for each of your parameters m and see if the problem goes away.

Doing that means your function is in some ways undefined for anything but constant numeric arguments.
 
Yes, due to the mathlink to some external Fortran code it is undefined unless given numerical inputs. It'll just return Failed otherwise.

I already set a property of the mathlink function as numerical, but maybe I must do tht to each input as well. I'll check when I get back to my computer.
 

Similar threads

  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
9K
  • · Replies 3 ·
Replies
3
Views
3K