说说用C语言求根的那些事儿
C语言——求根;计算机只识别0和1,那么问题来了,作为计算工具如何解决数学问题?其实,计算机是死东西,都是程序员用计算机的的思维去加数学公式计算数学题的。听起来好高端的样子,其实啊,也就那么回事儿,
请看~~求平方根,也许你会说,这还不简单直接调用square函数就好了,这个还用说么?可是我若问你那么square函数是如何实现求平方根的呢?怎么样是不是没那么简单呢?且看:
- 牛刀小试~ 迭代法求平方根
数学公式为X(n+1)=1/2*(X(n)+a/X(n));
算法如下:
1)设定一个X0的值;
2)用上述公式求出x的下一个值x1;
3)再将x1带入上述公式右侧的Xn,求出下一个Xn+1
4)如此继续下去知道最后两次求出的X的值(Xn和Xn+1)满足关系:|Xn+1-Xn|<10e-5;
为了便于说明,现用x0和x1,先令初值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\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<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\n",x1);
return 0;
}
运行截图:
说说用C语言求根的那些事儿的更多相关文章
- R语言求根
求根是数值计算的一个基本问题,一般采用的都是迭代算法求解,主要有不动点迭代法.牛顿-拉富生算法.割线法和二分法. 不动点迭代法 所谓的不动点是指x=f(x)的那些点,而所谓的不懂点迭代法是指将原方程化 ...
- YTU 2405: C语言习题 牛顿迭代法求根
2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec 内存限制: 128 MB 提交: 562 解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...
- C语言复习---迭代法,牛顿迭代法,二分法求根
一:用迭代法求 x=√a.求平方根的迭代公式为:X(n+1)=(Xn+a/Xn) /2. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
- [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- 方程ax2+bx+c=0;一元二次方程。求根
<body>方程ax2+bx+c=0;一元二次方程.求根请输入a:<input type="number" id="a"/><br ...
- if 一元二次方程求根
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if...else if... ...
- MT【24】一道五次方程的求根题
解答: 评:一般的五次及以上的多项式方程是无根式解的,只能用计算机去精确到某某位.但是特殊的比如$x^5=1$显然有根式解,本题就是一个不平凡的特殊的例子,这里的代换用于求解三次方程的求根过程是一样的 ...
- c语言求最大公约数和最小公倍数(转)
最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者 ...
随机推荐
- nginx如何限速?
nginx自从1.1.8版本发布后将limit_conn更换为limit_conn_zone . 对应则需要修改配置文件 在nginx.conf的http下面加入下面代码limit_conn_zone ...
- Flex对象的Clone & Copy浅析
在flex中有时候会用到ObjectUtil.clone和ObjectUtil.copy方法.下面是官方API的注释. 克隆指定对象,并返回对该克隆的引用.该克隆使用本机序列化技术生成.这意味着在克隆 ...
- com学习(四)2——用 ATL 写第一个组件(vs2003)
步骤2.1:建立一个解决方案. 步骤2.2:在 该解决方案中,新建一个 vc++ 的 ATL 项目.示例程序叫 Simple2,并选择DLL方式,见图一.图二. 图一.新建 ATL 项目 图二.选择非 ...
- 安装Oracle软件
1.安装linux操作系统和VMware Tools 2.创建组和用户,以root用户运行以下命令: groupadd -g 1000 oinstall groupadd -g 1001 dba us ...
- VC获取并修改计算机屏幕分辨率(MFC)
//检测当前分辨率 int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); DEV ...
- 洛谷P1268 树的重量
P1268 树的重量 85通过 141提交 题目提供者该用户不存在 标签树形结构 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 有这种情况吗!!!! 题意似乎有问题 题目描述 树可以用来表 ...
- 华为OJ平台——整数的二进制中1的个数
题目描述: 输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 思路: 这是一道很基本的考查位运算的面试题.包括微软在内的很多公司都曾采用 ...
- 隐藏vbs执行cmd命令的窗口
dim obj_shellset obj_shell = createobject("wscript.shell") host = WScript.FullNameIf LCase ...
- sql基础查询语句
数据库文件百度云地址:www.pan.baidu.com 脚步:下载博客园文件:select_learn.rar 1.TOP限制返回行数[percent] * from book_info --显示前 ...
- javaSE第一天
第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5)语言 2 (6)人机交 ...