基本计算方法
牛顿迭代法
基本应用:求方程f(x)=0的近似解。基本公式:x i+1=x i-f(x i)/f’(x i)例题1:求实数a>0的平方根。
f(x)=x*x-a,f’(x)=2x,x i+1=1/2(x i+a/x i)
#include<stdio.h>
#include<math.h>
int main()
{ double a,x;
int i;
printf("a : "); /*提示并 */
scanf("%lf",&a); /* 读取被开方数a */
x=a/2; /*1 取近似值x0=a/2 */
for(i=0; fabs(x*x-a)>=1e-6; i++) /*2 循环计算x(i+1)*/
{ printf("x%d=%f\n",i,x); /*3 抽样显示xi*/
x=1/2.0*(x+a/x); /*4 由xi计算x(i+1)*/
}
printf("x%d=%f\nsqrt(%f)=%f\n",i,x,a,sqrt(a));/*5 显示结果*/
return 0;
}
例题2:求实数a的m次方根,精确到10-5
牛顿迭代公式:f(x)=x m-a,f’(x)=mx m-1.
#include<stdio.h>
#include<math.h>
int main()
{ double a,x;
int i,m;
printf("a m: "); /*提示并 */
scanf("%lf%d",&a,&m); /* 读取被开方数a */ x=a; /*1 取近似值x0=a/2 */
for(i=0; fabs(pow(x,m)-a)>=1e-6; i++) /*2 循环计算x(i+1)*/
{ printf("x%d=%f\n",i,x); /*3 抽样显示xi*/
x=(m-1)*x/m+a/(m*pow(x,m-1)); /*4 由xi计算x(i+1)*/
}
printf("x%d=%f\npow(%f,%d)= \n",i,x,a, m,pow(a,1.0/m));/*5 显示结果*/
return 0;
}
二分法
利用二分法将每次根的范围缩小为上次的一半。
例题1:用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。#include<stdio.h>
#include<math.h>
void main()
{ float xa,xb,x,fx,fa,fb;
xa=-10;xb=10; /*xa,xb也可从键盘输入获得*/
do{
fa=2*xa*xa*xa-4*xa*xa+3*xa-6;
fb=2*xb*xb*xb-4*xb*xb+3*xb-6;
x=(xa+xb)/2;
fx=2*x*x*x-4*x*x+3*x-6;
if(abs(fx)<1e-6) {printf("root=%.2f\n",x);break;}
if(fa*fx<0) xb=x;
else if(fb*fx<0) xa=x;
}while(fabs(xb-xa)>1e-6);
if(fabs(xb-xa)<1e-6) printf("no root!\n");
c语言牛顿迭代法求根}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论