#include
#include
#define limit 50
#include
float func (double);
void main(void)
{
double xn,dx=1.e-3;
double dif,eps=1.e-8;
int k;
printf("gunss the root may be? \n");
scanf("%f",&xn);
printf("test=%f",xn);
for (k=1;k<=limit;k++)
{
dif=(func(xn)-func(xn-dx))/dx;
xn=xn-func(xn)/dif;
if(func(xn)
printf("xn=%f,f(x)=%fn",xn,func(xn));
}
}
}
float func(double x)
{
float value;
value =(float)( cos(x)+(exp(pow(x,2)*pow(x,3))));
system("pause");
return (float)value;
}
----------------------------
#include
#include
#define limit 50
#include
void main()
{
float xn;
double f=0,dif=0,eps=1.e-3;
int k;
printf("gauss the rootmay be? ");
scanf ("%1f",&xn);
for(k=1;k<=limit;k++)
{
f = cos(xn)+exp(pow(xn,2))*pow(xn,3)-9;
dif =(-sin(xn))+exp(pow(xn,2))*2*xn*pow(xn,3)+exp(pow(xn,2))*3*pow(xn,2);
xn = xn-(f/dif);
if(fabs(f)
printf("xn=%f",xn);
break;
}
}
system("pause");
}
可以幫我解說這兩個程式哪裡不一樣嗎?3Q~
2007-01-04 09:07:32 · 1 個解答 · 發問者 小宇 3 in 電腦與網際網路 ➔ 程式設計
1. 函數不太一樣 (要不就是你打錯了)
(a) value =(float)( cos(x)+(exp(pow(x,2)*pow(x,3))));
(b) f = cos(xn)+exp(pow(xn,2))*pow(xn,3)-9;
2. (a) 用定義法來求微分逼近值
(b) 直接微分來求該點 (Xn) 的值
dif=(func(xn)-func(xn-dx))/dx;
xn=xn-func(xn)/dif;
dif =(-sin(xn))+exp(pow(xn,2))*2*xn*pow(xn,3)+exp(pow(xn,2))*3*pow(xn,2);
xn = xn-(f/dif);
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-01-05 12:15:00 · answer #1 · answered by JJ 7 · 0⤊ 0⤋