博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说用C语言求根的那些事儿
阅读量:5056 次
发布时间:2019-06-12

本文共 1374 字,大约阅读时间需要 4 分钟。

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
#include
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\n",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
#include
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\n",x1); return 0;}
运行截图:

转载于:https://www.cnblogs.com/jiahao89/p/5118304.html

你可能感兴趣的文章
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
Cocos2d-x 3.0final 终结者系列教程10-画图节点Node中的Action
查看>>
简单理解kafka---核心概念
查看>>
assert用法
查看>>
ajaxFileUpload.js 上传后返回的数据不正确 -- clwu
查看>>
扒一扒spring,dom4j实现模拟实现读取xml
查看>>