The following 10 equations has one set of exact answer using NSolve in Mathematica 9.0.0.0 (for positive c2, alpha1, alpha3, beta1, beta3, A1 and A3):
eq1[mpionp_] := -2 c2 + 2 d2 + 4 c4a alpha1^2 + 4 e3a beta3 ==
0.018769 + mpionp^2;
eq2[mpionp_] := -4 c2 d2 + 8 c4a d2 alpha1^2 - 16 e3a^2 alpha3^2 +
8 e3a d2 beta3 == 0.018769 mpionp^2;
eq3 = -2 c2 + 2 d2 + 12 c4a alpha1^2 - 4 e3a beta3 == 3.133076`;
eq4 = -4 c2 d2 + 24 c4a d2 alpha1^2 - 16 e3a^2 alpha3^2 -
8 e3a d2 beta3 == 2.0866380304`;
eq5 = -2 A1 - 2 c2 alpha1 + 4 c4a alpha1^3 + 4 e3a alpha3 beta1 +
4 e3a alpha1 beta3 == 0;
eq6 = -2 A3 - 2 c2 alpha3 + 4 c4a alpha3^3 + 8 e3a alpha1 beta1 == 0;
eq7 = 4 e3a alpha1 alpha3 + 2 d2 beta1 == 0;
eq8 = 4 e3a alpha1^2 + 2 d2 beta3 == 0;
eq9 = (0.09263098833543772` alpha1)/(
beta1 Sqrt[
1 - (2 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3)))/Sqrt[
64 e3a^2 alpha3^2 +
4 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3))^2]] +
alpha1 Sqrt[
1 + (2 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3)))/Sqrt[
64 e3a^2 alpha3^2 +
4 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3))^2]]) == alpha1;
eq10[t_] := A3/A1 == t;
Eqs[mpionp_, t_] :=
eq1[mpionp] && eq2[mpionp] && eq3 && eq4 && eq5 && eq6 && eq7 &&
eq8 && eq9 && eq10[t] && alpha1 >= 0 && c2 \[Element] Reals &&
beta1 > 0;
parameters = {c2, d2, e3a, c4a, alpha1, alpha3, beta1, beta3, A1, A3};
solexact=NSolve[Eqs[1.2, 20], parameters]
{{c2 -> 0.158201, d2 -> 0.615064, e3a -> -1.74843, c4a -> 47.036,
alpha1 -> 0.0606073, alpha3 -> 0.0720951, beta1 -> 0.0248421, beta3 -> 0.0208837, A1 -> 0.000665807, A3 -> 0.0133161}}
First: The NSolve doesn't have any answers in Mathematica 10.0.1.0.
EDIT 1: As Daniel said, it is possible to get the same answers as in Mathematica 9, by adding Method -> "EndomorphismMatrix" to the NSolve code, i.e.,
solexact=NSolve[Eqs[1.2, 20], parameters, Method -> "EndomorphismMatrix"]
Second: If instead of NSolve, I use NMinimize function to find the parameters:
eq1a[mpionp_] := -2 c2 + 2 d2 + 4 c4a alpha1^2 +
4 e3a beta3 - (0.018769 + mpionp^2);
eq2a[mpionp_] := -4 c2 d2 + 8 c4a d2 alpha1^2 - 16 e3a^2 alpha3^2 +
8 e3a d2 beta3 - (0.018769 mpionp^2);
eq3a = -2 c2 + 2 d2 + 12 c4a alpha1^2 - 4 e3a beta3 - 3.133076`;
eq4a = -4 c2 d2 + 24 c4a d2 alpha1^2 - 16 e3a^2 alpha3^2 -
8 e3a d2 beta3 - 2.0866380304`;
eq5a = -2 A1 - 2 c2 alpha1 + 4 c4a alpha1^3 + 4 e3a alpha3 beta1 +
4 e3a alpha1 beta3;
eq6a = -2 A3 - 2 c2 alpha3 + 4 c4a alpha3^3 + 8 e3a alpha1 beta1;
eq7a = 4 e3a alpha1 alpha3 + 2 d2 beta1;
eq8a = 4 e3a alpha1^2 + 2 d2 beta3;
eq9a = (0.09263098833543772` alpha1)/(
beta1 Sqrt[
1 - (2 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3)))/Sqrt[
64 e3a^2 alpha3^2 +
4 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3))^2]] +
alpha1 Sqrt[
1 + (2 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3)))/Sqrt[
64 e3a^2 alpha3^2 +
4 (c2 + d2 - 2 (c4a alpha1^2 + e3a beta3))^2]]) - alpha1;
eq10a[t_] := A3/A1 - t;
Eqsa[mpionp_, t_] :=
eq1a[mpionp]^2 + eq2a[mpionp]^2 + eq3a^2 + eq4a^2 + eq5a^2 + eq6a^2 +
eq7a^2 + eq8a^2 + eq9a^2 + eq10a[t]^2
imax = 10;
Table[
NMinimize[{Eqsa[1.2, 20], alpha1 >= 0 && c2 \[Element] Reals},
parameters, Method -> {"RandomSearch", "RandomSeed" -> i}], {i,
imax}]
Then none of the sets are close to the exact solutions of NSolve. I've tried "DifferentialEvolution", "NelderMead" and "SimulatedAnnealing" methods and none of them is good to minimize this function.
I know that A1, A3, alpha1, alpha3, beta1 and beta3 are positive. If I use these conditions in NMinimize
Table[
NMinimize[{Eqsa[1.2, 20],
alpha1 >= 0 && c2 \[Element] Reals && beta1 > 0 && A1 > 0 &&
A3 > 0 && alpha3 > 0}, parameters,
Method -> {"RandomSearch", "RandomSeed" -> i}], {i, imax}]
Still the answers are too far from the exact answers. My question is that how can I get better answers from NMinimize? (Here NSolve works, but I have some equations which do not have answers using NSolve and so I should use NMinimize. Therefore this is a test for future works.)
Thanks.
NSolve
. SetMethod->"EndomorphismMatrix"
. This does not address your question but might at least get you to where there is no degradation in behavior. $\endgroup$