gpt4 book ai didi

c - 如何改进 C 语言中牛顿拉夫森法的代码?

转载 作者:行者123 更新时间:2023-11-30 17:16:12 24 4
gpt4 key购买 nike

我需要帮助来改进我的代码。此代码找到方程的根,但是当它没有任何根时,屏幕上不会显示任何内容。我需要这样的“输出”:例如,
“输入”x^2+x+1=0;
“输出”没有方程根。
先感谢您。

        #include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

double F(double x){
return asin(x)-M_PI/6;
}


#define Tk (double)0.0000001
double Fx(double x,double(*F)(double),double k){
return (double)((F(x+k)-F(x))/k); }

main()
{
double x0=100, x, eps=0.001, ep;
while(1)
{
x=x0-F(x0)/Fx(x0,F,Tk);
ep=fabs((x-x0)/x)*100;
x0=x;
if(fabs(ep)<eps) break;
}
printf("%lf", x0);
getch();
}

最佳答案

Newton-Raphson 在以下情况下快速收敛到解决方案:
1) 初步猜测很接近。
2)存在解决方案。

当收敛没有立即发生时,可能是由于这两个原因之一,即使 OP 对原因 #2 感兴趣。由于计算机的有限精度,也存在第三个原因:关于 + 的振荡答案和-回答在哪里fabs(ep)<eps没有实现。在这种情况下,当两个值接近时返回平均值。

两种方法:简单或深入

向OP推荐这个
简单:限制迭代次数。一旦发生 N 次迭代(建议位宽为 double ),则退出循环并显示“未找到解决方案(不存在或不收敛)”。

Deep:与N-R结合,进行二分查找。一次f(lo)具有一个符号并且 f(hi)是另一个(对于连续函数),即使无法通过 N-R 找到解决方案,必须存在。使用 N-R 和二分查找中更好的方法来找到它。如果符号相反 f(x)未找到,声明不存在/无法找到。

关于c - 如何改进 C 语言中牛顿拉夫森法的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com