Подтвердить что ты не робот

Построить сложную функцию в Mathematica

Как я могу сделать графику Mathematica, которая копирует поведение complex_plot в sage? т.е.

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

Вот пример (украденный у М. Хэмптона Нейтральные дрифты) дзета-функции с наложенными контурами абсолютного значения:

zeta function complex_plot

На странице документации Mathematica Функции сложных переменных в ней говорится, что вы можете визуализировать сложные функции, используя ContourPlot и DensityPlot "потенциально окраска по фазе". Но проблема заключается в обоих типах графиков, ColorFunction принимает только одну переменную, равную контуру или плотности в точке, - поэтому кажется, что невозможно сделать цвет фазой/аргументом при построении абсолютного значения. Обратите внимание, что это не проблема с Plot3D, где все 3 параметра (x,y,z) передаются в ColorFunction.

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

Кроме того, у меня есть одно решение ниже (которое фактически использовалось для создания некоторых графических объектов, используемых в Википедии), но оно определяет довольно низкую функцию уровня и Я думаю, что это должно быть возможно с помощью функции высокого уровня, например ContourPlot или DensityPlot. Не то, чтобы это не мешало вам использовать ваш любимый подход, который использует более низкую конструкцию!


Изменить: В журнале Mathematica появились интересные статьи Майкла Тротта:
Визуализация поверхностей Римана алгебраических функций, IIa, IIb, IIc, IId.
Визуализация поверхностей Римана демонстрация.
Возвращение поверхностей Римана (обновления для Mma v6)

Конечно, Майкл Тротт написал путеводители Mathematica, которые содержат много красивой графики, но, похоже, отстают от ускоренного выпуска Mathematica расписание!

4b9b3361

Ответ 1

Здесь моя попытка. Я немного раскрасил цветную функцию.

ParametricPlot[
 (*just need a vis function that will allow x and y to be in the color function*)
 {x, y}, {x, -6, 3}, {y, -3, 3},

 (*color and mesh functions don't trigger refinement, so just use a big grid*)
 PlotPoints -> 50, MaxRecursion -> 0, Mesh -> 50,

 (*turn off scaling so we can do computations with the actual complex values*)
 ColorFunctionScaling -> False,

 ColorFunction -> (Hue[
     (*hue according to argument, with shift so arg(z)==0 is red*)
     Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5], 1,

     (*fudge brightness a bit: 
       0.1 keeps things from getting too dark, 
       2 forces some actual bright areas*)
     Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &),

 (*mesh lines according to magnitude, scaled to avoid the pole at z=1*)
 MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},

 (*turn off axes, because I don't like them with frames*)
 Axes -> False
 ]

complex plot

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

Ответ 2

Здесь моя вариация на функцию, указанную Axel Boldt, которая была вдохновлена ​​Ян Хоманн. Обе страницы, связанные с страницами, имеют приятную графику.

ComplexGraph[f_, {xmin_, xmax_}, {ymin_, ymax_}, opts:OptionsPattern[]] := 
 RegionPlot[True, {x, xmin, xmax}, {y, ymin, ymax}, opts, 
  PlotPoints -> 100, ColorFunctionScaling -> False,
  ColorFunction -> Function[{x, y}, With[{ff = f[x + I y]}, 
    Hue[(2. Pi)^-1 Mod[Arg[ff], 2 Pi], 1, 1 - (1.2 + 10 Log[Abs[ff] + 1])^-1]]]
 ]

Затем мы можем сделать график без контуров, запустив

ComplexGraph[Zeta, {-7, 3}, {-3, 3}]

Zeta without contours

Мы можем добавлять контуры путем копирования Brett с использованием и отображения определенной сетки в ComplexGraph:

ComplexGraph[Zeta, {-7, 3}, {-3, 3}, Mesh -> 30, 
 MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},
 MeshStyle -> {{Thin, Black}, None}, MaxRecursion -> 0]

или путем комбинирования с контурным графиком, например

ContourPlot[Abs[Zeta[x + I y]], {x, -7, 3}, {y, -3, 3}, PlotPoints -> 100,
 Contours -> [email protected][-7, 1, .25], ContourShading -> None];
Show[{ComplexGraph[Zeta, {-7, 3}, {-3, 3}],%}]

with contours

Ответ 3

Не правильный ответ по двум причинам:

  • Это не то, что вы просили
  • Я бесстыдно использую код Бретта

В любом случае, для меня гораздо понятнее интерпретировать (яркость... ну, просто яркость):

enter image description here

Код Бретта почти не поврежден:

Plot3D[
 Log[Abs[Zeta[x + I y]]], {x, -6, 3}, {y, -3, 3},
 (*color and mesh functions don't trigger refinement,so just use a big grid*)
 PlotPoints -> 50, MaxRecursion -> 0, 
 Mesh -> 50, 
 (*turn off scaling so we can do computations with the actual complex values*)
 ColorFunctionScaling -> False, 
 ColorFunction -> (Hue[
     (*hue according to argument,with shift so arg(z)==0 is red*)
     Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5], 
     1,(*fudge brightness a bit:
     0.1 keeps things from getting too dark,
     2 forces some actual bright areas*)
     Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &),
     (*mesh lines according to magnitude,scaled to avoid the pole at z=1*)
     MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &},
     (*turn off axes,because I don't like them with frames*)
     Axes -> False]