Matplotlib — передача уравнения через параметр в функцию

avatar
DisastrousPhoto
8 августа 2021 в 21:52
127
1
-2

Я пишу программу, в которой пользователь вводит математическое уравнение (например, x^2 + 2x + 2), а функция plotFunction отображает его на графике с помощью matplotlib. Когда я ввожу такой параметр, как "x2", он возвращает ошибку: ValueError: недопустимая строка формата "x2"; два символа маркера

import matplotlib.pyplot as plt
import numpy as np
class Plotter:
    def __init__(self):
        pass
        
                
    def plotFunction(self, func):     
        x = np.arange(-100, 100)
       
        y = func
        plt.plot(x, y)
        plt.show()

p1 = Plotter()
p1.plotFunction("x**2")
Источник
sai
8 августа 2021 в 22:34
0

Прежде всего, добро пожаловать в SO. Здесь довольно много неправильных вещей. Вам следует поработать над некоторыми основами и взглянуть на библиотеку Python для символьной математики SymPy. Вы можете добиться чего-то вроде того, что хотите, с помощью этой библиотеки.

Ответы (1)

avatar
Tony Dean
8 августа 2021 в 23:34
0

Это не совсем идеально, однако то, что я придумал, работает прямо сейчас. импортировать matplotlib.pyplot как plt

def plot_func():
    three = float(input("X ** 3:\n"))
    two = float(input("X ** 2:\n"))
    one = float(input("X:\n"))
    b = float(input("B:\n"))
    n = -10
    x = []
    y = []
    while n <= 10:
        x.append(n)
        y.append( (three * n) ** 3 + (two * n) ** 2 + (one * n) + b)
        n += 1
    return x, y

x, y = plot_func()
plt.scatter(x, y)
plt.show()

Я в основном просто разбил разные части, и он будет работать с любой функцией до x ** 3, и, конечно, вы можете добавить больше. Просто сделайте свой x ** 3 равным 0, если у вас есть только функция x ** 2. Опять же, не идеально, но будет работать, пока вы не придумаете что-нибудь получше.