牛頓拉夫遜方法的失效分析說:「對於某些功能,某些起點可能進入無限循環,阻止收斂」。我想在程序中檢查它是否進入無限循環或不使用assert語句。如果進入,那麼程序將終止,說使用這個初始猜測不可能收斂。我如何在程序中檢測到這個循環? 代碼:如何檢測牛頓拉夫遜方法中的循環C
int user_power, i=0, cnt=0, flag=0;
int coef[10]={0};
float x1=0, x2=0, t=0;
float fx1=0, fdx1=0;
void main()
{
printf("\n\n\t\t\t PROGRAM FOR NEWTON RAPHSON GENERAL");
printf("\n\n\n\tENTER THE MAXIMUM POWER:");
scanf("%d",&user_power);
for(i=0;i<=user_power;i++)
{
printf("\n\t x^%d:",i);
scanf("%d",&coef[i]);
}
printf("\n");
printf("\n\tINTIAL X1---->");
scanf("%f",&x1);
printf("\n ******************************************************");
printf("\n ITERATION X1 FX1 F'X1 ");
printf("\n **********************************************************");
do
{
cnt++;
fx1=fdx1=0;
for(i=user_power;i>=1;i--)
{
fx1+=coef[i] * (pow(x1,i)) ; //calculating f(x1)
}
fx1+=coef[0];
for(i=user_power;i>=0;i--)
{
fdx1+=coef[i]* (i*pow(x1,(i-1))); //calculating f'(x1)
}
t=x2;
assert(fdx1!=0);
x2=(x1-(fx1/fdx1));
x1=x2;
printf("\n %d %.3f %.3f %.3f ",cnt,x2,fx1,fdx1);
} while((fabs(t - x1))>=0.0001);
printf("\n\t THE ROOT OF EQUATION IS %f",x2);
printf("\n");
}
向我們展示一些代碼 –
你做其他事情之前:***不要讓爲斷言這種***它不會在發佈版本中被觸發。 –
我想在代碼中有斷言。我已經把一個斷言如f'(x)!= 0。如果僅使用斷言檢測到週期,我想終止程序。 –