精华内容
下载资源
问答
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    下面的代码是我刚才无聊写的。对于简单的一元多次方程的迭代

    #include

    #include

    #include

    #define MAXTIMES 5

    typedef int times;

    typedef double coefficient;

    typedef struct _properties

    {

    coefficient x; //系数

    times n;//次数

    }properties; typedef properties equation_expression ;

    equation_expression equ[MAXTIMES];

    double diff(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    continue;

    else{

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += equ[i].x *equ[i].n* xn;

    }

    }

    return ds;

    }

    double equvalue(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    ds += equ[i].x;

    else

    {

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += xn * equ[i].x;

    }

    }

    return ds;

    }

    //

    void buildequfunction()

    {

    printf("input data like this a ,b a is coefficient b is times of equation\n");

    //sorry dont realize; this time just do ax^2+ bx +c = 0

    equ[0].x = 2.0;

    equ[0].n = 2;

    equ[1].x = 7.0;

    equ[1].n = 1;

    equ[2].x = 3.0;

    equ[2].n = 0;

    equ[3].x = 3.0;

    equ[3].n = 3;

    //this 3*x^3 +2x^2 + 7x +3 = 0

    }

    int main (void) {

    memset(equ,0,sizeof(equ));

    buildequfunction();

    double error_control = 0.0000000001 ;

    double _begin, _end ;

    //so you should give a data to begin the game.and some times it will not work.

    scanf("%lf",&_begin);

    do{

    _end = _begin - equvalue(_begin)/diff(_begin);

    }while( (fabs(_end -_begin)> error_control)&& (_begin = _end));

    printf("one %lf \n",_end);

    }

    展开全文
  • 那个时候老师就告诉我们,一元二次方程一般有两个一元n次方程则一般有n个。后来在课外书上了解到,这个结论最早是由数学王子高斯严格证明出来的。当时我就有一个疑惑,明明有些一元二次方程因为判别式小于0是...

    dbf13e63d6154937c7f4d3664d93072b.png

    记得第一次学习一元二次方程是在初中的时候。那个时候老师就告诉我们,一元二次方程一般有两个根,一元n次方程则一般有n个根。后来在课外书上了解到,这个结论最早是由数学王子高斯严格证明出来的。

    当时我就有一个疑惑,明明有些一元二次方程因为判别式小于0是没有根的啊?为什么说都有两个根呢?比如方程

    不就没有根吗?后来,了解了复数相关知识之后,才明白这个结论是在复数域内成立的。

    人们认识数的过程同求解一元n次代数方程的过程是息息相关的。人们最早天然认识到的数当然是自然数(又叫正整数,有时也把0纳入到自然数的范围),之后为了求解诸如

    这样的方程人们认识到了负整数,然后为了求解诸如
    这样的方程人们认识到了有理数,再之后为了求解诸如
    这样的方程人们认识到了无理数。再往后,人们在深入研究一元n次方程求解过程中,认识到了有些数无论如何不是任何整数系数(或者说是有理数系数)的一元n次方程的解,从而认识到了超越数。(有关内容可参考我的这篇文章,有理数、无理数、代数数与超越数 - 遥远地方剑星的文章 - 知乎 https://zhuanlan.zhihu.com/p/46072609)

    复数也是在这个过程中被逐步认识到的。在求解诸如

    这样的方程时,人们认识到需要进一步扩充数的范围。人们规定,用
    表示
    的解,也就是定义了一个新的数
    ,从而定义出了复数!

    复数的定义是数学领域的一件大事,它使得我们在用数轴表示实数的基础上直接跨越到用复平面表示复数了,从一维跨越到了二维。复数像实数一样,构成了一个数域,简单说来,就是任何两个复数的加、减、乘、除(分母不得为0)得到的结果仍然是复数。在复数范围内,任何复数系数一元n次方程都有n个根(可能会有重根),从而在求解一元n次方程这个问题上,人们一劳永逸的解决了数域范围的问题,不会因为求解一元n次方程而再需要扩充数的范围了。

    其实,对于一般的一元5次及以上次数的方程,人们是无法根式求解的,也就是说,除了数值求得近似解外,我们连这类方程的一般解都无法表达出来。解都无法表达,为什么我们还这么肯定它们存在呢?这就是数学的奇妙之处所在了。“一元n次方程必有n个根”,这个定理被称为代数基本定理,从名字就可以看出这个定理的重要性。下面,我们就通过一个相对比较容易理解的方法给出证明。

    在证明之前,先普及一点点需要用到的复数的最基本的知识:

    (1)任何复数z都可以写成

    的形式,对应于复平面上坐标为
    的点。注意这里的a和b都是实数。点
    到原点的距离被称为这个复数的模或者绝对值,记作

    (2)任何复数z也可以写成

    的形式,对应于用极坐标表示的复平面上的点
    ,这里r是大于等于0的实数,
    为任意实数,被称为复数的辐角。此时

    (3)

    (4)

    表示点
    之间的距离。

    (5)棣莫弗公式:对于

    好,下面证明开始。

    第一步:证明对于任意一元n次方程(n为大于0的整数)至少有一个根。

    为一个一般的复系数一元n次多项式,
    为一般的复系数一元n次方程。这里任一
    为复数。

    反证法,假设这个

    没有根,也就是说对于任意复数z,

    我们考察一个以复平面原点为圆心、r为半径的圆周曲线,这个曲线上的点对应的复数为

    ,r为常数,
    从0变到
    。显然,在
    从0变到
    绘出整个圆周的过程中,
    所对应的点也绘出了一条封闭曲线,如图1所示。后面我们把
    绘制出的封闭曲线称为
    的轨迹。

    8c91555e9ea82684802034199301552e.png
    图1 z跑遍以r为半径的圆周时,f(z)绘出一条封闭曲线

    如果r=0,则z绘出的圆周退化为原点O,同样的,

    的轨迹退化为点
    。且由于
    没有根,因此

    既然

    ,则我们一定可以找到一个足够小的正数
    ,使得
    时圆周上每一点z对应的点
    的距离都小于
    的模
    。这是因为
    的距离为
    ,注意到
    ,从而有

    时,
    ,而
    ,从而必有
    使得
    。如图2所示意。

    3c8b9fd51c4f023f2ea7e26c98e6d0a0.png
    图2 总可以选取足够小的Delta r,使得f(z)到f(0)的距离小于f(0)的模

    从而,如果我们以

    为圆心、
    为半径画一个圆周的话(图2中的橙色圆周),那么
    的轨迹(红色曲线)必然全部在此圆周之内。
    这就是说,
    时,
    原点O必然在
    的封闭轨迹(红色曲线)之外

    随着r的连续增大,

    的轨迹也在
    连续变化。但是因为任意
    ,从而
    的轨迹在连续变化过程中永不会经过原点,因此原点O永远不能跨过
    的轨迹进入到轨迹之内。所以,我们得到
    结论1,对于任意以原点为圆心的圆周上的点z,原点O永远在对应的
    形成的封闭轨迹之外

    但是当我们从另外一个角度研究这个问题的时候,矛盾出现了。刚才是找足够小的 r ,现在我们改为找足够大的 r 。我们总可以找到足够大的 r ,使得对于每个z,都有

    。这是因为

    上式第二步是将分子分母同时除以

    得到的。当
    时,上式显然趋于0 。从而,必然可以找到足够大的 r ,使得
    ,也就是

    这表明,对于这样足够大的 r 来说,点

    到点
    的距离小于
    ,从而我们可以连续的将点
    沿着直线段移动到点
    而不经过原点。如图3所示。

    611b4b4ae12465ddf4776606a4a2e4b5.png
    图3 总可以选取足够大的 r ,使得f(z)与a_n*z^n的距离小于f(z)的模,从而可以不经过原点将点fZ挪到Zn

    之所以可以不经过原点,是因为

    的距离小于
    ,从而点
    在这个距离范围内可移动到的位置一定在图3橙色圆周之内,还够不到原点。

    由于这个移动是连续的,而且是不经过原点的,所以原点O相对于

    轨迹的位置在移动前后不会有变化
    。移动完成后,
    的轨迹变成了
    的轨迹。我们知道,对于
    ,其中
    是系数
    的辐角。显然,这也是一个以原点为圆心的圆周(只不过随着z在圆周上移动一圈,
    会在相应的圆周上移动n圈),那么原点O当然在这个圆周之内。
    从而我们得到结论2,对于这个足够大的 r ,原点O也在相应的
    的封闭轨迹之内

    上述结论1与结论2显然是矛盾的。于是我们得到

    没有根的假设是不对的,
    至少有一个根。

    第二步,从有一个根得到有n个根。

    既然一定有一个根,那么不妨设这个根为

    ,也即
    。于是有,

    我们知道有一个因式分解的恒等式,

    利用这个恒等式,得到

    显然是关于z的一个n-1次多项式。

    根据第一步的结果,

    也至少有一个根,设为
    ,类似上面的推导过程,得到

    是n-2次多项式。一直类推下去,最终得到

    之所以会有一个常数项

    ,是因为
    的最高次项系数是
    。由上式得到
    是方程
    的n个根,而且也不会再有别的根,否则根据上式,对于不属于
    的其它
    不可能为0 。

    当然,我们不排除某个

    ,我们把这样的
    称为重根,如果有三个根一样,就叫做三重根,更多的就叫做四重根、五重根、......,所以一元n次方程是可能存在多重根的。

    到此,我们完成了代数基本定理的证明,说明了为什么一元n次方程必有n个根。

    在高斯的一生中,给出了四种代数基本定理的证明方法,最后一个方法是他晚年71岁的时候给出的。高斯肯研究四种证明方法,说明他很重视这个定理。确实,代数基本定理被公认为是在代数乃至整个数学中起着基础作用的定理。

    我们今天这个证明方法要比高斯给出的四种方法都简洁易懂一些,但是严格地讲,我们利用了拓扑学的一些基本知识(如连续、移动等),虽然这些说法普通人都能很容易理解,但是要给出严格的数学定义以及相关证明并不简单。所以,我们方法虽然简洁易懂,可仍然是站在前辈的肩膀上得到的。

    展开全文
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    下面的代码是我刚才无聊写的。对于简单的一元多次方程的迭代

    #include

    #include

    #include

    #define MAXTIMES 5

    typedef int times;

    typedef double coefficient;

    typedef struct _properties

    {

    coefficient x; //系数

    times n;//次数

    }properties; typedef properties equation_expression ;

    equation_expression equ[MAXTIMES];

    double diff(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    continue;

    else{

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += equ[i].x *equ[i].n* xn;

    }

    }

    return ds;

    }

    double equvalue(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    ds += equ[i].x;

    else

    {

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += xn * equ[i].x;

    }

    }

    return ds;

    }

    //

    void buildequfunction()

    {

    printf("input data like this a ,b a is coefficient b is times of equation\n");

    //sorry dont realize; this time just do ax^2+ bx +c = 0

    equ[0].x = 2.0;

    equ[0].n = 2;

    equ[1].x = 7.0;

    equ[1].n = 1;

    equ[2].x = 3.0;

    equ[2].n = 0;

    equ[3].x = 3.0;

    equ[3].n = 3;

    //this 3*x^3 +2x^2 + 7x +3 = 0

    }

    int main (void) {

    memset(equ,0,sizeof(equ));

    buildequfunction();

    double error_control = 0.0000000001 ;

    double _begin, _end ;

    //so you should give a data to begin the game.and some times it will not work.

    scanf("%lf",&_begin);

    do{

    _end = _begin - equvalue(_begin)/diff(_begin);

    }while( (fabs(_end -_begin)> error_control)&& (_begin = _end));

    printf("one %lf \n",_end);

    }

    展开全文
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    下面的代码是我刚才无聊写的。对于简单的一元多次方程的迭代

    #include

    #include

    #include

    #define MAXTIMES 5

    typedef int times;

    typedef double coefficient;

    typedef struct _properties

    {

    coefficient x; //系数

    times n;//次数

    }properties; typedef properties equation_expression ;

    equation_expression equ[MAXTIMES];

    double diff(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    continue;

    else{

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += equ[i].x *equ[i].n* xn;

    }

    }

    return ds;

    }

    double equvalue(double x)

    {

    double ds = 0.0 ;

    for(int i = 0 ;i< MAXTIMES ;i++)

    {

    if(equ[i].n ==0 )

    ds += equ[i].x;

    else

    {

    double xn = 1.0;

    for(int j =0 ;j

    xn *= x;

    ds += xn * equ[i].x;

    }

    }

    return ds;

    }

    //

    void buildequfunction()

    {

    printf("input data like this a ,b a is coefficient b is times of equation\n");

    //sorry dont realize; this time just do ax^2+ bx +c = 0

    equ[0].x = 2.0;

    equ[0].n = 2;

    equ[1].x = 7.0;

    equ[1].n = 1;

    equ[2].x = 3.0;

    equ[2].n = 0;

    equ[3].x = 3.0;

    equ[3].n = 3;

    //this 3*x^3 +2x^2 + 7x +3 = 0

    }

    int main (void) {

    memset(equ,0,sizeof(equ));

    buildequfunction();

    double error_control = 0.0000000001 ;

    double _begin, _end ;

    //so you should give a data to begin the game.and some times it will not work.

    scanf("%lf",&_begin);

    do{

    _end = _begin - equvalue(_begin)/diff(_begin);

    }while( (fabs(_end -_begin)> error_control)&& (_begin = _end));

    printf("one %lf \n",_end);

    }

    展开全文
  • //// main.c// 一元次方程求解//// Created by 丁小未 on 13-7-9.// Copyright (c) 2013年 dingxiaowei. All rights reserved.//#include #include float O(float a,float b,float c){float res = b*b-4*a*c;if...
  • //// main.c// 一元次方程求解//// Created by 丁小未 on 13-7-9.// Copyright (c) 2013年 dingxiaowei. All rights reserved.//#include #include float O(float a,float b,float c){float res = b*b-4*a*c;if...
  • C语言编程一元N次方程二分法求根,例子是用的HS1101湿度传感器一元三次方程调试用的
  • 注:本来只是单纯的一元N次方程求解问题,结果我忽然对为什么一元五以上方程没有求根公式产生好奇,结果就用了两个下午十分粗略的了解了一下阿贝尔定理的证明。 附录:1. 为何从一元五次方程开始就没有由有限...
  • MATLAB实现一元次方程求解/盛金公式

    万次阅读 多人点赞 2018-10-11 00:17:04
    一元次方程求解中,1945年卡尔丹诺把冯塔纳的三方程求根公式发表出来,但该公式形式比较复杂,直观性也较差。1989年范盛金对一元次方程求解进行了深入的研究和探索,提出了更加简洁实用的求解公式-盛金公式。...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...
  • 标准型的一元次方程aX^3+bX^2+cX+d=0(a,b,c,d∈R,且a≠0),其解法有:1、意大利学者卡尔丹于1545年发表的卡尔丹公式法;2、中国学者范盛金于1989年发表的盛金公式...中文名一元次方程求根公式方程aX^3+bX^2+...
  • C++实现了一元次方程求解,利用二分法求解,只需要输入一元次方程的四个系数,就可以出实数解
  • 一元次方程求解

    千次阅读 2013-10-20 23:21:58
    一元次方程求解,输入a、b、c,即可判断一元方程是否有实数解,如果有,会输出解。   # include # include void main() { float a,b,c; printf("请输入3个值\n"); scanf("%f%f%f",&a,&b,&c); float ...
  • 一元次方程求根

    2021-10-08 17:56:27
    根据一元次方程求根公式,令 p=−b2a,q=b2−4ac√2a 假设a,b,c的值能保证方程有两个不相等的实根(即b2-4ac>0) **输入提示信息:"Please enter the coefficients a,b,c:" **输入格式要求:"%f,%f,%f" **...
  • 一元次方程求解

    2021-02-08 01:18:33
    一元次方程求解 有 一个一元方程。给出该方程中各项的系数(a , b , c ,d 均为实数),并约定该方程存在三个不同实的范围−100至 100之间),且之差的绝对值 ≥1。要求由小到大依次在同一行输出这...
  • C++一元次方程求解算法2013年01月27日 14:18:05阅读:1118令x=z-b/3a,代入可得z^3+pz+q=0,对上面化简的方程,有求根公式:x=(-q/2+(q^2/4+p^3/27)^(1/2))^(1/3)+(-q/2-(q^2/4+p^3/27)^(1/2))^...
  • C语言——一元次方程求解

    千次阅读 2018-05-26 18:33:48
    一元次方程解:判断系数是否可以构成一元次方程;判断disc=b*b-4*a*c是否大于零;计算两个x1=(-b-sqrt(disc))/2、x2=(-b+sqrt(disc))/2。int main() { double a, b, c, disc, x1, x2;//注意double定义变量; ...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...
  • 一元次方程求解以及表达式

    千次阅读 2019-11-10 16:02:42
    求解一元次方程,并且写出表达式,这个写的很啰嗦,大佬给简洁代码。 a ,b ,c = eval(input('方程系数:')) #判断a = 0? if a == 0: if b == 0: if c == 0: print('任意实数') else: print('无解') else...
  • C--一元次方程求解

    2019-04-09 22:20:44
    #include <stdio.h> #include <math.h> int main() { double a, // 二项系数 b, // 一项系数 c; // 常数项 double delta; // 第一步:输入必要的数据;输入一元次方程各项系数的...
  • 运用牛顿迭代法和暴力破解法,可以轻松解出一元n次方程(5次方以上依然可以求解)的近似解,精确度可调整。压缩包中test.java是暴力破解求解结果10万以内用这个比较快。test2.java是牛顿迭代,结果很大的时候这个...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...
  • 使用Java实现一元次方程求根计算器

    万次阅读 多人点赞 2018-05-21 14:20:43
    使用Java实现一元次方程求根计算器 1、任务简介 使用Java编写一个程序实现一元次方程求根,用户可以自行输入一元次方程各个参数的值,并通过该程序进行求根。在编写该程序之前首先需要学会编写一个...
  • 对于简单的一元次方程的迭代#include #include #include #define MAXTIMES 5typedef int times;typedef double coefficient;typedef struct _properties{coefficient x; //系数times n;//次数}...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,844
精华内容 3,537
关键字:

一元n次方程求解