График функции питон задача

Turtle, построение графика функции

Добрый день уважаемые форумчане! Задание гласит: Напишите код для построения графика степенной функции
(y = a*x^b) с началом координат в левой нижней четверти окна рисования так, чтобы кривая проходила практически через всё окно.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
import turtle a=int(input('Введите число a: ')) b=int(input('Введите число b: ')) x=int(input('Введите число x: ')) turtle.reset() turtle.color('#0000ff') turtle.speed(0) turtle.write('0,0') turtle.up() x=-170 y=-120 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) x=130 y=100 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) x=0 y=-100 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) turtle.down() x=0 y=100 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) turtle.up() x=-150 y=0 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) turtle.down() x=150 y=0 coords=str(x)+","+str(y) turtle.goto(x, y) turtle.write(coords) turtle.goto(-170,-120) for x in range(x): y = (a*(x**b)) turtle.write(x, y) turtle.mainloop()

Программа работает без ошибок, однако есть одна проблема, условие задание гласит, что началом координат должен служить левая нижняя четверть окна, однако задав начало координат -170, -120 происходит непонятная вакханалия в окне turtle, подскажите, как верно исправить код, чтобы график шел из начала координат.

Читайте также:  Html scroll to end

Источник

График функции питон задача

В этом листке мы будем изучать асимптотику факториалов и чисел $C_n^k$, строить графики в библиотеке matplotlib, а также рисовать фракталы черепашкой.

Библиотека matplotlib предназначена для построения практически сколь угодно сложных графиков и диаграмм. Про неё шутят, что простые вещи в ней делать просто, а сложные — . теоретически возможно.

Для установки библиотеки нужно запустить следующую программу:

import os, sys python = sys.executable user = ‘—user’ if ‘venv’ not in python else » cmd = ‘»<>» -m pip install matplotlib —upgrade <>‘.format(python, user) print(cmd) os.system(cmd)

Если в результате её запуска вывод будет примерно такой как ниже, то у вас успех!

C:\some\path\Python38\python.exe -m pip install matplotlib —upgrade —user Collecting matplotlib . что-то про downloading или Using cached . что-то ещё collecting Installing collected packages: matplotlib, что-то ещё Successfully installed что-то matplotlib-3.3.1 что-то ещё

Документация

  • Хороший русский текст, но используется чуть устаревший интерфейс: http://jenyay.net/Matplotlib/Matplotlib;
  • Оригинальная документация: http://matplotlib.org/contents.html;
  • Оригинальный tutorial: http://matplotlib.org/users/tutorials.html;
  • Галерея: http://matplotlib.org/gallery.html;
  • Подробный и обстоятельный текст про либу: https://github.com/whitehorn/Scientific_graphics_in_python;
  • PythonDataScienceHandbook, по-английски, но достаточно просто и последовательно: https://jakevdp.github.io/PythonDataScienceHandbook/04.00-introduction-to-matplotlib.html;

Замечания по вводу-выводу

Каждая программа должна начинаться со строк с импортированием matplotlib:

import matplotlib.pyplot as plt

Важно, чтобы линии добавлялись на график в той же последовательности, в которой они указаны в условиях.

Первые простые графики

Вот типичный простой пример программы, которая строит простой график:

import matplotlib.pyplot as plt # Создаём картинку fig, а на ней создаём один холст (координатные оси) ax для графиков fig, ax = plt.subplots() xx = [0, 1, 2, 3, 4] # Создаём массив x-координат yy = [5, -3, 0, 1, 4] # Создаём массив y-координат ax.plot(xx, yy) # Добавляем графики plt.show() # Выводим на экран

Разберём этот пример подробно.
import matplotlib.pyplot as plt — это де-факто общепринятый стандарт по импортированию этой библиотеки.
fig, ax = plt.subplots() — мы создаём картинку (figure) и на ней одну ось координат (axes). Теоретически мы можем одновременно работать с несколькими картинками, на каждой из которых будет по несколько разных осей координат. Обычно с переменной fig не требуется ничего делать, и всё рисование производится в ax .
xx = [0, 1, 2, 3, 4]; yy = [5, -3, 0, 1, 4] — здесь мы создаём списки $x$- и $y$-координат графика. Важно, что количество точек в этих списках должно быть одинаковым.
ax.plot(xx, yy) — здесь мы добавляем в координатную сетку ax график. Можно добавлять сразу несколько графиков, вызывая ax.plot несколько раз.
plt.show() — запуск окна, в котором отображается наша картина.

A: Арифметическая прогрессия

Напишите функцию linspace , принимающую на вход действительные числа $x$, $y$ и натуральное число $n$, и возвращающую список с арифметической прогрессией $a_1, a_2, \ldots, a_n$, в которой $a_1 = x$ и $a_n = y$.

Этой функций удобно пользоваться для построение графиков функций.

Нужно сдать только тело функции. В конец программы будет добавлено:

x, y, n = input().split() print(*linspace(float(x), float(y), int(n)))

Источник

Построение графиков функций на Python. Pygame

Привет, Хабр! Я хотел бы рассказать, как написать программу для построения графиков функций. Программу будем писать на Python с использованием библиотеки PyGame.

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

Основной алгоритм

Основной алгоритм заключается в вычислении функции на интервале: [-10,10]. Так как целых значений немного, то будем увеличивать параметр с малым шагом, к примеру 0.0001.

Функция имеет вид y = f(x). Формат ввода, соответственно, string(так как пользователь вводить функцию с использованием символов).

Получается следующий алгоритм:

Пишем код

Для начала следует импортировать библиотеки. Это библиотека PyGame, с её помощью будем рисовать. И библиотека math, она добавляет больше математических функций(sin, cos, sqrt и т.д.).

from math import * import pygame 

Теперь напишем несколько системных строк, которые создадут нам окно, в котором будет находится система координат.

pygame.init() # запустить pygame screen = pygame.display.set_mode((500,500)) # создать окно 500x500 pygame.display.set_caption("func_graph") # название окна all_sprites=pygame.sprite.Group() # группа спрайтов clock = pygame.time.Clock() running = True fps=60

Создадим класс, который будет рисовать координатные оси(ординат и абсцисс).

class Line(pygame.sprite.Sprite): def __init__(self,pos,x,y): pygame.sprite.Sprite.__init__(self) if pos=="x": # ось абсцисс self.image=pygame.Surface((3,400)) # линия 3x400 self.image.fill((0,0,0)) # закрасить черным цветом self.rect = self.image.get_rect() self.rect.centerx = x # центр по x self.rect.centery = y # центр по y elif pos=="y": # ось ординат self.image=pygame.Surface((400,3)) # линия 3x400 self.image.fill((0,0,0)) # закрасить черным цветом self.rect = self.image.get_rect() self.rect.centerx = x # центр по x self.rect.centery = y # центр по y

Теперь класс для точки, так как точек будет очень много, то график будет казаться сплошным.

class Dot(pygame.sprite.Sprite): def __init__(self,x,y): pygame.sprite.Sprite.__init__(self) self.image=pygame.surface.Surface((5,5)) # точка 5x5 self.image.fill((0,0,0)) # закрасить черным цветом self.rect=self.image.get_rect() self.rect.centerx=x # центр по x self.rect.centery=y # центр по y

Теперь приступим к основному алгоритму. Функцию считает модуль eval, а с ним нужно быть очень аккуратным в плане ввода(т.е. «x» желательно брать в скобки, чтобы модуль учитывал знак минус, степень — это два знака умножить(**), и т.д.). Конечно, можно сделать так, чтобы ввод пользователя преобразовывался в нормальный вид, это аналогично части с заменой «x» на значение(строка 6), но и тут есть свои проблемы.

def Calc(func): i=-10 # начальное значение аргумента while i

Теперь заключительная часть кода.

func = str(input("y = ")) # ввод данных calc = Calc(func) # вызвать функцию Calc от func line = Line("y",250,250) # добавить ось ординат all_sprites.add(line) line1 = Line("x",250,250) # добавить ось абсцисс all_sprites.add(line1) while running: # основной цикл clock.tick(fps) for event in pygame.event.get(): if event.type == pygame.QUIT: # если закрыл окно - завершить программу running = False screen.fill((255,255,255)) # залить поле белым цветом all_sprites.draw(screen) # нарисовать все спрайты(т.е. наши точки) pygame.display.flip() pygame.quit()
from math import * import pygame pygame.init() screen = pygame.display.set_mode((500,500)) pygame.display.set_caption("func_graph") all_sprites=pygame.sprite.Group() clock = pygame.time.Clock() running = True fps=60 class Line(pygame.sprite.Sprite): def __init__(self,pos,x,y): pygame.sprite.Sprite.__init__(self) if pos=="x": self.image=pygame.Surface((3,400)) self.image.fill((0,0,0)) self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y elif pos=="y": self.image=pygame.Surface((400,3)) self.image.fill((0,0,0)) self.rect = self.image.get_rect() self.rect.centerx = x self.rect.centery = y class Dot(pygame.sprite.Sprite): def __init__(self,x,y): pygame.sprite.Sprite.__init__(self) self.image=pygame.surface.Surface((5,5)) self.image.fill((0,0,0)) self.rect=self.image.get_rect() self.rect.centerx=x self.rect.centery=y def Calc(func): i=-10 while i

Итоги

В заключение можно сказать, что получилась простая программа, которая справляется со своими функциями, Ба-Дум-Тсс. Конечно, здесь есть свои проблемы(в основном - модуль eval), но главная задача статьи - понять, как компьютер строит графики.

P.S. Код ещё можно доработать. К примеру, я доработал программу до discord бота. Если будет интересно, то я могу написать об этом. Так как я заметил, что на Хабре есть только ознакомительные статьи про ботов.

Источник

Оцените статью