标题:牛顿迭代法解高次方程和超越方程,新手求教
取消只看楼主
Weldon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-2-6
结帖率:100%
已结贴  问题点数:20 回复次数:4 
牛顿迭代法解高次方程和超越方程,新手求教

用迭代法求
x*sin(x)=1的解

及其

x^41+x^3+1=0   在 -1 附近的根

我用了 xn+1 = xn - f(xn)/f'(xn)的公式

这段是x*sin(x)=1的代码
程序代码:
# include <stdio.h>
# include <math.h>
# define eps 1e-6

int main(void)
{
    float x0, x1;

    x0 = 1.0;
    x1 = (1 + x0*x0*cos(x0)) / (sin(x0) + x0*cos(x0));

    do
    {
        x0 = x1;
        x1 = (1 + x0*x0*cos(x0)) / (sin(x0) + x0*cos(x0));
    }while(fabs(x0 - x1) > eps);

    printf("%f", x1);

    return 0;
}


结果是 1.114157  带回方程不成立
而且当初值是2的时候 结果是 -9.317243, 带回方程也不成立
每次初值改变结果都改变了?


这段是x^41+x^3+1=0的代码
程序代码:
# include <stdio.h>
# include <math.h>
# define eps 1e-6



int main(void)
{
    float x0, x1;

    x0 = 1.0;
    x1= x0 - ((pow(x0, 41) + pow(x0, 3) + 1) / (pow(x0, 40) + 3*pow(x0, 2)));

    do
    {
        x0 = x1;
        x1= x0 - ((pow(x0, 41) + pow(x0, 3) + 1) / (pow(x0, 40) + 3*pow(x0, 2)));
        
    }while (fabs(x1 - (-1)) > eps);

    printf("%f\n", x1);


    return 0;
}



结果是   -1.#IND00    据说是 0 作为除数了??


请教大家了!!!!万分感谢!!!


[此贴子已经被作者于2017-11-5 20:03编辑过]

搜索更多相关主题的帖子: 方程 include cos 结果 pow 
2017-11-05 20:01
Weldon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-2-6
得分:0 
回复 2楼 像风像水
谢谢!我按计算器的,可能用错了吧。。万分感谢!!!
2017-11-07 18:50
Weldon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-2-6
得分:0 
回复 5楼 zbjzbj
谢谢!请问这是什么软件啊~
2017-11-07 18:54
Weldon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-2-6
得分:0 
回复 4楼 zbjzbj
谢谢!
您写的终止条件是while (fabs(x1 - x0) > eps);
我写的终止条件是while (fabs(x1 - (-1)) > eps);
所以出错了 ;

请问这里怎么理解啊,我想的是和-1 比较接近的时候。。。
而实际上是两次结果差值很小的时候;
为什么是此时跳出呢??

万分感谢!!!
2017-11-07 19:03
Weldon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-2-6
得分:0 
回复 9楼 zbjzbj
好的!
谢谢!
2017-11-08 17:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482156-1-1.html




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

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