迭代法求平方根 c 迭代法求平方根
要求前后两次求出的差的绝对值小于10-5。
算法如下:
① 设定一个x的初值x0 ; (在如下程序中取x0=a/2, 通过迭代公式求出x1,可以肯定与真正的平方根相比,误差很大。)
② 用上述公式求出x的下一个值 x1 ;
③ 如此继续下去,直到前后两次求出的x值(x n+1和xn)满足以下关系:|x n+1-xn|<10-5 .
#include <stdio.h>
#include <math.h>
int main()
{
float a; /* 被开方数 */
float x0, x1; /* 分别代表前一项和后一项 */
printf("Input a positive number:n");
scanf("%f", &a);
x0 = a / 2; /* 任取初值 */
x1 = (x0 + a / x0) / 2;
while (fabs(x1 - x0) >= 1e-5)
{
x0 = x1;
x1 = (x0 + a / x0) / 2;
}
printf("The square root of %5.2f is %8.5fn", a, x1);
return 0;
}
运行结果:
=====================================
Input a positive number:
2↙
The square root of 2.00 is 1.41421
=====================================
★ 其中初值是任取的(这里取的a/2) , 试将x0初值换为任意数均可得到如上结果。只是迭代的次数有差异。
★ 另外,考虑到while与do-while的差别,此程序用while结构,那是否会出现第一次判断条件时就不成立呢,即不会执行循环体。验证如下:设被开方数a为4,x0 初值为2,则由迭代公式可得x1值为2,x1=x0 值应该为0, 此时应该不会执行循环体,那么结果是否还是正确的呢? 验证如下:
#include <stdio.h>
#include <math.h>
int main()
{
float a;
float x0, x1;
printf("Input a positive number:n");
scanf("%f", &a);
x0 = 2;
x1 = (x0 + a / x0) / 2;
printf("x0=%f x1=%f x1-x0=%fn", x0, x1, x1-x0);
while (fabs(x1 - x0) >= 1e-5)
{
x0 = x1;
x1 = (x0 + a / x0) / 2;
printf("x1=%fn", x1); /*若条件成立,则会循环输出 */
}
printf("The square root of %5.2f is %8.5fn", a, x1);
return 0;
}
运行结果: (没有输出循环体中的内容)
===============================================
Input a positive number:
4↙
x0=2.000000 x1=2.000000 x1-x0=0.000000
The square root of 4.00 is 2.00000
===============================================
★ 若被开方数 a 为9, 初值为3, 情况与以上类似, 都不满足条件, 没有进入循环体运行, 但结果都是正确的。原因(我猜)是在做如上假设时,x1经一次迭代后已经就是正确的结果了, 而不需要再做第二次迭代,那么是否执行循环体也就无所谓了。这应该和这种迭代方法的由来有点关系,我猜。
更多阅读
转 代码优化-之-优化除法内含牛顿迭代法介绍 簇优化介绍
tag:代码优化,除法,牛顿迭代,减法代替除法,除法优化说明:文章中的很多数据可能在不同的CPU或不同的系统环境下有不同的结果,数据仅供参考x86系列的CPU对于位运算、加、减等基本指令都能在1个CPU周期内完成(现在的CPU还能乱序执行,从而
GBDTMART 迭代决策树入门教程|简介 mart gbdt
在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(GradientBoostingDecisionTree)又叫MART(MultipleAdditiveRegressionTree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它
iPod Touch4代 C皮 苹果皮 GPRS 打电话 国内版 黑色白色 ipod touch打电话
短评:品牌: 点击数: 8315次网友评价:如何购买 在线咨询分享到: 复制链接那么如果出现这样一种“皮”,能够令touch 4代当作iPhone 4来使用,这种情况能否被实现?今天我们评测室就迎来这样一款产品,它能够令touch 4代当作iPhone 4手机一样来使
转载 用SOR方法解方程组计算方法matlab matlab中sor迭代法
原文地址:用SOR方法解方程组计算方法matlab作者:不再彷徨function [Lw,f]=fifth1(A,b)%输入方程左端系数和右端向量,输出SOR方法的迭代矩阵,%及另一个系数s=size(A);%方程组左端系数矩阵的大小ss=size(b);f=zeros(ss(1),ss(2));%定义一
Struts迭代器iterator 遍历List常用的4种例子 struts2迭代器
【摘要】本文主要介绍及演示了Struts迭代器(iterator)遍历List常用的4种例子,基于MyEclipse开发环境,重点关注前后端代码的实现,给出后端java代码、前段struts标签代码,主要有如下4个例子:1.遍历List<String>2.遍历List<List<String>>3.遍