用二分法.迭代法,牛顿法,求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 展开
(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 展开
3个回答
展开全部
这分也太少了。
/***二分法***/
#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;
}
/***二分法***/
#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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这分也太少了。
/***二分法***/
#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;
}
/***二分法***/
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |