Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.18 KB | None | 0 0
  1. NSolve[{a^10 E^-a - b^10 E^-b ==
  2. 0, (362880 +
  3. a (362880 +
  4. a (181440 +
  5. a (60480 +
  6. a (15120 +
  7. a (3024 +
  8. a (504 +
  9. a (72 + a (9 + a))))))))) E^-a + (-362880 -
  10. b (362880 +
  11. b (181440 +
  12. b (60480 +
  13. b (15120 +
  14. b (3024 +
  15. b (504 + b (72 + b (9 + b))))))))) E^-b + 0.99 ==
  16. 0}, {a, b}]
  17.  
  18. {#, NMinimize[(a^10 E^-a -
  19. b^10 E^-b)^2 + ((362880. +
  20. a (362880. +
  21. a (181440. +
  22. a (60480. +
  23. a (15120. +
  24. a (3024. +
  25. a (504. +
  26. a (72. + a (9. + a))))))))) E^-a + (-362880. -
  27. b (362880. +
  28. b (181440. +
  29. b (60480. +
  30. b (15120. +
  31. b (3024. +
  32. b (504. + b (72. + b (9. + b))))))))) E^-b +
  33. 0.99)^2, {a, b}, Method -> #]} & /@
  34. {"NelderMead", "DifferentialEvolution", "SimulatedAnnealing", "RandomSearch"}
  35.  
  36. {{"NelderMead", {0.965138, {a -> 1.96905, b -> 1.96881}}},
  37. {"DifferentialEvolution", {3.38813*10^-21, {a -> 1.69024, b -> -1.25858}}},
  38. {"SimulatedAnnealing", {1.11485*10^-20, {a -> 1.69024, b -> -1.25858}}},
  39. {"RandomSearch", {0.968532, {a -> 0.900447, b -> 0.774213}}}}
  40.  
  41. f[a_, b_] := a^10 E^-a - b^10 E^-b;
  42. g[a_, b_] := (362880 +
  43. a (362880 +
  44. a (181440 +
  45. a (60480 +
  46. a (15120 +
  47. a (3024 +
  48. a (504 +
  49. a (72 + a (9 + a))))))))) E^-a + (-362880 -
  50. b (362880 +
  51. b (181440 +
  52. b (60480 +
  53. b (15120 +
  54. b (3024 + b (504 + b (72 + b (9 + b))))))))) E^-b +
  55. 0.99;
  56.  
  57. f[10, 10]
  58. (* 0 *)
  59.  
  60. g[10, 9.99997819382]
  61. (* -1.19762*10^-7 *)
  62.  
  63. DynamicModule[{
  64. searchRadius = 20,
  65. searchOverlap = 1,
  66. searchXmin = -200,
  67. searchXmax = 600,
  68. searchYmin = -400,
  69. searchYmax = 400,
  70. plotZmin = -1000,
  71. plotZmax = 1000,
  72. currentSearchArea = {},
  73. localMinima = {},
  74. localMinimaBelowThreshold = {},
  75. threshold = 10^-6,
  76. algorithms = {"NelderMead", "DifferentialEvolution",
  77. "SimulatedAnnealing", "RandomSearch"},
  78. i, j, imin, imax, jmin, jmax, x, y
  79. },
  80. Print@Show[Plot3D[
  81. {Log[f[x, y]^2], Log[g[x, y]^2]},
  82. {x, searchXmin, searchXmax},
  83. {y, searchYmin, searchYmax},
  84. PlotRange -> {
  85. {searchXmin - searchRadius - searchOverlap/2,
  86. searchXmax + searchRadius + searchOverlap/2},
  87. {searchYmin - searchRadius - searchOverlap/2,
  88. searchYmax + searchRadius + searchOverlap/2},
  89. {plotZmin, plotZmax}},
  90. PlotStyle -> {
  91. {Opacity[0.5], Blue},
  92. {Opacity[0.5], Yellow}
  93. },
  94. MeshStyle -> Gray,
  95. ImageSize -> Full
  96. ],
  97. Graphics3D[{Red, Opacity[0.7], EdgeForm[None],
  98. Dynamic[Cuboid[currentSearchArea[[1]],
  99. currentSearchArea[[2]]]]}],
  100. Graphics3D[{Red, Dotted,
  101. Dynamic[Table[
  102. Line[{{t[[1]], t[[2]], plotZmin}, {t[[1]], t[[2]],
  103. plotZmax}}], {t, localMinima}]]}],
  104. Graphics3D[{Green,
  105. Dynamic[Table[
  106. Line[{{t[[1]], t[[2]], plotZmin}, {t[[1]], t[[2]],
  107. plotZmax}}], {t, localMinimaBelowThreshold}]]}]
  108. ];
  109. For[i = searchXmin, i <= searchXmax, i += 2*searchRadius,
  110. For[j = searchYmin, j <= searchYmax, j += 2*searchRadius,
  111. imin = i - searchRadius - searchOverlap/2;
  112. imax = i + searchRadius + searchOverlap/2;
  113. jmin = j - searchRadius - searchOverlap/2;
  114. jmax = j + searchRadius + searchOverlap/2;
  115. currentSearchArea = {{imin, jmin, plotZmin}, {imax, jmax,
  116. plotZmax}};
  117. Scan[(
  118. {x, y} = {a, b} /. #;
  119. If[x != imin && x != imax && y != jmin && y != jmax,
  120. If[f[x, y]^2 + g[x, y]^2 < threshold,
  121. Print[{x, y, f[x, y], g[x, y]}];
  122.  
  123. localMinimaBelowThreshold =
  124. Append[localMinimaBelowThreshold, {x, y}],
  125. localMinima = Append[localMinima, {x, y}]
  126. ];
  127. ]) &,
  128. Quiet@
  129. NMinimize[{f[a, b]^2 + g[a, b]^2, {imin < a < imax,
  130. jmin < b < jmax}}, {a, b}, Method -> #][[2]] & /@
  131. algorithms
  132. ]
  133. ]
  134. ];
  135. currentSearchArea = {{0, 0, 0}, {0, 0, 0}};
  136. ];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement