Problem z Manipulate pokazującym ContorPlot i wyniki NSolve

Sep 17 2020

Używam manipulacji na ContourPlot i NSolve, kod jest następujący

BRfunction[MUU_, Mss_, AU_, As_, AUs_] := 
  1.84692*10^8 (((0.000249253 - 0.0893089 Mss^2 + 15 Mss^4) As)/(4 Mss^8) + 
    (0.198094 (-0.0334908 + 10 Mss^2) AUs)/(Mss^4 MUU^2) + (0.392411 AU)/MUU^4)

Manipulate[
  Column[
    ContourPlot[
      BRfunction[MUU, MYy, AU, As, AUs] == 10^-8, 
      {MUU, 1000, 30000}, 
      {MYy, 1000, 30000}, 
      FrameLabel -> {"MUU", "Mss"}, 
      MaxRecursion -> 6],
    NSolve[
      VU1x1^2*(VU1x2^2 + VU2x1^2) == AU && 
      Oss1x1^2*(Oss1x2^2 + Oss2x1^2) == As && 
      VU1x1*Oss1x1*(VU1x2*Oss1x2 + VU2x1*Oss2x1) == AUs && 
      VU1x1 < 1 && VU1x1 > -1 && VU1x2 < 1 && VU1x2 > -1 && 
      VU2x1 < 1 && VU2x1 > -1 &&
      Oss1x1 < 1 && Oss1x1 > -1 && Oss1x2 < 1 && Oss1x2 > -1 && 
      Oss2x1 < 1 && Oss2x1 > -1, 
      {VU1x1, VU1x2, VU2x1, Oss1x1, Oss1x2, Oss2x1}]], 
  {AU, 0, 0.5}, 
  {As, 0, 2}, 
  {AUs, -1, 1}]

Problem polega na tym, że warunki w NSolve nie zawsze mają rozwiązanie i skutkują błędami. Z tego powodu (myślę), że w oknie wyjściowym pojawia się coś nałożonego i nieczytelnego, jak pokazano poniżej.

Jeśli uruchomię oba polecenia w osobnych Manipulatach, ContourPlot wychodzi idealnie, a NSolve działa tak, jak powinien. Jak można zrobić to samo w ramach jednej manipulacji?

Odpowiedzi

1 m_goldberg Sep 18 2020 at 01:02

Ponieważ twoje równania wydają się w większości nie mieć rozwiązania lub nieskończoną liczbę rozwiązań, myślę, że FindInstancebędą działać lepiej w twojej sytuacji niż NSolve. Więc możesz spróbować

BRfunction[MUU_, Mss_, AU_, As_, AUs_] := 
  1.84692*10^8 (((0.000249253 - 0.0893089 Mss^2 + 
    15 Mss^4) As)/(4 Mss^8) + 
    (0.198094 (-0.0334908 + 10 Mss^2) AUs)/(Mss^4 MUU^2) + 
    (0.392411 AU)/MUU^4)

Manipulate[
  Column[
    {ContourPlot[
       BRfunction[MUU, MYy, AU, As, AUs] == 10^-8, {MUU, 1000, 30000}, {MYy, 1000, 30000},
       FrameLabel -> {"MUU", "Mss"},
       MaxRecursion -> 6,
       ImageSize -> Medium],
     FindInstance[
       VU1x1^2*(VU1x2^2 + VU2x1^2) == AU &&
       Oss1x1^2*(Oss1x2^2 + Oss2x1^2) == As && 
       VU1x1*Oss1x1*(VU1x2*Oss1x2 + VU2x1*Oss2x1) == AUs &&
       -1 < VU1x1 < 1 && -1 < VU1x2 < 1 && -1 < VU2x1 < 1 &&
       -1 < Oss1x1 < 1 && -1 < Oss1x2 < 1 && -1 < Oss2x1 < 1,
      {VU1x1, VU1x2, VU2x1, Oss1x1, Oss1x2, Oss2x1},
      Reals]}],
  {AU, 0, 1/2, 1/20, Appearance -> "Labeled"},
  {As, 0, 2, 1/20, Appearance -> "Labeled"},
  {AUs, -1, 1, 1/20, Appearance -> "Labeled"}]