猫史档案馆


【Python作品分享】函数绘图1.1.0

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


【作品展示】

center_image

 

【作品介绍】

编写兼构思:符海洲(高一)

一元二次函数,高次函数,反比例等

可以自行更换自变量,因变量

有交点坐标,顶点坐标,对称轴,顶点式,交点式,韦达定理,

可以称之“二次函数杀手”

微信交流: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


回复

上一页1 页 / 共 1下一页
mornwindmornwind

sympy了解一下

点赞0


评论


mornwindmornwind

你不如挑战一下自己,基于现在的程序整个求导(doge)或者单调区间(?)

点赞0


评论