VB编程:用迭代法求某数a的立方根平方根。平方根的迭代公式如下:

博客访问: 1586070
博文数量: 305
博客积分: 5547
博客等级: 大校
技术积分: 3678
注册时间:
hello world.
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
Xn+1 &= &(Xn +a/Xn)
看到这个题目,我们可以将式子带入求出Xn+1&&,然后和Xn做差的绝对值与10的-5次方做比较,如果小于则跳出循环。代码如下:
#include <stdio.h>#include <math.h>int main(int argc, int *argv[]) {float x=1,x0;int n;printf("please intput a number:");scanf("%d",&n);while ( n < 0 ){&&&&&&scanf("%d",&n);}do{&&&&x0 = (x + n/x)/2;&&&&if (abs(x0 - x) < pow(10,-5))&&&&{&&&&&&&break;&&&&}&&&&else&&&&{&&&&&&&x = x0;&&&&}} while (1);printf("The square root of %d is %f\n",n,x0);system("pause");return 0;}
阅读(7594) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。用java实现迭代法的几个例题
用java实现迭代法的几个例题
迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:
(1) 选一个方程的近似根,赋给变量x0;
(2) 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
(3) 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法 求得的x0就认为是方程的根。上述算法用伪代码程序的形式表示为:
【算法】迭代法求方程的根
{&&&&& x0=初始近似根;
&&&&&&&&&&& & x1=x0;
&&&&&&&&&& & x0=g(x1); /*按特定的方程计算新的近似根*/
&&&& } while ( Math.abs(x0-x1)&精度);
&&&& System.out.printf(&方程的近似根是%f\n&,x0);
public class Test1{
public static double f(double x){
y=x*x*x-x*x-x-1;
return(y);
public static void main(String args[]){
double x0=1.1,x1=1.1;
x0=1+1/x1+1/(x1*x1);
}while(Math.abs(x0-x1)&1e-5);
System.out.println(f(x0));
System.out.printf(&方程的近似根是%f\n&,x0);
C:\java&java Test1
-2.9063E-5
方程的近似根是1.839283
例2:解方程:x*x*x-x-1=0
public class Test2{
public static double f(double x){
y=x*x*x-x-1;
return(y);
public static void main(String args[]){
double x0=1.5,x1=1.5;
x0=Math.pow((1+x1),1/3.0);
}while(Math.abs(x0-x1)&1e-7);
System.out.println(f(x0));
System.out.printf(&方程的近似根是%f\n&,x0);
C:\java&java Test2
方程的近似根是1.324718
用迭代法求某数a的平方根。已知求平方根的迭代公式为:x [n+1] = (x[n] + a / x[n]) / 2
要求前后两次求出的差的绝对值小于10-5。
算法如下:
① 设定一个x的初值x0 ; (在如下程序中取x0=a/2, 通过迭代公式求出x1,可以肯定与真正的平方根相比,误差很大。)
② 用上述公式求出x的下一个值 x1 ;
③ 如此继续下去,直到前后两次求出的x值(x n+1和xn)满足以下关系:|x n+1-xn|&10-5 .
public class Test{
public staic void main(String args[]){
/* 被开方数 */
double x0, x1; /* 分别代表前一项和后一项 */
a=Double.parseDouble();
x0 = a / 2; /* 任取初值 */
x1 = (x0 + a / x0) / 2;
while (Math.abs(x1 - x0) &= 1e-5)
x1 = (x0 + a / x0) / 2;
System.out.printf(&The square root of %5.2f is %8.5f\n&, a, x1);
C:\java&java Test 3
The square root of 3.00 is 1.73205
C:\java&java Test 100
The square root of 100.00 is 10.00000
C:\java&java Test 2
The square root of 2.00 is 1.41421
迭代算法也常用于求方程组的根
Java程序设计精品资源共享课网站版权与免责声明:
Java程序设计精品资源共享课网站所发布信息由原创信息、转载信息发布信息构成;
凡注明信息来源为Java程序设计精品资源共享课网站原创信息为本站原创信息,其版权为Java程序设计精品资源共享课网站所有;
凡注明信息来源为其他媒体的信息为本站转载信息,Java程序设计精品资源共享课网站不对其观点的正确性和内容的真实性负责;
本网为公益性网站,若单位或个人不同意转载此文,请与本站联系。
主管部门校内教学单位校内行政部门校内其它单位兄弟院校日一二三四五六2627281234567891011121314151617181920212223242526272829303112345678
阅读排行榜牛顿的逐步逼进方法
服务器君一共花费了144.769 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
SCIP 1.1.7的一个练习。
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。
过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
根据的原理,可以得到以下的迭代公式:X(n+1)=[X(n)+p/Xn]/2
一般性的编程方法如下:
double sqr(double n) {
double k=1.0;
while(abs(k*k-n)>1e-9) {
k=(k+n/k)/2;
求n的平方根,先随便取一个不是0的数作为迭代开始的x(0),例如最简单的x(0)=1,然后反复代入x(k+1) = 0.5[x(k)+n/x(k)]求得下一个x,代入次数越多解约精确。
例如,2的平方根:
x(1) = (1/2)(1+2/1) = 3/2 = 1.5
x(2) = (1/2)[3/2+2/(3/2)] = 17/12 = 1.
x(3) = (1/2)[17/12 + 2/(17/12)] = 577/408 = 1.…
就这样,反复代入上式计算,得到的值越来越精确。
或者这么解释:
对x的平方根的值一个猜想y。
通过执行一个简单的操作去得到一个更好的猜测:只需要求出y和x/y的平均值(它更接近实际的平方根值)。
例如,可以用这样方式去计算2的。
猜想商平均值
1 2/1=2 (2+1)/2 = 1.5
1.5 2/1.5=1.3333
(1.)/2 = 1.4167
1.4167 2/1.8
(1.8)/2=1.4142
继续这一计算过程,我们就能得到对2的平方根的越来越好的近似值。
下面用C语言实现一遍:
#include "stdio.h"
#include "math.h"
int main(void)
double n,y=1.0;
printf("请输入一个需要求其平方根的数:");
scanf("%lf",&n);
// 反复代入 x(k+1) = 0.5[x(k)+n/x(k)]
while(fabs((1.0/2.0*(y+n/y))-y)>=0.00001)
y=1.0/2.0*(y+n/y);
printf( "y=%lf\n", y );
printf("平方根为%f\n",y);
程序运行结果:
请输入一个需要求其平方根的数:2
y=1.500000
y=1.416667
y=1.414216
平方根为1.414216
请输入一个需要求其平方根的数:3
y=2.000000
y=1.750000
y=1.732143
y=1.732051
平方根为1.732051
PS:Quake III公开源码后,有人在game/code/q_math.c里发现了这样一段代码。它的作用是将一个数开平方并取倒,经测试这段代码比(float)(1.0/sqrt(x))快4倍,有兴趣的可以研究一下。不过这是后话了,
float Q_rsqrt( float number )
const float threehalfs = 1.5F;
x2 = number * 0.5F;
= * ( long * ) &y;
= 0x5f3759df - ( i >> 1 );
= * ( float * ) &i;
= y * ( threehalfs - ( x2 * y * y ) );
= y * ( threehalfs - ( x2 * y * y ) );
#ifndef Q3_VM
#ifdef __linux__
assert( !isnan(y) );
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
阅读一百本计算机著作吧,少年
吴军 (作者)
近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。在长达十年甚至几十年的时间里,它们代表着科技的浪潮,直到下一波浪潮的来临。从19世纪末算起,AT&T公司、IBM公司、苹果公司、英特尔公司、微软公司、思科公司、雅虎公司和Google公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或正在衰落,但是它们都极度辉煌过。吴军的这本《浪潮之巅》系统地介绍了这些公司成功的本质原因及科技工业一百多年的发展。在这些公司兴衰的背后,有着它必然的规律。《浪潮之巅》不仅讲述科技工业的历史,更重在揭示它的规律性。
扫一扫,在手机上阅读
栏目最新博文
20,437 views
14,314 views
15,423 views
15,993 views
15,536 views
15,283 views
10,391 views
9,880 views
12,687 views
12,890 views
栏目博文推荐
15,423 views
5,605 views
12,687 views
4,366 views
6,025 views
5,105 views
9,284 views
11,924 views
15,283 views
11,349 views
成功总是垂青于有准备的人。
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(,腾讯微博:,欢迎与我联系。2508人阅读
编程小题目(7)
编写程序,用迭代法求x=a^(1/2)。求平方根的迭代公式为:Xn&#43;1=1/2(Xn&#43;a/Xn)要求前后两次求出的得差的绝对小于0.00001。
程序如下:
#include &iostream&
#include &cmath&
int main()
float a,x0,x1;
x1=(x0+a/x0)/2;
while(fabs(x1-x0)&=0.00001)
x1=(x0+a/x0)/2;
cout&&x1&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:543639次
积分:8034
积分:8034
排名:第2084名
原创:255篇
转载:13篇
评论:126条
(1)(2)(6)(2)(5)(4)(7)(11)(35)(10)(3)(12)(10)(82)(7)(8)(8)(38)(17)}

我要回帖

更多关于 迭代法求某数a的立方根 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信