计算方法——二分法实验报告

实验一题目:方程求根
完成日期:2019年 3 月 11 日
1、实验目的
用不同方法求任意实函数方程f(x)=0在自变量[a,b]内或某一点附近的实根。并比较方法的优劣性。
2、实验内容(实验题目与内容说明)
二分法
对方程f(x)=0在[a,b]内求根。先判断在所给区间内是否有解,有则继续运行,无则打印“无解”并终止运行,令k=-1。
将所给区间二分,令temp=(a+b)/2.0,判断是否f(a)f(temp)<0,是则令b=temp,否则a=temp,k+1,判断(1/pow(2,k+1)(b0-a0))是否小于误差范围,若不是,继续二分循环,若是,结束循环,打印结果。
3、算法设计(核心代码或全部代码)
在这里插入图片描述

double method(double num)
{
	//return (num*num-2);
	return exp(num)+10*num-2;
}

int main()
{
	cout<<"请输入区间[a,b]:"<<endl;
	double a,b,range;
	cout << "a=";
	cin>>a;
	cout << "b=";
	cin >> b;
	cout << "请输入误差范围:" << endl;
	cin >> range;
	double a0,b0;
	a0=a;b0=b;
	double temp;
	int k=-1;
	if(method(a)*method(b)>0)
		cout<<"输入区间内无解"<<endl;
	else
	{
		do
		{
			temp = (b+a)/2.0;
			if(method(a)*method(temp)<0)
				b= temp;
			else
				a= temp;
			k++;
			if(k == 0)
			{
				cout<<"a   : "<<a<<endl;
				cout<<"b   : "<<b<<endl;
				cout<<"temp:"<<temp<<endl<<endl;
			}
			else
			{
				cout<<"第"<<k<<"次:"<<endl;
				cout<<"a   : "<<a<<endl;
				cout<<"b   : "<<b<<endl;
				cout<<"temp:"<<temp<<endl;
				cout<<"y:"<<fabs(method(temp))<<endl;
				cout<<endl;
			}
		}
		while(abs(1/pow(2,k+1)*(b0-a0))>=range);
	
	cout<<"解为:  x="<<temp<<endl<<"     f(x)="<<method(temp)<<endl;
	}

return 0;
}

4、运行与测试(测试数据和实验结果分析)
测试数据:a=0,b=1,误差范围range=0.0005,在这里插入图片描述

5、总结与心得
通过用c++实现用计算机计算二分法,加深了对二分法流程的了解,比如二分的起点是中点代入方程再进行判断是否达到误差范围而停止循环,而不是计算出中点为起点,这样会导致计算次数少一次,而达不到误差要求。虽然从结果来看,实现了二分的要求,但代码并不完善,虽然使用c++但用的是面向过程的,并没有用类,代码的复用性很差,换个方程使用二分法只能在代码中修改method(double num)方法实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值