решающая система неявных функций — решение удовлетворяет только одному уравнению

#wolfram-mathematica

Вопрос:

Я пытаюсь решить систему из двух уравнений, одно из которых неявно. Используя Solve[], я получил 2 решения. Однако одно из решений не является точкой для одного из уравнений, и графически эти два уравнения не пересекаются в точке. Я в замешательстве от того, как mathematica вычислила это решение, учитывая, что оно удовлетворяет только одному из уравнений. Вот два уравнения, p и T являются единственными переменными.

Уравнение 1:

 p = [Phi]/R   ((1 - [Phi]) [Phi] (1 - [Lambda]) [Beta])/(((W - 
        p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)/(
 R ([Lambda]/((W - 
        p T) R   [Phi] T  )   ((1 - [Lambda]) [Beta] R)/(((W - 
           p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)))
 

и второе уравнение имеет постоянное произведение:

 p = A/T
 

p и T-единственные переменные, все остальные-параметры.

Чтобы решить уравнения, я сделал:

 Solve[p - [Phi]/
    R - ((1 - [Phi]) [Phi] (1 - [Lambda]) [Beta])/(((W - 
           p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)/(
    R ([Lambda]/((W - 
           p T) R   [Phi] T  )   ((1 - [Lambda]) [Beta] R)/(((W - 
              p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T))) == 0 amp;amp; 
  p == A/T , {p, T}]
 

и решения таковы:

 {{p -> -0.0000199018, T -> -5.02466*10^6}, {p -> 0.319279, 
  T -> 313.206}}
 

Однако, когда я подставил T = -5,02466*(10^6) в уравнение 1, я получил
{p -> 0,325402} вместо {p ->> -0.0000199018}

 T = -5.02466*(10^6)

FindRoot[p - [Phi]/
  R - ((1 - [Phi]) [Phi] (1 - [Lambda]) [Beta])/(((W - 
         p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)/(
  R ([Lambda]/((W - 
         p T) R   [Phi] T  )   ((1 - [Lambda]) [Beta] R)/(((W - 
            p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T))), {p, 0.2}]
 

вывод {p -> 0,325402}

Значения параметров являются:

 [Beta] = 0.95
R = 1/[Beta]
W = 1000000
A = 100
[Phi] = 1/5
[Lambda] = 0.1
 

Кто-нибудь знает, как было получено решение {p — > -0.0000199018, T — > > -5.02466*10^6}? Это точка в уравнении 2, но не в уравнении 1. На графике ниже я построил оба уравнения. p-ось y, T-ось x. Синяя линия-это p = A/T, почему она выглядит волнистой?

введите описание изображения здесь

Ответ №1:

TLDR : Mathematica правильно выполнила свою работу с начальной Solve

Я думаю, что здесь происходит много разных вещей. Во-первых, Solve действительно выдает конкретное предупреждение.

 Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result.
 

Если вы замените любой из ответов, предоставленных Mathematica, они действительно удовлетворяют обоим уравнениям (с некоторой степенью численной точности). Информированный первоначальным предупреждением при использовании Solve , я думаю, что это связано с проблемой числовой точности.

Достаточно интересно, что если вы перевернете обратное уравнение и используете NSolve его, это больше не будет проблемой.

 exp1 = p - [Phi]/
    R - ((1 - [Phi]) [Phi] (1 - [Lambda]) [Beta])/(((W - 
             p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)/(R (
[Lambda]/((W - 
              p T) R   [Phi] T)   ((1 - [Lambda]) [Beta] R)/(((W - 
                 p T) R   [Phi] T) R   [Phi] (1 - [Phi]) T)));
 
 NSolve[exp1 == 0 amp;amp; p == A/T, {p, T}]
{{p -> 0., T -> -5.02466*10^6}, {p -> 0.319279, T -> 313.206}}
 
 NSolve[{exp1 == 0, T == A/p}]
{{p -> 0.319279, T -> 313.206}}
 

Что касается волнистых линий, я снова думаю, что артефакт из ContourPlot того, что вы используете. Если вы просто используете Plot[A/T, {T, -10000, 10000}, , этого не существует.

Итак, теперь возникает вопрос, почему это не отражено в ContourPlot том, что вы сгенерировали. Я думаю, что если вы уйдете далеко (в фактический диапазон решений), сюжет не будет сгенерирован должным образом. Я могу ошибаться, но я думаю ContourPlot , что на данный момент мы просим слишком многого. Чтобы понять, почему {p -> 0., T -> -5.02466*10^6} это правильное решение, я сделал следующее. Я заменил p , и просто построил график результата против T .

 Plot[exp1 /. p -> 0, {T, -10^7, 10^7}]
 

И вы можете видеть, что это выражение действительно пересекает ось x при том самом отрицательном T значении, которое было первоначально найдено.
График замещенного выражения p->0 по сравнению с T» src=»https://i.stack.imgur.com/4OEKw.png»></a></p>
</div>
<h3><em>Комментарии:</em></h3>
<blockquote class=

1. Большое спасибо!