zoukankan      html  css  js  c++  java
  • 说说用C语言求根的那些事儿


    C语言——求根;计算机只识别01,那么问题来了,作为计算工具如何解决数学问题?其实,计算机是死东西,都是程序员用计算机的的思维去加数学公式计算数学题的。听起来好高端的样子,其实啊,也就那么回事儿,

    请看~~求平方根,也许你会说,这还不简单直接调用square函数就好了,这个还用说么?可是我若问你那么square函数是如何实现求平方根的呢?怎么样是不是没那么简单呢?且看:

    • 牛刀小试~ 迭代法求平方根 

    数学公式为X(n+1)=1/2*(X(n)+a/X(n));

    算法如下:

    1)设定一个X0的值;

    2)用上述公式求出x的下一个值x1

    3)再将x1带入上述公式右侧的Xn,求出下一个Xn+1

    4)如此继续下去知道最后两次求出的X的值(XnXn+1)满足关系:|Xn+1-Xn|<10e-5;

    为了便于说明,现用x0x1,先令初值x0=a/2;求出x1,源代码如下:

    #include<stdio.h> 
    #include<math.h>
    int main()
    {
        float a,x0,x1;
        printf("Enter a positive number: ");
        scanf("%f",&a);
        x0=a/2;
        x1=(x0+a/x0)/2;
        do
        {
         x0=x1;
         x1=(x0+a/x0)/2;
        }while(fabs(x0-x1)>=10e-5);
        printf("The square root of %5.2f is %8.5f
    ",a,x1);
        return 0;
    }


    运行截图:

    • 升级版求一元高次方程的根~牛顿迭代法

    又称牛顿切线法:先任意设定一个与真实根接近的x0作为第一次近似根,由x0求出f(x0),过点(x0,f(x0))作f(x)的切线,交x轴于x1,把x1作为第二次近似根,再过x1作点(x1,f(x1))的切线交x轴于x2,如此继续,直到接近真实根x为止,由此可得下

    公式:x1=x0-f(x0)/f‘(x0)这就是牛顿迭代公式。例如求2x^3-4x^2+3x-6=0的根

    f(x)=2x^3-4x^2+3x-6     变形为f(x)=((2x-4)x+3)x-6   进一步f’(x)=6x^2-8x+3=(6x-8)+3

    用这种方法表示的表达式在运算时可以节省时间,由原来的多次指数运算改为乘法和加法运算。源代码如下:

    #include<stdio.h> 
    #include<math.h>
    int main()
    {
        double x1,x0,f,f1;
        x1=1.5;
        do
        {
          x0=x1;
          f=((2*x0-4)*x0+3)*x0-6;
          f1=(6*x0-8)*x0+3;
          x1=x0-f/f1;
        }
        while(fabs(x1-x0)>=10e-5);
        printf("The root of 2x^3-4x^2+3x-6=0 is %5.2f
    ",x1);
        return 0;
    }

    运行截图:



  • 相关阅读:
    深入理解 Embedding层的本质
    tf.nn.embedding_lookup()的用法
    深度学习原理与框架-CNN在文本分类的应用 1.tf.nn.embedding_lookup(根据索引数据从数据中取出数据) 2.saver.restore(加载sess参数)
    通俗理解tf.name_scope()、tf.variable_scope()
    TENSORFLOW变量作用域(VARIABLE SCOPE)
    Tensorflow函数——tf.variable_scope()
    tf.variable_scope 参数
    何查看Tomcat版本信息
    XCode4中的文本查找和文本替换功能
    引入第三方库错误Undefined symbols for architecture i386: _OBJC_CLASS_$的解决方案
  • 原文地址:https://www.cnblogs.com/jiahao89/p/5118304.html
Copyright © 2011-2022 走看看