高分求newton迭代法求解非线性方程的一个根的c/c++程序
答案:5 悬赏:0
解决时间 2021-02-18 17:19
- 提问者网友:相思瘸子
- 2021-02-18 03:07
非线性方程为xe(x)括号的x为e的指数-1=0.要求输入初值x0.和精度tol及最大循环次数N.输出利用newton迭代法解出的近似根.急用.运行通过的话再加50分
最佳答案
- 二级知识专家网友:茫然不知崩溃
- 2021-02-18 04:29
详细程序代码如下:
用VC6.0编译(TC2.0也可,但不能显示汉字)
代码保存时,以.C为后缀名
分析:
#include<stdio.h>
#include<math.h>
#include<conio.h>
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++;
if(count==n)
{
break;
}
}
printf("方程的根为:%f\n",X1);
getch();
}
double f(double x)
{
double y;
y=x*exp(x)-1;
return y;
}
double ft(double x)
{
double y;
y=(x+1)*exp(x);
return y;
}
用VC6.0编译(TC2.0也可,但不能显示汉字)
代码保存时,以.C为后缀名
分析:
#include<stdio.h>
#include<math.h>
#include<conio.h>
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++;
if(count==n)
{
break;
}
}
printf("方程的根为:%f\n",X1);
getch();
}
double f(double x)
{
double y;
y=x*exp(x)-1;
return y;
}
double ft(double x)
{
double y;
y=(x+1)*exp(x);
return y;
}
全部回答
- 1楼网友:不羁的心
- 2021-02-18 08:10
x*e^x - 1 = 0
#include <stdio.h>
#include <math.h>
int main()
{
double x0 = 0; //初值x0
double tol = 0; //精度tol
int N = 0; //最大循环次数N
scanf("%lf %lf %d", &x0, &tol, &N);
double x1;
do
{
x1 = x0;
double y = x1*exp(x1) - 1; //f(x)
double k = exp(x1) + x1*exp(x1); //f'(x)
double b = y - k*x1; //y = k*x + b
x0 = -b / k;
N--;
} while (fabs(x1-x0)>tol && N>0);
printf("x = %lf\n", x0);
}
- 2楼网友:旧事诱惑
- 2021-02-18 07:23
别转了,直接做隐函数求导再用n·r法解吧。
给定一初值就行啦。
- 3楼网友:努力只為明天
- 2021-02-18 07:06
考试呢啊....
不会。。。
- 4楼网友:一起来看看吧
- 2021-02-18 05:49
通用的C++代码:
一共三个函数:
fun(x);
fun_(x)=fun'(x);
calc();
迭代方程:
xnn=xn-fun(xn)/fun_(xn)
#include <math.h>
#include<iostream>
using namespace std;
//待求函数
double fun(double x)
{
return x*exp(x)-1;
}
//导数
double fun_(double x)
{
return (x+1)*exp(x);
}
//calc()通过指针调用被求函数及其导数,并返回方程的根
double calc(double (*fp)(double), double (*fp_)(double), double x0, double tol, int n)
{
double xnn,xn=x0;
int times=0;
while (fabs(fp(xn))>tol||times<=n)//当精度和迭代次数都达到要求时退出循环
{
xnn=xn-fp(xn)/fp_(xn);
xn=xnn;
times++;
}
return xn;
}
int main()//由主函数输入控制参数
{
double x0,tol;//初值及精度
int n;//循环数
cin>>x0>>tol>>n;
cout<<calc(fun, fun_, x0, tol, n)<<endl;
system("pause");
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |