使用定点方法编码查找根的两个必要条件

Code two required condition in finding root with Fixed point method

本文关键字:必要条件 两个 方法 查找 编码      更新时间:2023-10-16

我试图通过C++用简单的定点方法找到一个根,但重点是Xrf(x)的根,也是一个拐点。此外,方程比普通的定点法复杂一点。 该方程被添加常量c,用于检查收敛到根xr的速度。

我打算找到一个根,然后检查根是否是一个拐点,但它不起作用,我在代码中找不到问题。 我需要你的帮助。

真正的问题是

考虑根查找问题f(x)=0xr和 f'(x)=0。 将其转换为简单的定点问题。

x=x+c*f(x)=g(x)

C 为非零常量。应该如何选择c以确保快速收敛

x(n+1)=x(n)+c*f(x(n))  ( x(n+1) means the value of the n+1th of X )

c(前提是选择x0足够接近XR?将你选择c的方式应用于寻根问题x*x*x-5=0。使用x0=1.0启动程序并使用 c 的多个值运行,并讨论结果中观察到的趋势(换句话说,c 值对收敛行为的影响)

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
double gx(double x, double c)
{
return(x + c*(x*x*x - 5));
}
double gxpr(double x, double c)
{
return(x + c*(3 * x*x));
}
void Simple_Fixed_Point(double x, double c) 
{
int i = 1;
long double x2=0.0;
long double x3=0.0;
long double ea=0.0;
long double ea2 = 0.0;
long double es = pow(10, -6);
printf("Simple Fixed Point Methodn");
Lbl:
x2 = gx(x,c);
printf("iteration=%d Root=%.5f Approximate error=%.15fn", i++, 
x2, ea);
if (ea=fabs((x2 - x)/x2*100) <es)
{
goto Lbm;
}
else
{
x = x2;
goto Lbl;
}
Lbm:
x3 = gxpr(x2, c);
if (ea2 = fabs((x3 - x2) / x3 * 100) < es)
{
goto End;
}
else
{
x2 = x3;
goto Lbm;
}
End:
getch();
}
int main(void)
{
Simple_Fixed_Point(1.0, 1.0);
return(0);
}

希望这对您有所帮助:

//f(x+dx) = f(x) + (dfdx) * dx;
eps = 1.0;    
dx = 1e-7; //something small
x = x0;
while (eps > mineps) {
f1 = f(x);
f2 = f(x + dx);      
f3 = f(x + dx + dx);        
d2fdx2 = (f3 - f2 - f2 + f1) / dx / dx;
dfdx = (f2 - f1) / dx;
x -= (relax1 * f1 / dfdx + relax2 * dfdx / d2fdx2); //relax - something less 1
eps = max(abs(dfdx), abs(f1));
}