正割法

课本例2--9

#include<iostream>  
#include<math.h>  
using namespace std;  
int main()  
{  
    cout<<"请输入初始值X0:"<<endl;  
    double x0,x1,x;  
    cin>>x0;  
     cout<<"请输入初始值X1:"<<endl;   
	 cin>>x1;
    int i;  
	
    for( i=0;i<50;i++)  
       {  
		   x=x1-(2*x1*x1*x1-5*x1-1)*(x1-x0)/((2*x1*x1*x1-5*x1-1)-(2*x0*x0*x0-5*x0-1))  ;
         if(abs(x-x1)<10e-7)  
            {  
                cout<<x<<endl;  
                break;  
      
             }  
		else
		    {
			   x0=x1;
			   x1=x;
		    }
	   }
    if(i==50)  
        cout<<"超出最大迭代次数"<<endl;  
    else  
        cout<<"迭代次数为:"<<i<<endl; 
	
    return 0;  
  
}  


以下是 Matlab 实现二分法、牛顿法、牛顿下山法和割法代码: 二分法: ```matlab function [x, iter] = bisection(f, a, b, tol, maxiter) % 二分法解方程 f(x) = 0 % f:函数句柄,a:区间左端点,b:区间右端点,tol:容差,maxiter:最大迭代次数 % x:方程的解,iter:实际迭代次数 iter = 0; while iter < maxiter x = (a + b) / 2; if abs(f(x)) < tol break; elseif f(x) * f(a) < 0 b = x; else a = x; end iter = iter + 1; end end ``` 牛顿法: ```matlab function [x, iter] = newton(f, df, x0, tol, maxiter) % 牛顿法解方程 f(x) = 0 % f:函数句柄,df:导函数句柄,x0:迭代初值,tol:容差,maxiter:最大迭代次数 % x:方程的解,iter:实际迭代次数 iter = 0; while iter < maxiter x = x0 - f(x0) / df(x0); if abs(f(x)) < tol break; end x0 = x; iter = iter + 1; end end ``` 牛顿下山法: ```matlab function [x, iter] = newton_downhill(f, df, ddf, x0, tol, maxiter) % 牛顿下山法解方程 f(x) = 0 % f:函数句柄,df:导函数句柄,ddf:二阶导函数句柄,x0:迭代初值,tol:容差,maxiter:最大迭代次数 % x:方程的解,iter:实际迭代次数 iter = 0; while iter < maxiter x = x0 - df(x0) / ddf(x0); if abs(f(x)) < tol break; end x0 = x; iter = iter + 1; end end ``` 割法: ```matlab function [x, iter] = secant(f, x0, x1, tol, maxiter) % 割法解方程 f(x) = 0 % f:函数句柄,x0:迭代初值,x1:迭代初值,tol:容差,maxiter:最大迭代次数 % x:方程的解,iter:实际迭代次数 iter = 0; while iter < maxiter x = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0)); if abs(f(x)) < tol break; end x0 = x1; x1 = x; iter = iter + 1; end end ``` 其中,f、df 和 ddf 分别代表函数、导函数和二阶导函数(牛顿法和牛顿下山法需要导函数和二阶导函数),a、b、x0 和 x1 分别代表区间左端点、区间右端点、迭代初值和迭代初值的两个近似值,tol 和 maxiter 分别代表容差和最大迭代次数。函数返回方程的解 x 和实际迭代次数 iter。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值