Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/76: Рейтинг темы: голосов - 76, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82

Построение графика в комплексной плоскости (MatPlotLib)

18.10.2015, 23:10. Показов 15730. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Такая проблема: нужно нарисовать график функции w(s) = 1/(1 + s). (Это годограф апериодического звена, но это не важно)

В данном случае s - это произведение мнимой единицы на какую-то переменную omega. Нарисовать нужно в комплексной плоскости.
Вопрос: где у меня ошибка в коде?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from numpy import *
import matplotlib.pyplot as plt
plt.axis([-10., -10., -10., 10.])
omega = linspace(-10, 10, 181)
s = 1j * omega
w = 1/(1 + s)
plt.plot(omega, w, 'g--', label = 's(w)')
 
plt.xlabel('Real')
plt.ylabel('Imaginary')
plt.title('Graphik')
plt.legend()
plt.show()
Добавлено через 1 час 25 минут
Час гугления ничего мне не дал, посему решил упростить вопрос: а как вообще в питоне рисовать в комплексных координатах?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2015, 23:10
Ответы с готовыми решениями:

Построение графика с matplotlib
Не могу разобраться как построить график. График должен выглядеть как на фотографии. Пытался написать код, но что-то не догоняю ...

Ускорение обновления графика matplotlib с использованием matplotlib.animation
Всем добрый день. Я пытаюсь оптимизировать вывод графиков matplotlib в режиме реального времени. Пробовал реализовать через plt.plot и...

Построение графика через Matplotlib
Traceback (most recent call last): File "C:\Users\admin\Desktop\регресия\Regressia__kopia.py", line 8, in <module> import...

10
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
19.10.2015, 08:01
Лучший ответ Сообщение было отмечено Timebird как решение

Решение

А как вы себе вообще это представляете?
Две действительные координаты у аргумента, две у функции - в итоге получается четыре.
То есть для "честного" отображения вам понадобится четырёхмерное пространство.

Его изобразить не получится, поэтому надо как-то выкручиваться, делать "срезы".
Когда я изучал ТФКП в институте, там в учебнике использовалось отображение через два обычных 3д-графика. По плоскости XY аргумент, по Z - на одном графике мнимая часть, на другом - действительная.

Можно выкрутится - например, я когда-то сам придумал отображать "сдвигом" сетки. Берём участок сетки, для каждой точки (x,y) наносим на плоскость её функцию. Плохо, что аргумент тут на графике не видать, только если вручную написать. Но картинки красивые.

Так что тут общего способа нет.
1
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
19.10.2015, 15:16  [ТС]
Спасибо, я Вас понял). Вместе с задачей давалась схематичная картинка, которая должна получиться. Там оси просто помечены как Re и Im, так что склоняюсь к тому, что имелась в виду ось Z

Добавлено через 3 часа 17 минут
Тем не менее. Для оси Z как строить, чтобы по абсциссам откладывались действительные числа, а по ординатам - мнимые?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.10.2015, 08:49
Не знаю. Говорят об абсциссах и ординатах обычно для 2д.
Если я правильно понял, у вас там два графика должно было даваться. В одном по Z - действительные, в другом - мнимые.
0
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
20.10.2015, 12:58  [ТС]
Вы правы! Забил тут эту формулу в wolfram - действительно, два. Сверил.
Получилось, что график, листинг которого выше - это график для действительной части.
А как тогда мнимую построить? Что нужно изменить в коде?
График на вольфраме
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.10.2015, 13:06
Не поленился, посмотрел ваш код
Первый раз увидел запись "1j". Неудивительно, просто с комплексными числами не работал.
У комплексных чисел в numpy есть атрибуты - real и imag.

Кроме того, у вас график 2д. А надо 3д.
1
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
20.10.2015, 18:44  [ТС]
Запустил тут код в первом посте, а он бред какой-то показывает. Видимо, по ошибке вставил старье.

Не по теме:

Неделю просто уже мучаюсь над этой штукой, если не больше.


Вот здесь верная действительная часть:
Python
1
2
3
4
5
6
7
8
9
10
from numpy import *
import matplotlib.pyplot as plt
 
plt.axis([-4., 4, -4., 4.])
omega = linspace(-4, 4, 251)
T = 1
j = complex(0, 1)
w = 1/(j*omega*T + 1)
plt.plot(omega, w, label='s(w)')
plt.show()
Спасибо, попробую тогда изменить на 3д и отпишусь!

Добавлено через 3 часа 34 минуты
В 3Д получить график не смог, зато получилось зарисовать мнимую часть.
Итого - как-то вот так:


Python
1
2
3
4
5
6
7
8
9
10
11
12
from numpy import *
import matplotlib.pyplot as plt
 
plt.axis([-4., 4, -4., 4.])
omega = linspace(-4, 4, 251)
T = 1
j = complex(0, 1)
w = 1/(j*omega*T + 1)
plt.plot(omega, w, label='s(w) -- REAL')
plt.plot(omega, w.imag, label='s(w) -- IMAGINARY')
plt.legend()
plt.show()
Добавлено через 1 час 54 минуты
Мда, а теперь есть загвоздка, как графики и оси местами поменять.
То есть по идее нужно, чтобы мы откладывали по действительной и мнимой осям функцию w(omega)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
21.10.2015, 09:10
А это точно то, что вам нужно?
У вас частный случай, действительная часть = 0. В общем случае такое не проканает. Надо 3д рисовать.
0
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
21.10.2015, 23:56  [ТС]
Вышло вот так.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
import numpy as np
 
def func(a):
    for x in range(len(a)):
        plt.plot([0, a[x].real], [0, a[x].imag], 'ro-', label='python')
    limit=np.max(np.ceil(np.absolute(a))) # set limits for axis
    plt.xlim((-limit,limit))
    plt.ylim((-limit,limit))
    plt.ylabel('Imaginary')
    plt.xlabel('Real')
    plt.show()
 
omega = np.linspace(-4, 4, 251)
a = 1/(1 + 1j*omega)
func(a)
Миниатюры
Построение графика в комплексной плоскости (MatPlotLib)  
0
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 82
22.10.2015, 00:02  [ТС]
Кстати! Очень нужно срочно. Есть ли функция в Python для того, чтобы по оси абсцисс откладывались, допустим, обычные числа, а по оси ординат -- углы в градусах?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
22.10.2015, 12:07
Откладывайте, в чём проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2015, 12:07
Помогаю со студенческими работами здесь

Построение автообновляемого не стандартного графика (matplotlib)
Имеется Arduino с подключенным к ней датчиком, она непрерывно посылает по serial порту данные в виде b'000'\r\n. Есть функция, которая...

Построение графика в комплексной плоскости
Собственно возникла сабжевая проблемка. Нижеприведённый текст используется для построения АЧХ акселерометра unit Unit1; interface...

Построение 2-х окружностей в комплексной плоскости
Задача просто элементарная Дана "средняя" окружность, она лежит на мнимой оси координат, т.е координата х центра окружности =0, а...

Построение множества на комплексной плоскости
Дано такое множество: |z - 2 + 3i| = |z + 2 + 4i| Задание звучит так: Построить множество на комплексной плоскости, записав его уравнение...

Построение графика нормального распределения matplotlib
Здравствуйте, хотел построить график нормального распределения по данным, но он выглядит странновато, не могли бы помочь исправить? Мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru