计算方法笔记自用

这学期我们开了一门计算方法和人工智能算法的课程,其实就是数值分析,所以准备记录以下学过的内容。

计算方法

  • 1.非线性方程的求解
    (1)二分法,牛顿法,牛顿迭代法,牛顿下山

    第一个方法就是二分法,二分法比较容易理解,就是再函数的一个端点异号的区间上多次进行对半分的操作,取中点,再根据中点的函数值确定下一个区间,不断进行,最后达到容差的要求,或者迭代的最大次数的要求。
    二分法的特点就是对函数的要求比较低,只需要函数连续即可,不像后面提到的牛顿法对函数和他的一阶导数均有要求。但是二分法的一个显著的缺点就是他的收敛速度非常慢,所以一般用于求初值。精确值再通过其他方法解决即可。
#include<stdio.h> 
#include<math.h> 
int i=0; int n=0; 
double eps=1e-6;
double f(double x){ return exp(x)-2; }
double root[50000]; 
double erfen(double down,double up)
{
double middle=(down+up)/2; 
if(i==100)
{ 
printf("%lf",middle); 
return middle;
  
   }
  if(f(down)*f(up)<0)
  { 
  
  
  if(f(middle)*f(down)<0)
  { 
  
  i++; 
  n++; 
  
  root[n]=middle;
  
  return erfen(down,middle);
  }
  
  else if(f(up)*f(middle)<0)
{ 
	i++;
	n++; 
	root[n]=middle;
return erfen(middle,up); 
}
  else if(f(middle)<1e-6) 
  {
   printf("%.18lf",middle); 
   return middle; 

  }
  }
}
int main(){
FILE*fp;
fp=fopen("out.txt","w");
int a,b; 
int p=0; 
int y;
scanf("%d%d",&a,&b); 
erfen(a,b);
int j=0;
for(j=0;j<i;j++){ 
fprintf(fp,"%.18lf ",root[j]);
p++;    
if(p==5)
{	
	p=0;
	fprintf(fp,"\n"); 
}
}
return 0;
 }

二分法肯定是满足不了需求的所以我们又介绍了定点法
定点法就像生成一个数列,数列的后一项总是前一项的为自变量的函数值
如果这个数列收敛的话,那么函数就一定有零点的。
操作方法就是,把目标函数等于0的式子两边加上x,这样就生成了一个不动点的方程,然后令x为an+1,另一边令为f(an);于是就生成了数列,然后就不断迭代即可。
下面给出核心思想即可

while(fabs(xk-xk+1)<e)
{
xk=xk+1;
xk+1=f(xk);
}

下一篇是牛顿法和牛顿下山法。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值