0
我想用C++找到一個具有簡單定點方法的根,但問題是Xr
是f(x)
的一個根,也是一個拐點。另外,A方程比正常的定點方法稍微複雜一些。 該方程式增加了常數c以檢查多快地收斂到根xr。使用定點方法找到根的兩個必需條件
我打算找到一個根,然後檢查根是否是一個拐點,但它不工作,我在代碼中找不到問題。 我需要你的幫助。
真正的問題是
考慮求根問題f(x)=0
與根xr
,其中f '(x)=0
。 將其轉換爲簡單的定點問題。
x=x+c*f(x)=g(x)
其中c爲非零常數。應該如何C是選擇以確保c
的
x(n+1)=x(n)+c*f(x(n)) (x(n+1) means the value of the n+1th of X)
快速收斂(前提是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 Method\n");
Lbl:
x2 = gx(x,c);
printf("iteration=%d Root=%.5f Approximate error=%.15f\n", 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)= x^3-5'f'(x)= 3x^2'在x = 0處有一個拐點,但它不是'f'的根, 。你是不是指'f(x)=(x-5)^ 3'? – LutzL
請更改您的C++代碼,使其在沒有'goto'語句的情況下工作。請解釋函數'gxpr'扮演的角色,因爲任務沒有提供關於迭代的任何信息'xnext = x + c * f'(x)' – LutzL
Goto很棒。忽略上面的帖子。 – AppWriter