牛顿迭代法解高次方程和超越方程,新手求教

Ssinging7 2017-11-05 08:21:35


用迭代法求
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 = 2.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 = 2.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 作为除数了??


请教大家了!!!!万分感谢!!!
...全文
963 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aengus the GOD 2020-03-18
  • 打赏
  • 举报
回复
这个方程有无数个解,你可以画出图像看一下,牛顿迭代法依赖于初值,初值不同,收敛区间不同也就导致收敛得到的结果不同,上面1.114157和-9.317243是对的,应该是你带回去的时候弧度和角度没进行转换。
赵4老师 2017-11-06
  • 打赏
  • 举报
回复
仅供参考:
//用C语言编程,求出2^x=x^10这个方程的解。
#include <math.h>
#include <stdio.h>
double x,e;
void main () {
    x=-1.0;
    e=0.001;
    while (1) {
        while (1) {
            if (pow(2.0,x)<pow(x,10.0)) {
                x+=e;
            } else {
                break;
            }
        }
        e/=10.0;
        if (e<1e-15) break;
        while (1) {
            if (pow(2.0,x)>pow(x,10.0)) {
                x-=e;
            } else {
                break;
            }
        }
        e/=10.0;
        if (e<1e-15) break;
    }
    printf("%+.14g\n",x);

    x=1.0;
    e=0.001;
    while (1) {
        while (1) {
            if (pow(2.0,x)>pow(x,10.0)) {
                x+=e;
            } else {
                break;
            }
        }
        e/=10.0;
        if (e<1e-15) break;
        while (1) {
            if (pow(2.0,x)<pow(x,10.0)) {
                x-=e;
            } else {
                break;
            }
        }
        e/=10.0;
        if (e<1e-15) break;
    }
    printf("%+.14g\n",x);
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧