简单Python小程序:求根公式求一元二次方程式实数域的根

一、算法的构思
一元二次方程的一般式:ax^2+bx+c = 0
我们知道,一元二次方程有解(根)的充要条件是:b^2-4ac>=0。如果不满足此关系式,那么方程无解。接着当方程有解的时候又出现了两种情况:1.有两个重根(大小相等的根)或者两个大小不等的根,为了是程序更加完善还要考虑到a =0的情况,即此时不能看做一元二次方程而只能将其看作一元一次方程,本程序运用求根公式来实现功能,有兴趣的伙计可以试试下面给出的韦达定理实现功能。
求根公式:
在这里插入图片描述
二、全部代码

'''
1.本程序用来解决一元二次方程在实数域上求根的问题
2.可按需求最大/最小值及对称轴,
3.可以绘制函数图像
'''
'''
.duichenzhou属性用来求解对称轴x轴坐标
.max_min属性用来求函数最大最小值
.x1/x2属性用来求解方程的两个根
######
使用方法
1.首先调用.calculate(a,b,c)用来计算
2.调用完成后即可调用相关属性
3.可选择.visual_image()方法进行可视化
'''
import matplotlib.pyplot as plt
import numpy as np

class L2_fun(object):
    def __init__(self):
        self.flag = True
        self.duichenzhou = 0.0
        self.max_min = 0.0
        self.x1 = 0.0
        self.x2 = 0.0
    def calculate(self,a,b,c):
        if a==0:
            self.x1 = (-c)/b
            self.x2 = self.x1
        elif (b**2-4*a*c)>=0:
            self.duichenzhou = (-b)/(2*a)
            self.x1 = (-b+np.sqrt(b**2-4*a*c))/(2*a)
            self.x2 = (-b-np.sqrt(b**2-4*a*c))/(2*a)
            if a>0:
                self.max_min = (4*a*c-b*b)/(4*a)
                print('提示:此函数开口为上,极值获取的是最小值!\n')
            if a<0:
                self.max_min = (4*a*c - b*b) /(4*a)
                print('提示:此函数开口为下,获取的是最大值!\n')
        else:
            self.flag = False
            self.duichenzhou = (-b)/(2 * a)
            self.max_min = (4*a*c-b*b)/(4*a)
            print('此方程在实数域上无解!!!\n')
            self.x1=self.x2 ='无解!'
    def visual_image(self,a,b,c):
        if self.flag==False:
            print('此方程无解,但可可视化图像!\n')
        v = int(self.duichenzhou)
        x = np.linspace(v-15,v+15,2800)
        y = a*(x**2)+b*x+c
        plt.figure(figsize=(12,8),dpi=100)
        plt.title('y = {}*(x**2)+{}*(x)+{}'.format(a,b,c),color ='r',fontsize=22)
        plt.xlabel('x',loc= 'right',fontsize = 18)
        plt.ylabel('y',loc='top',fontsize = 18)
        plt.plot(x,y,color='c',label = 'y')
        plt.grid(alpha=0.3,linestyle ='--')
        plt.legend(loc = 'best')
        plt.show()
if __name__ == '__main__':
    a,b,c = map(float,input('请以空格分隔输入3个数字,免费进行运算!\n').split())#split默认以空格进行分隔
    S = L2_fun()
    S.calculate(a,b,c)
    print(S.duichenzhou,S.x2)
    S.visual_image(a,b,c)

三、需要用到的库(必须安装)
请安装numpy、和matplotlib库
将下面两句分别复制到cmd命令中,回车运行:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
简单Python小程序:求根公式求一元二次方程式实数域的根_第1张图片
简单Python小程序:求根公式求一元二次方程式实数域的根_第2张图片

四、效果演示
欢迎大家点赞,批评指正,谢谢!!
简单Python小程序:求根公式求一元二次方程式实数域的根_第3张图片
简单Python小程序:求根公式求一元二次方程式实数域的根_第4张图片

你可能感兴趣的:(python,算法,学习)