用户:记得开心1点-yGo查看:2 回复:2 评论:2 创建时间:2023-06-20T12:01:24
【作品展示】

【作品介绍】
编写兼构思:符海洲(高一)一元二次函数,高次函数,反比例等
可以自行更换自变量,因变量
有交点坐标,顶点坐标,对称轴,顶点式,交点式,韦达定理,
可以称之“二次函数杀手”
微信交流:lovediaoTang
原创不易,转载请联系
【作品源代码】
import numpy as np
import matplotlib.pyplot as plt
print('该程序最多可作出一元n次及常值函数的图像')
print('例如:反比例函数,一元三次三项函数,一元二次函数,常值函数等...')
print("注意自变量和因变量不能用相同字母")
print(" 例如:x,y,z等(任意字母均可)")
X = input("输入自变量=")
Y = input("输入因变量=")
plt.xlabel(X)
plt.ylabel(Y)
print(' 提示:最高次数为0时为常值函数,为-1时为反比例函数,为2时为二次函数,为100时为百次函数')
i = eval(input('输入您想要画出的函数图像的最高次数='))
if i == 2:
print('当前函数为:一元二次函数')
print(" 提示:abc任意实数均可,但是a不能等于0")
a = eval(input("二次项系数a="))
b = eval(input("一次项系数b="))
c = eval(input("常数项c="))
A = b*b-4*a*c
print("---------------------------------------------------------------")
if A == 0:
X1 = (-b-(b*b-4*a*c)**(1/2))/(2*a)
print("与", X, "轴有一个交点,坐标为(", X1, ",0)")
X3 = -b/(2*a)
X4 = (4*a*c-b*b)/(4*a)
X5 = -b/a
X6 = c/a
print("---------------------------------------------------------------")
print(X, "轴交点=", X1)
print("---------------------")
print("对称轴直线", X, "=", X3)
if a < 0:
print("最高点", Y, "取值=", X4)
elif a > 0:
print("最低点", Y, "取值=", X4)
print("---------------------")
print("韦达定理", X, "₁+", X, "₂=", X5)
print("韦达定理", X, "₁x", X, "₂=", X6)
print("---------------------------------------------------------------")
if a != 1:
if X1 > 0:
print("交点式", Y, "=", a, X, "(", X, "-", X1, ")")
elif X1 < 0:
print("交点式", Y, "=", a, X, "(", X, X1, ")")
else:
if X1 > 0:
print("交点式", Y, "=", X, "(", X, "-", X1, ")")
elif X1 < 0:
print("交点式", Y, "=", X, "(", X, X1, ")")
print("---------------------------------------------------------------")
if a != 1:
if X3 > 0:
print("顶点式", Y, "=", a, "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", a, "(", X, X3, ")²+", X4)
else:
if X3 > 0:
print("顶点式", Y, "=", "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", "(", X, X3, ")²+", X4)
print("---------------------------------------------------------------")
print("顶点(", X3, ",", X4, ")")
if a > 0:
print("开口向上")
elif a < 0:
print("开口向下")
print("———————————————————————————————————————————————————————————————")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中与横轴有一个交点的一元二次函数图像')
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
plt.xticks([X3-10,X3-9,X3-8,X3-7,X3-6,X3-5,X3-4,X3-3,X3-2,X3-1, X3+0, X3+1, X3+2, X3+3, X3+4, X3+5, X3+6, X3+7, X3+8, X3+9, X3+10])
plt.yticks([X4-10,X4-9,X4-8,X4-7,X4-6,X4-5,X4-4,X4-3,X4-2,X4-1,X4+0,X4+1,X4+2,X4+3,X4+4,X4+5,X4+6,X4+7,X4+8,X4+9,X4+10])
plt.plot(data, a*data**2+b*data+c)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
plt.scatter(data2-data2+X3, data2, c='b', marker='.')
plt.scatter(X3, X4, c='r', marker='o')
dingdian = X3, X4
plt.legend(['f(x)', "横轴", '纵轴', '对称轴(即直线X=顶点横坐标)', dingdian])
plt.show()
elif A > 0:
X1 = (-b-(b*b-4*a*c)**(1/2))/(2*a)
X2 = (-b+(b*b-4*a*c)**(1/2))/(2*a)
print("与", X, "轴有两个交点,坐标分别为(", X1, ",0),(", X2, ",0)")
X3 = -b/(2*a)
X4 = (4*a*c-b*b)/(4*a)
X5 = -b/a
X6 = c/a
print("---------------------------------------------------------------")
print(X, "轴左交点=", X1)
print(X, "轴右交点=", X2)
print("---------------------")
print("对称轴直线", X, "=", X3)
if a < 0:
print("最高点", Y, "取值=", X4)
elif a > 0:
print("最低点", Y, "取值=", X4)
print("---------------------")
print("韦达定理", X, "₁+", X, "₂=", X5)
print("韦达定理", X, "₁x", X, "₂=", X6)
print("---------------------------------------------------------------")
if a != 1:
if X1 > 0:
if X2 > 0:
print("交点式", Y, "=", a, "(", X, "-", X1, ")(", X, "-", X2, ")")
elif X2 < 0:
print("交点式", Y, "=", a, "(", X, "-", X1, ")(", X, X2, ")")
elif X1 < 0:
if X2 > 0:
print("交点式", Y, "=", a, "(", X, X1, ")(", X, "-", X2, ")")
elif X2 < 0:
print("交点式", Y, "=", a, "(", X, X1, ")(", X, X2, ")")
else:
if X1 > 0:
if X2 > 0:
print("交点式", Y, "=", "(", X, "-", X1, ")(", X, "-", X2, ")")
elif X2 < 0:
print("交点式", Y, "=", "(", X, "-", X1, ")(", X, X2, ")")
elif X1 < 0:
if X2 > 0:
print("交点式", Y, "=", "(", X, X1, ")(", X, "-", X2, ")")
elif X2 < 0:
print("交点式", Y, "=", "(", X, X1, ")(", X, X2, ")")
print("---------------------------------------------------------------")
if a != 1:
if X3 > 0:
print("顶点式", Y, "=", a, "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", a, "(", X, X3, ")²+", X4)
else:
if X3 > 0:
print("顶点式", Y, "=", "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", "(", X, X3, ")²+", X4)
print("---------------------------------------------------------------")
print("顶点(", X3, ",", X4, ")")
if a > 0:
print("开口向上")
elif a < 0:
print("开口向下")
print("———————————————————————————————————————————————————————————————")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中与横轴有俩个交点的一元二次函数图像')
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
plt.xticks([X3-10,X3-9,X3-8,X3-7,X3-6,X3-5,X3-4,X3-3,X3-2,X3-1,X3+0,X3+1,X3+2,X3+3,X3+4,X3+5,X3+6,X3+7,X3+8,X3+9,X3+10])
plt.yticks([X4-10,X4-9,X4-8,X4-7,X4-6,X4-5,X4-4,X4-3,X4-2,X4-1,X4+0,X4+1,X4+2,X4+3,X4+4,X4+5,X4+6,X4+7,X4+8,X4+9,X4+10])
plt.plot(data, a*data**2+b*data+c)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
plt.scatter(data2-data2+X3, data2, c='b', marker='.')
plt.scatter(X3, X4, c='r', marker='o')
plt.scatter(X1, 0, c='g', marker='o')
plt.scatter(X2, 0, c='g', marker='o')
dingdian = X3, X4
zjd = X1, 0
yjd = X2, 0
plt.legend(['f(x)', "横轴", '纵轴', '对称轴(即直线X=顶点横坐标)', dingdian, zjd, yjd])
plt.show()
else:
print("与", X, "轴无交点")
X3 = -b/(2*a)
X4 = (4*a*c-b*b)/(4*a)
print("---------------------------------------------------------------")
print("对称轴直线", X, "=", X3)
if a < 0:
print("最高点", Y, "取值=", X4)
elif a > 0:
print("最低点", Y, "取值=", X4)
print("---------------------------------------------------------------")
if a != 1:
if X3 > 0:
print("顶点式", Y, "=", a, "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", a, "(", X, X3, ")²+", X4)
else:
if X3 > 0:
print("顶点式", Y, "=", "(", X, "-", X3, ")²+", X4)
elif X3 < 0:
print("顶点式", Y, "=", "(", X, X3, ")²+", X4)
print("---------------------------------------------------------------")
print("顶点(", X3, ",", X4, ")")
if a > 0:
print("图像开口向上")
elif a < 0:
print("图像开口向下")
print("———————————————————————————————————————————————————————————————")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中与横轴没有交点的一元二次函数图像')
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
plt.xticks([X3-10,X3-9,X3-8,X3-7,X3-6,X3-5,X3-4,X3-3,X3-2,X3-1,X3+0,X3+1,X3+2,X3+3,X3+4,X3+5,X3+6,X3+7,X3+8,X3+9,X3+10])
plt.yticks([X4-10,X4-9,X4-8,X4-7,X4-6,X4-5,X4-4,X4-3,X4-2,X4-1,X4+0,X4+1,X4+2,X4+3,X4+4,X4+5,X4+6,X4+7,X4+8,X4+9,X4+10])
plt.plot(data, a*data**2+b*data+c)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
plt.scatter(data2-data2+X3, data2, c='b', marker='.')
plt.scatter(X3, X4, c='r', marker='o')
dingdian = X3, X4
plt.legend(['f(x)', "横轴", '纵轴', '对称轴(即直线X=顶点横坐标)', dingdian])
plt.show()
elif i == 1:
print('当前函数为:一元一次函数')
print(" 提示:ab任意实数均可,但是a不能等于0")
b = eval(input("一次项系数a="))
c = eval(input("常数项b="))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中一次函数的图像')
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
a1 = np.arange(-10, 10, 1)
plt.xticks(a1)
plt.yticks(a1)
plt.xlabel(X)
plt.ylabel(Y)
plt.plot(data, data*b+c)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
X7 = -c/b
plt.scatter(X7, 0, c='r', marker='o')
plt.scatter(0, c, c='m', marker='o')
X8 = X7, 0
X9 = 0, c
plt.legend(['f(x)', "横轴", '纵轴', X8, X9, '1', '2', '3', '4', '5', '6'])
plt.show()
elif i == 0:
print('当前函数为:常值函数')
print(" 提示:a任意实数均可")
c = eval(input("常数项c="))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中常值函数的图像')
a1=np.arange(-10,10,1)
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
plt.xticks(a1)
plt.yticks(a1)
plt.plot(data, data-data+c)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
plt.legend(['f(x)', "横轴", '纵轴'])
plt.show()
elif i >= 3:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中高次函数的图像')
a5 = np.arange(-10, 10, 1)
plt.xticks(a5)
plt.yticks(a5)
data = np.arange(-10, 10, 0.1)
data1 = np.arange(-100, +100, 0.1)
data2 = np.arange(-100, +100, 8)
print('当前函数为:高次函数 即:一元', i, '次函数')
print(" 提示:系数任意实数均可,但是最高次系数不能等于0")
a1 = 0
a2 = []
x = eval(input('最高次项系数='))
print('tips:第', i, '项系数输入为PythonBUG不影响结果,可以随意输入')
while a1 < i:
a1 = a1+1
print('第', a1, '项系数请输入 (注意:此项系数次数为', i-a1, ')')
a2.append(x)
x = eval(input('系数='))
a4 = eval(input("常数项="))
A = 0
for a3 in a2:
for i1 in range(i, 0,-1):
A = a3*data**(i1)+A
plt.plot(data, A)
plt.plot(data, data-data, color='k', linewidth=0.3)
plt.plot(data1-data1, data1, color='k', linewidth=0.3)
plt.legend(['f(x)', "横轴", '纵轴'])
plt.show()
elif i <0:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('平面直角坐标系中一般函数的图像')
a1 = np.arange(-0.8, 0.8, 0.2)
data6 = np.arange(-100, 100, 10)
plt.xticks(a1)
plt.yticks(data6)
print('当前函数为:', -i, '次反比例函数')
print(" 提示:系数任意实数均可,但是不能等于0")
x = eval(input('系数='))
data3=np.arange(0.01,1,0.001)
plt.plot(data3, (x/data3)**(-i))
data4=np.arange(-1,-0.01,0.001)
plt.plot(data4, (x/data4)**(-i))
data5= np.arange(-0.8, 0.8, 0.1)
plt.plot(data5, data5-data5, color='k', linewidth=1)
plt.plot(data6-data6, data6, color='k', linewidth=1)
plt.legend(['f(x)且x>0','f(x)且x<0', "横轴", '纵轴'])
plt.show()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn