用二分法.迭代法,牛顿法,求exp(x)+10*x-2=0的根(三段代码分开) 5

(1)在区间[0,1]上用二分法求方程exp(x)+10*x-2=0的近似根,要求误差不超过0.5*(10^3)。(2)取初值X0=0,用迭代公式Xk+1=2-exp(X... (1)在区间[0,1]上用二分法求方程exp(x)+10*x-2=0的近似根,要求误差不超过 0.5*(10^3)。

(2)取初值X0=0,用迭代公式 Xk+1=2-exp(Xk)/10 求方程exp(x)+10*x-2=0的近似根。要求误差不超过0.5*(10^3)。 k+1和k是下标

(3)取初值X0=0 ,用牛顿迭代法求方程exp(x)+10*x-2=0的近似根。要求误差不超过 0.5*(10^3).

三段代码分开,能分别编译通过,谢谢.

参考结果:(1) 0.09033 (2) 0.09052 (3) 0.09052
展开
 我来答
wacs5
2010-07-21 · TA获得超过1.6万个赞
知道大有可为答主
回答量:3724
采纳率:82%
帮助的人:2754万
展开全部
这分也太少了。

/***二分法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>

float f(float x)
{
return exp(x)+10*x-2;
}

float Separate(float a,float b,float eps)
{
float f(float);
float c,fa,fb,fc;
if (a>b)
{c=a;a=b;b=c;}
fa=f(a);
fb=f(b);
c=(b+a)/2;
fc=f(c);
/*printf("a=%f b=%f mid=%f fa=%f fb=%f fc=%f\n",a,b,c,fa,fb,fc);*/
if (b-a<eps)
return c;
if (fa*fb>0)
{
printf("error:f(a)*f(b)>0");
getch();
return -1;
}
if (fabs(fc)<eps)
return c;
if (fa*fc<0)
return Separate(a,c,eps);
else
return Separate(c,b,eps);
}

int main()
{
float x;
float Separate(float a,float b,float eps);
x=Separate(0,1,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}

/***迭代法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>

float f(float x)
{
return (2-exp(x))/10;
}

float Iter(float x,float eps)
{
float xnew;
float f(float);
int itern=0;
while(itern<1000) /*最大迭代次数*/
{
xnew=f(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if (fabs(xnew-x)<=eps)
return xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return xnew;
}

int main()
{
float x;
float Iter(float x,float eps);
x=Iter(0,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}

/***牛顿迭代法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>

float f(float x)
{
return exp(x)+10*x-2;
}

float df(float x)
{
return exp(x)+10;
}

float Newton(float x,float eps)
{
int itern=0;
float xnew;
float f(float);
float df(float);
while(itern<1000) /*最大迭代次数*/
{
xnew=x-f(x)/df(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if (fabs(xnew-x)<=eps)
return xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return xnew;
}

int main()
{
float x;
float Newton(float x,float eps);
x=Newton(0,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
骆木夕翠茵
2019-10-16 · TA获得超过3888个赞
知道大有可为答主
回答量:3162
采纳率:25%
帮助的人:257万
展开全部
这分也太少了。
/***二分法***/
#include
<stdio.h>
#include
<conio.h>
#include
<math.h>
float
f(float
x)
{
return
exp(x)+10*x-2;
}
float
Separate(float
a,float
b,float
eps)
{
float
f(float);
float
c,fa,fb,fc;
if
(a>b)
{c=a;a=b;b=c;}
fa=f(a);
fb=f(b);
c=(b+a)/2;
fc=f(c);
/*printf("a=%f
b=%f
mid=%f
fa=%f
fb=%f
fc=%f\n",a,b,c,fa,fb,fc);*/
if
(b-a<eps)
return
c;
if
(fa*fb>0)
{
printf("error:f(a)*f(b)>0");
getch();
return
-1;
}
if
(fabs(fc)<eps)
return
c;
if
(fa*fc<0)
return
Separate(a,c,eps);
else
return
Separate(c,b,eps);
}
int
main()
{
float
x;
float
Separate(float
a,float
b,float
eps);
x=Separate(0,1,0.5e-3);
printf("%f\n",x);
getch();
return
0;
}
/***迭代法***/
#include
<stdio.h>
#include
<conio.h>
#include
<math.h>
float
f(float
x)
{
return
(2-exp(x))/10;
}
float
Iter(float
x,float
eps)
{
float
xnew;
float
f(float);
int
itern=0;
while(itern<1000)
/*最大迭代次数*/
{
xnew=f(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if
(fabs(xnew-x)<=eps)
return
xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return
xnew;
}
int
main()
{
float
x;
float
Iter(float
x,float
eps);
x=Iter(0,0.5e-3);
printf("%f\n",x);
getch();
return
0;
}
/***牛顿迭代法***/
#include
<stdio.h>
#include
<conio.h>
#include
<math.h>
float
f(float
x)
{
return
exp(x)+10*x-2;
}
float
df(float
x)
{
return
exp(x)+10;
}
float
Newton(float
x,float
eps)
{
int
itern=0;
float
xnew;
float
f(float);
float
df(float);
while(itern<1000)
/*最大迭代次数*/
{
xnew=x-f(x)/df(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if
(fabs(xnew-x)<=eps)
return
xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return
xnew;
}
int
main()
{
float
x;
float
Newton(float
x,float
eps);
x=Newton(0,0.5e-3);
printf("%f\n",x);
getch();
return
0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寿瀚龚雅蕊
2020-02-29 · TA获得超过3915个赞
知道大有可为答主
回答量:3217
采纳率:24%
帮助的人:232万
展开全部
(2)
#include<stdio.h>
#include<math.h>
#define
N
0.0005
void
main()
{
double
x1,x2;
x1=0;
x2=(2-exp(x1))/10;
while(fabs(x2-x1)>=N)
{
x1=x2;
x2=(2-exp(x1))/10;
}
printf("x=%f\n",x2);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式