精华内容
下载资源
问答
  • 共回答了15个问题采纳率:80%import java.util.*;class First{public static void main(String[] args)...System.out.println("请输入一元二次方程的三个系数a,b,c的值");System.out.println("请输入系数a的值");dou...

    共回答了15个问题采纳率:80%

    import java.util.*;

    class First

    {

    public static void main(String[] args)

    {

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入一元二次方程的三个系数a,b,c的值");

    System.out.println("请输入系数a的值");

    double a = sc.nextDouble();

    System.out.println("请输入系数b的值");

    double b = sc.nextDouble();

    System.out.println("请输入系数c的值");

    double c = sc.nextDouble();

    double deta = b*b-4*a*c;

    if(deta>=0)

    {

    System.out.println("该方程有实数解!");

    double x1 = (-b+Math.sqrt(deta))/(2*a);

    double x2 = (-b-Math.sqrt(deta))/(2*a);

    System.out.println("x1="+x1+",x2="+x2);

    }else

    {

    System.out.println("该方程有虚数解!");

    double shibu = -b/(2*a);

    double xubu = Math.sqrt(-deta)/(2*a);

    System.out.println("x1="+shibu+"+"+xubu+"i");

    System.out.println("x2="+shibu+"-"+xubu+"i");

    }

    }

    }

    1年前

    3

    展开全文
  • 一元二次方程求解

    2014-05-20 20:42:38
    一元二次方程求解,允许有复数解。c语言 代码
  • 一元二次方程

    千次阅读 2018-10-26 13:29:49
    一元二次方程 本题目要求一元二次方程,结果保留2位小数。 输入格式: 输入在一行中给出3个浮点系数a、b、c,中间用空格分开。 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数,...

    求一元二次方程的根
    本题目要求一元二次方程的根,结果保留2位小数。
    输入格式:
    输入在一行中给出3个浮点系数a、b、c,中间用空格分开。
    输出格式:
    根据系数情况,输出不同结果:
    1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
    2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
    3)如果方程只有一个根,则直接输出此根;
    4)如果系数都为0,则输出"Zero Equation";
    5)如果a和b为0,c不为0,则输出"Not An Equation"。
    输入样例1:
    2.1 8.9 3.5
    输出样例1:
    -0.44
    -3.80
    输入样例2:
    1 2 3
    输出样例2:
    -1.00+1.41i
    -1.00-1.41i
    输入样例3:
    0 2 4
    输出样例3:
    -2.00
    输入样例4:
    0 0 0
    输出样例4:
    Zero Equation
    输入样例5:
    0 0 1
    输出样例5:
    Not An Equation

    #include<stdio.h>
    #include<math.h>
    int main()
    {
      double a,b,c,x1,x2,d1,y1,y2,e,f,z;
      scanf("%lf%lf%lf",&a,&b,&c);
      if(b*b>4*a*c&&a!=0&&b!=0&&c!=0)
      {
        x1=(-b+sqrt(b*b-4*a*c))/(2*a);
        x2=(-b-sqrt(b*b-4*a*c))/(2*a);
        printf("%.2lf\n%.2lf\n",x1,x2);
      }
      else if(b*b==4*a*c&&a!=0)
      {
    
       printf("%.2lf",-b/(2*a));
      }
      else if(a==0&&b!=0)
      {
        d1=-c/b;
        printf("%.2lf",d1);
      }
      else if(b*b<4*a*c&&b!=0)
      {
        e=-b/(2*a);
        f=sqrt(4*a*c-b*b)/(2*a);
        printf("%.2lf+%.2lfi\n%.2lf-%.2lfi\n",e,f,e,f);
      }
        else if(b*b<4*a*c&&b==0)
      {
        e=0.00;
        f=sqrt(4*a*c-b*b)/(2*a);
        printf("%.2lf+%.2lfi\n%.2lf-%.2lfi\n",e,f,e,f);
      }
      else if(a==0&&b==0&&c==0)
      {
        printf("Zero Equation");
      }
      else if(a==0&&b==0&&c!=0)
      {
        printf("Not An Equation");
      }
      return 0;
    }
    
    展开全文
  • 本文使用Python实现一元二次方程公式,主要演示运算符和几个内置函数的用法,封面图片与本文内容无关。def root(a, b, c, highmiddle=True): #首...

    本文使用Python实现一元二次方程求根公式,主要演示运算符和几个内置函数的用法,封面图片与本文内容无关。

    def root(a, b, c, highmiddle=True):
        #首先保证接收的参数a,b,c都是数字,并且a不等于0
        #由于计算机表示实数时存在精度的问题,所以不能使用==来判断实数是否为0
        #函数的最后一个参数highmiddle为True表示高中,False表示初中
        if not isinstance(a, (int, float, complex)) or abs(a)<1e-6:
            print('error')
            return
        if not isinstance(b, (int, float, complex)):
            print('error')
            return
        if not isinstance(c, (int, float, complex)):
            print('error')
            return

        #delta<0时无解
        d = b**2 - 4*a*c
        #根据一元二次方程求根公式进行计算
        #当d<0时,在实数域内无解,d**0.5会得到复数
        x1 = (-b + d**0.5) / (2*a)
        x2 = (-b - d**0.5) / (2*a)

        if isinstance(x1, complex):
            if highmiddle:
                #高中阶段需要考虑复数根,实部和虚部都保留3位小数
                x1 = round(x1.real, 3) + round(x1.imag, 3)*1j
                x2 = round(x2.real, 3) + round(x2.imag, 3)*1j
                return (x1, x2)
            else:
                #初中阶段只考虑实数根
                print('no answer')
                return
        #如果是实数根,保留3位小数
        return (round(x1,3), round(x2,3))

    r = root(1, 2, 4)
    if isinstance(r, tuple):
        print('x1={0[0]}\nx2={0[1]}'.format(r))

    展开全文
  • 以c语言编写的关于一元二次方程求解问题的程序,可以求复数
  • 一元次方程求解

    千次阅读 2019-11-09 10:59:20
    一元次方程求解0.引言1.方法一2.方法3.结论 0.引言 在学习过程中需要求解一个一元次方程。 由于带有未知参数,本想使用MATLAB求解出它的解析解然后写入C++进行计算。后来发现求解出来的解太长。 要是直接放...

    一元四次方程的求解

    0.引言

    在学习过程中需要求解一个一元四次方程。Alt
    由于带有未知参数,本想使用MATLAB求解出它的解析解然后写入C++进行计算。后来发现求解出来的解太长。
    Alt

    要是直接放入C++中,通过解析解来实时求它的解甚至会比求解一元四次方程花费的时间更多。于是另谋出路,查阅资料如何求解一元四次方程。

    1.方法一

    Ferrari方法,这也是最容易Google到的方法。

    时间紧张原理就不看了,直接找实现。巧了,某百科上就有code.Link.

    Ferrari.cpp

    #include <math.h>
    #include <float.h>
    #include <complex>
    #include <iostream>
    /******************************************************************************\
    对一个复数 x 开 n 次方
    \******************************************************************************/
    std::complex<double>  sqrtn(const std::complex<double>&x,double n)
    {
        double r = hypot(x.real(),x.imag()); //模
        if(r > 0.0)
        {
            double a = atan2(x.imag(),x.real()); //辐角
            n = 1.0 / n;
            r = pow(r,n);
            a *= n;
            return std::complex<double>(r * cos(a),r * sin(a));
        }
        return std::complex<double>();
    }
    /******************************************************************************\
    使用费拉里法求解一元四次方程 a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
    \******************************************************************************/
    std::complex<double> Ferrari(std::complex<double> x[4]
    ,std::complex<double> a
    ,std::complex<double> b
    ,std::complex<double> c
    ,std::complex<double> d
    ,std::complex<double> e)
    {
        a = 1.0 / a;
        b *= a;
        c *= a;
        d *= a;
        e *= a;
        std::complex<double> P = (c * c + 12.0 * e - 3.0 * b * d) / 9.0;
        std::complex<double> Q = (27.0 * d * d + 2.0 * c * c * c + 27.0 * b * b * e - 72.0 * c * e - 9.0 * b * c * d) / 54.0;
        std::complex<double> D = sqrtn(Q * Q - P * P * P,2.0);
        std::complex<double> u = Q + D;
        std::complex<double> v = Q - D;
        if(v.real() * v.real() + v.imag() * v.imag() > u.real() * u.real() + u.imag() * u.imag())
        {
            u = sqrtn(v,3.0);
        }
        else
        {
            u = sqrtn(u,3.0);
        }
        std::complex<double> y;
        if(u.real() * u.real() + u.imag() * u.imag() > 0.0)
        {
            v = P / u;
            std::complex<double> o1(-0.5,+0.86602540378443864676372317075294);
            std::complex<double> o2(-0.5,-0.86602540378443864676372317075294);
            std::complex<double>&yMax = x[0];
            double m2 = 0.0;
            double m2Max = 0.0;
            int iMax = -1;
            for(int i = 0;i < 3;++i)
            {
                y = u + v + c / 3.0;
                u *= o1;
                v *= o2;
                a = b * b + 4.0 * (y - c);
                m2 = a.real() * a.real() + a.imag() * a.imag();
                if(0 == i || m2Max < m2)
                {
                    m2Max = m2;
                    yMax = y;
                    iMax = i;
                }
            }
            y = yMax;
        }
        else
        {//一元三次方程,三重根
            y = c / 3.0;
        }
        std::complex<double> m = sqrtn(b * b + 4.0 * (y - c),2.0);
        if(m.real() * m.real() + m.imag() * m.imag() >= DBL_MIN)
        {
            std::complex<double> n = (b * y - 2.0 * d) / m;
            a = sqrtn((b + m) * (b + m) - 8.0 * (y + n),2.0);
            x[0] = (-(b + m) + a) / 4.0;
            x[1] = (-(b + m) - a) / 4.0;
            a = sqrtn((b - m) * (b - m) - 8.0 * (y - n),2.0);
            x[2] = (-(b - m) + a) / 4.0;
            x[3] = (-(b - m) - a) / 4.0;
        }
        else
        {
            a = sqrtn(b * b - 8.0 * y,2.0);
            x[0] =
            x[1] = (-b + a) / 4.0;
            x[2] =
            x[3] = (-b - a) / 4.0;
        }
    return x[4];
    }
    
    int main()
    {
    std::complex<double> x[4];
    x[4] = Ferrari(x,1,2,3,4,5); //验证费拉里法
    std::cout<<"root1: "<<x[0]<<std::endl<<"root2: "<<x[1]<<std::endl<<"root3: "<<x[2]<<std::endl<<"root4: "<<x[3]<<std::endl;
    return true;
    }
    

    测试系数:1,2,3,4,5
    Alt

    确保结果正确,使用matlab验证一下:

    p = [1 2 3 4 5];
    x = roots(p)
    

    Alt
    结果一致,OK。

    2.方法二

    使用多项式的伴随矩阵进行求解。

    对于多项式: P ( x ) = x n + c n − 1 x n − 1 + c n − 2 x n − 2 + ⋯ + c 1 x + c 0 P(x) = x^n+c_{n-1}x^{n-1}+c_{n-2}x^{n-2}+\cdots+c_1x+c_0 P(x)=xn+cn1xn1+cn2xn2++c1x+c0
    其伴随矩阵:

    M x = [ 0 0 . . . 0 − c 0 1 0 . . . 0 − c 1 0 1 . . . 0 − c 2 . . . . . . . . . . . . . . . 0 0 . . . 1 − c n − 1 ] M_x = \left[\begin{array}{ccccc} 0 & {0} & {...} & {0} & {-c_0} \\ 1 &0 & {...} & {0} & {-c_1} \\ {0} & {1} & {...} & {0} & {-c_2} \\ { ...} & {...} & {...} & {...} & {...} \\ {0} & {0} & {...} & {1} & {-c_{n-1}} \end{array}\right] Mx=010...0001...0...............000...1c0c1c2...cn1
    的特征值就是 P ( x ) P(x) P(x)的根。

    于是使用Eigen进行多项式的求解:

    #include <iostream>
    #include <Eigen/Core>
    // 稠密矩阵的代数运算(逆,特征值等)
    #include <Eigen/Dense>
    using namespace std;
    
    int main( int argc, char** argv )
    {
    
        Eigen::Matrix<double, 4, 4> matrix_44;
        //复数动态矩阵
    	Eigen::Matrix<complex<double>, Eigen::Dynamic, Eigen::Dynamic> matrix_eigenvalues;
    	//同样测试 12345
        matrix_44 << 0, 0, 0, -5,
    				 1, 0, 0, -4,
    				 0, 1, 0, -3,
    				 0, 0, 1, -2;
    
    	std::cout<<"matrix_44: "<<std::endl<<matrix_44<<std::endl<<std::endl;
    
    	matrix_eigenvalues = matrix_44.eigenvalues();
    	//std::cout<<"matrix_44.eigenvalues: "<<std::endl<<matrix_44.eigenvalues()<<std::endl;
    	std::cout<<"matrix_eigenvalues: "<<std::endl<<matrix_eigenvalues<<std::endl;
    	return 0;
    }
    
    
    

    结果与上面同样一致:

    Alt

    3.结论

    数学功底越深厚,代码复杂度越低!!

    展开全文
  • 题目描述:一元二次方程求解 ax^2+bx+c = 0 问题:复数的输出格式不对,考虑这样的测试数据 1 ,-4 ,5 得到的复根应该是 2 + i , 2 - i 但是我得到的输出是2 + 1i , 2- 1i 答案虽然也正确但并不是我想得到的格式 ...
  • 那个时候老师就告诉我们,一元二次方程一般有两个,一元n次方程则一般有n个。后来在课外书上了解到,这个结论最早是由数学王子高斯严格证明出来的。当时我就有一个疑惑,明明有些一元二次方程因为判别式小于0是...
  • #include //标准输入输出头文件  #include //数学函数的头文件  ... 用else if结构在复数范围内求解一元二次方程  函数功能:   实现在复数范围内求解一元二次方程  变量说明:   a,b,c
  • c语言求一元二次方程

    万次阅读 多人点赞 2016-11-15 20:42:08
    对于一个一元二次方程进行如下分析:  ax^2+bx+c=0 分析: 1. 当a = 0:  结论:不是一个一元二次方程; 2. 当a!=0:  结论:(1)当b^2-4ac=0,方程有两个相等的实,x1=x2=-b/2a;  (2)当b^2-4.....
  • C--一元二次方程求解

    2019-04-09 22:20:44
    #include <stdio.h> #include <math.h> int main() { double a, // 二次项系数 b, // 一次项系数 c; // 常数项 double delta; // 第一步:输入必要的数据;输入一元二次方程各项系数的...
  • 求解一元二次方程

    2012-05-31 11:24:02
    用vb编写的一元二次方程求解程序。可自动判断解的个数,并自动求出方程的解。 初中数学教师在制作课件时可以把本程序链接到PPT中,增加课件的功能,也可以独立运行单独实现快速求解一元二次方程
  • Java类求解一元二次方程

    万次阅读 2009-09-25 23:46:00
    http://blog.csdn.net/microtong OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms.net 一元二次方程ax2+bx+c=0,输入a,b,c三个系数,求解方程,结果有三种情况:两个实数、一个实数、两个复数根。...
  • C# 求解一元二次方程

    2012-05-25 09:52:22
    VC2005,C#实现一元二次方程求解
  • 一元二次方程 ax²+bx+c=0 的包含3种情况(这里仅讨论a!=0的情况) #include<stdio.h> #include<math.h>void ax(int a,int b,int c); //δ>0void bx(int a,int b,int c); //δ=0void cx(int a,int b,...
  • 主要介绍了Python实现求解一元二次方程的方法,涉及Python基于math包进行数值运算相关操作技巧,需要的朋友可以参考下
  • 复数范围内求解一元二次方程组,可以用作C++的入门练习参考。
  • PTA——求一元二次方程

    千次阅读 2020-12-15 15:36:34
    PTA——求一元二次方程 题目:本题目要求一元二次方程ax^2+bx+c=0的,结果保留2位小数。 输入格式: 输入在一行中给出3个浮点系数a、b、c,中间用空格分开。 输出格式: 根据系数情况,输出不同结果: 1)...
  • 用c++编写求解一元二次方程的程序。包含了复数根求解
  • /*========================================...求一元二次方程 总时间限制: 1000ms 内存限制: 65536kB 描述 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程a...
  • Python求一元二次方程

    千次阅读 2020-06-19 01:14:56
    本题目要求读入3个一元二次方程的系数a,b,c,求出该方程(也可能有复数根)。 解题提示:Python的 math模块 中 sqrt 函数求负数平方根会报错, 因为math 模块中 sqrt 函数只能进行浮点数的运算。我们知道负数的...
  • C++ 求一元二次方程

    千次阅读 2020-03-24 09:27:48
    C++计算并输出一元二次方程 二次方程 ax2+bx+c = 0 (其中a≠0),a 是二次项系数,bx 叫作一次项,b是一次项系数;c叫作常数项。 x 的值为: 的判别式 示例 #include <iostream> #include <cmath&...
  • 软件测试中涉及到的一元二次(实和复根)的代码,可以根据代码设计测试用例,使之达到分支覆盖准则。
  • 实验3-1 求一元二次方程 (20 分) 本题目要求一元二次方程,结果保留2位小数。 输入格式: 输入在一行中给出3个浮点系数a、b、c,中间用空格分开。 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两...
  • 一元二次方程 Description 求一元二次方程 ax2+bx+c=0 的,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的,并输出结果。从主函数输入a、b、c的值。 Input 一元二次方程的系数a, b, c (|a|, |b|, |...
  • 7-10 求一元二次方程 (20分)

    千次阅读 多人点赞 2020-02-05 10:58:17
    本题目要求一元二次方程,结果保留2位小数。 输入格式: 输入在一行中给出3个浮点系数a、b、c,中间用空格分开。 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数,则每行输出一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 834
精华内容 333
关键字:

一元二次方程复数根求解