Получить точки ветвления уравнения - PullRequest
5 голосов
/ 17 марта 2011

Если у меня есть общая функция, f(z,a), z и a являются действительными, а функция f принимает действительные значения для всех z за исключением некоторого интервала (z1,z2), гдестановится сложным.Как определить z1 и z2 (что будет в терминах a) с использованием Mathematica (или это возможно)?Каковы ограничения?

В качестве тестового примера рассмотрим функцию f[z_,a_]=Sqrt[(z-a)(z-2a)].Для реальных z и a это принимает реальные значения, за исключением интервала (a,2a), где он становится мнимым.Как мне найти этот интервал в Mathematica?

В общем, я хотел бы знать, как можно найти математическое решение для общего случая.Для функции с двумя переменными, подобными этой, было бы просто сделать контурный график поверхности Римана и наблюдать срезы ветвей.Но что, если это многомерная функция?Есть ли общий подход, который можно использовать?

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

То, что у вас есть, кажется римановой поверхностью, параметризованной «а».Рассмотрим алгебраическое (или аналитическое) соотношение g (a, z) = 0, которое будет порождено из этой ветви параметризованной римановой поверхности.В этом случае это просто g ^ 2 - (z - a) * (z - 2 * a) == 0. В более общем случае это может быть получено с использованием Groebnerbasis, как показано ниже (нет гарантии, что это всегда будет работать без некоторого количества пользователявмешательство).

grelation = First[GroebnerBasis[g - Sqrt[(z - a)*(z - 2*a)], {x, a, g}]]

Out [472] = 2 a ^ 2 - g ^ 2 - 3 az + z ^ 2

Необходимое условие для точек ветвления, как функции отПараметр «a» означает, что ноль, установленный для «g», не дает (однозначную) функцию в окрестности таких точек.Это, в свою очередь, означает, что частная производная этого отношения по g обращается в нуль (это из теоремы о неявной функции многомерного исчисления).Таким образом, мы находим, что grelation и его производная оба равны нулю и решаем для 'z' функцию от 'a'.

Solve[Eliminate[{grelation == 0, D[grelation, g] == 0}, g], z]

Out [481] = {{z -> a}, {z -> 2 a}}

Даниэль Лихтблау Вольфрам Исследования

2 голосов
/ 18 марта 2011

Для общих функций вы не можете заставить Mathematica рассчитать его.Даже для полиномов поиск точного ответа занимает много времени.Я полагаю, что Mathematica использует своего рода устранение кванторов, когда использует Reduce, что требует времени.

Без каких-либо ограничений на ваши функции (являются ли они полиномами, непрерывными, гладкими?) Можно легко создавать функции, которые Mathematica не может упростить далее: f [x_, y_]: = Abs [Zeta [y + 0.5 + x* I]] * I

Если эта функция действительна для произвольного x и любого -0,5 <y <0 или 0

2 голосов
/ 17 марта 2011

Для полиномиальных систем (и некоторых других классов), Reduce может сделать работу.

Например,

In[1]:= Reduce[Element[{a, z}, Reals] 
           && !Element[Sqrt[(z - a) (z - 2 a)], Reals], z]
Out[1]= (a < 0 && 2a < z < a) || (a > 0 && a < z < 2a)

Этот тип подхода также работает (часто дает очень сложные решениядля функций с большим количеством сечений ветвления) для других комбинаций элементарных функций, которые я проверил.

Чтобы найти сечения ветвей (в отличие от простого класса точек ветвления, которые вас интересуют), в общем, я незнать о хорошем подходе.Лучшее место, чтобы найти подробные соглашения, которые использует Mathematica, - на сайте functions.wolfram .

Я помню, как читал хорошую статью об этом некоторое время назад ... Я попробуючтобы найти его ...


Это верно!Самый простой подход, который я видел для анализа среза ветвей, использует число раскручивания .Об этом в журнале «Искусственный интеллект и символические вычисления» есть статья « Рассуждение об элементарных функциях комплексного анализа ».Его и подобные статьи можно найти на домашней странице одного из авторов: http://www.apmaths.uwo.ca/~djeffrey/offprints.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...