高分求newton迭代法求解非线性方程的一个根的c/c++程序非线性方程为xe(x)括号的x为e的指数-1=0.要求输入初值x0.和精度tol及最大循环次数N.输出利用newton迭代法解出的近似根.急用.运行通过的话
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 15:26:35
高分求newton迭代法求解非线性方程的一个根的c/c++程序非线性方程为xe(x)括号的x为e的指数-1=0.要求输入初值x0.和精度tol及最大循环次数N.输出利用newton迭代法解出的近似根.急用.运行通过的话
高分求newton迭代法求解非线性方程的一个根的c/c++程序
非线性方程为xe(x)括号的x为e的指数-1=0.
要求输入初值x0.和精度tol及最大循环次数N.
输出利用newton迭代法解出的近似根.
急用.运行通过的话再加50分
高分求newton迭代法求解非线性方程的一个根的c/c++程序非线性方程为xe(x)括号的x为e的指数-1=0.要求输入初值x0.和精度tol及最大循环次数N.输出利用newton迭代法解出的近似根.急用.运行通过的话
详细程序代码如下:
用VC6.0编译(TC2.0也可,但不能显示汉字)
代码保存时,以.C为后缀名
分析:
/*
xe^x-1=0对于这个方程,由newton法知:
f(x)=xe^x-1
f'(x)=e^x+xe^x
e^x表示e的x次方.
*/
#include
#include
#include
double f(double x);
double ft(double x);
main()
{
double X0,X1,tol;
int n;
int count=0;
printf("请输入初始值:\n");
scanf("%lf",&X0);
printf("请输入精度:\n");
scanf("%lf",&tol);
printf("请输入最大循环次数\n");
scanf("%d",&n);
X1=X0-f(X0)/ft(X0);
while(fabs(X1-X0)>=tol)/*在没有达到精度要求情况下就循环*/
{
X0=X1;
X1=X0-f(X0)/ft(X0);
count++;/*循环次数计数*/
/*如果循环次数到用户输入的最大循环次数就退出(其实可用for语句实现,但如果n太小,则达不到精度的要求)你可以适当修改*/
if(count==n)
{
break;
}
}
printf("方程的根为:%f\n",X1);
getch();
}
//
double ft(double x)
{
double y;
y=(x+1)*exp(x);
return y;
}