| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1144 人关注过本帖
标题:用迭代法,求a的平方根。
只看楼主 加入收藏
伍则帝
Rank: 3Rank: 3
来 自:四川省南充市高坪区
等 级:论坛游民
威 望:6
帖 子:100
专家分:34
注 册:2013-3-16
结帖率:84%
收藏
已结贴  问题点数:10 回复次数:7 
用迭代法,求a的平方根。
代码是小弟自己想的,有错还请指出来。
还有,x的值应该怎样定?


#include <stdio.h>
void main()
{
    float x=1,a;
    int k;
    printf("请输入a的值:");
    scanf("%f",&a);
        for(k=1;k<=20;k++)
        {
            x=(x+a/x)*0.5;//给定公式
            printf("%f\t",x);
            a=x;
        }
}
搜索更多相关主题的帖子: include 平方根 
2013-04-03 11:57
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:3 
选在收敛区间就行了

人生是一场错过 愿你别蹉跎
2013-04-03 12:29
伍则帝
Rank: 3Rank: 3
来 自:四川省南充市高坪区
等 级:论坛游民
威 望:6
帖 子:100
专家分:34
注 册:2013-3-16
收藏
得分:0 
什么是收敛区间呀?
2013-04-03 14:33
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
什么是迭代法呀?

人生是一场错过 愿你别蹉跎
2013-04-03 15:19
伍则帝
Rank: 3Rank: 3
来 自:四川省南充市高坪区
等 级:论坛游民
威 望:6
帖 子:100
专家分:34
注 册:2013-3-16
收藏
得分:0 
迭代是不断用新值取代旧值的过程。
2013-04-03 16:26
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:3 
这样进行赋值精度不很好吧!

Maybe
2013-04-03 20:26
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:3 
程序是运用牛顿法计算a的平方根,实际上就是求方程f(x)=x*x-a=0的根,因为平方根是大于等于0的数,当x>=0时,f(x)是单调的,所以x的初始值只要是大于0的数就可以了,不能取小于0 的数,否则会计算出一个负数结果,因为f(x)=x*x-a=0有两个根,一个整数和一个负数,平方根就是那个整数解。
2013-04-05 10:17
mskeheng
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:179
注 册:2013-3-13
收藏
得分:3 
这个似乎楼主的程序:
#include <stdio.h>
void main()
{
    float x=1,a;
    int k;
    printf("请输入a的值:");
    scanf("%f",&a);
        for(k=1;k<=20;k++)
        {
            x=(x+a/x)*0.5;//给定公式
            printf("%f\t",x);
            a=x;
        }
}
首先(x+a/x)*0.5>=sqrt(a);
如果此数列(x看成数列项)收敛,易知必收敛于sqrt(a);
要想收敛,若数列递减的话正好能实现,即1/2(x+a/x)>x,即x>sqrt(a),这样就能实现近似计算了。
改后程序:
#include <stdio.h>
void main()
{
    float a,x;
    int k;
    printf("请输入a的值:");
    scanf("%f",&a);
    for(x=1;;x++)
    if(x*x>a)
    {x=x*x;
     break;
    }
        for(k=1;k<=20;k++)
        {
            x=(x+a/x)*0.5;//给定公式
            printf("%f\t",x);
            
        }
}
这里找到找x的方式蛮复杂,欢迎提出更好的算法。
2013-04-06 23:25
快速回复:用迭代法,求a的平方根。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016132 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved