在 matplotlib 中用输入绘制抛物线图
Graphing a parabola with inputs in matplotlib
所以我在 python 中创建了一个二次方程求解器,我想要一个图形来配合它。我希望这张图描绘抛物线。
a = 二次方程中 a 的输入
b = 二次方程中 b 的输入
c = 二次方程中 c 的输入
y = -b/2*a(矢量)
import math
a = int(input('Input a: '))
b = int(input('Input b: '))
c = int(input('Input c: '))
discrim = int((b*b) - 4*a*c)
posi = (-b + (math.sqrt(discrim)))/(2*a)
neg = (-b - (math.sqrt(discrim)))/(2*a)
if b > 0 and c > 0 and posi < 0:
posi = -posi
if neg < 0:
neg = -neg
y = -b/2*a
vector = (neg+posi)/2, y)
有了这段代码,我就有了我的 x 截距和足以创建抛物线的向量,我只是不确定如何使用 MatPlotLib 将这些值转换成图形。请提出任何问题。
我对你的代码做了一些修正。下面的代码将绘制任何抛物线。您可以在绘图中添加零点和极值点。
import matplotlib.pyplot as plt
import math
import numpy as np
a = int(input('Input a: '))
b = int(input('Input b: '))
c = int(input('Input c: '))
# calculate delta and zero points
delta = b**2 - 4*a*c
if delta > 0:
x_1 = (-b + math.sqrt(delta))/(2*a)
x_2 = (-b - math.sqrt(delta))/(2*a)
if delta == 0:
x_0 = -b/(2*a)
else:
pass
# calculate parabola extreme coordinates
p = -b/(2*a)
q = -delta/(4*a)
extreme = [p,q]
# define parabola function
def parabola(x,a,b,c):
y = a*x**2 + b*x + c
return y
# plot function
x = np.linspace(int(p)-5,int(p)+5,100)
y = parabola(x,a,b,c)
plt.plot(x,y)
plt.axhline(y=0, color='black', linestyle='-')
plt.axvline(x=0, color='black', linestyle='-')
plt.text(p-0.5, q-3, '[' + str(round(p,2)) +',' + str(round(q,2)) + ']',color='orange', fontsize=9)
plt.plot(p, q, marker="o")
if delta > 0:
plt.plot(x_1, 0, marker="o", color='green')
plt.text(x_1 - 0.5, 2, '[' + str(round(x_1,2)) + ']', color='green', fontsize=9)
plt.plot(x_2, 0, marker="o", color='green')
plt.text(x_2 - 0.5, 2, '[' + str(round(x_2,2)) + ']', color='green', fontsize=9)
if delta == 0:
plt.plot(x_0, 0, marker="o", color='green')
plt.text(x_0 - 0.5, 2, '[' + str(round(x_0,2)) + ']', color='green', fontsize=9)
plt.show()
示例结果:
所以我在 python 中创建了一个二次方程求解器,我想要一个图形来配合它。我希望这张图描绘抛物线。
a = 二次方程中 a 的输入
b = 二次方程中 b 的输入
c = 二次方程中 c 的输入
y = -b/2*a(矢量)
import math
a = int(input('Input a: '))
b = int(input('Input b: '))
c = int(input('Input c: '))
discrim = int((b*b) - 4*a*c)
posi = (-b + (math.sqrt(discrim)))/(2*a)
neg = (-b - (math.sqrt(discrim)))/(2*a)
if b > 0 and c > 0 and posi < 0:
posi = -posi
if neg < 0:
neg = -neg
y = -b/2*a
vector = (neg+posi)/2, y)
有了这段代码,我就有了我的 x 截距和足以创建抛物线的向量,我只是不确定如何使用 MatPlotLib 将这些值转换成图形。请提出任何问题。
我对你的代码做了一些修正。下面的代码将绘制任何抛物线。您可以在绘图中添加零点和极值点。
import matplotlib.pyplot as plt
import math
import numpy as np
a = int(input('Input a: '))
b = int(input('Input b: '))
c = int(input('Input c: '))
# calculate delta and zero points
delta = b**2 - 4*a*c
if delta > 0:
x_1 = (-b + math.sqrt(delta))/(2*a)
x_2 = (-b - math.sqrt(delta))/(2*a)
if delta == 0:
x_0 = -b/(2*a)
else:
pass
# calculate parabola extreme coordinates
p = -b/(2*a)
q = -delta/(4*a)
extreme = [p,q]
# define parabola function
def parabola(x,a,b,c):
y = a*x**2 + b*x + c
return y
# plot function
x = np.linspace(int(p)-5,int(p)+5,100)
y = parabola(x,a,b,c)
plt.plot(x,y)
plt.axhline(y=0, color='black', linestyle='-')
plt.axvline(x=0, color='black', linestyle='-')
plt.text(p-0.5, q-3, '[' + str(round(p,2)) +',' + str(round(q,2)) + ']',color='orange', fontsize=9)
plt.plot(p, q, marker="o")
if delta > 0:
plt.plot(x_1, 0, marker="o", color='green')
plt.text(x_1 - 0.5, 2, '[' + str(round(x_1,2)) + ']', color='green', fontsize=9)
plt.plot(x_2, 0, marker="o", color='green')
plt.text(x_2 - 0.5, 2, '[' + str(round(x_2,2)) + ']', color='green', fontsize=9)
if delta == 0:
plt.plot(x_0, 0, marker="o", color='green')
plt.text(x_0 - 0.5, 2, '[' + str(round(x_0,2)) + ']', color='green', fontsize=9)
plt.show()
示例结果: