现在的位置: 首页 > 综合 > 正文

方程近似求解C++

2013年10月14日 ⁄ 综合 ⁄ 共 1074字 ⁄ 字号 评论关闭
 

   看数学书看到的.居然还是某年的软考程序员下午题.很轻松地写出来了,挺有意思.

//	solveEquation.cpp -- 2011-07-19-01.05
#include <iostream>
#include <cmath>

double absoluteValue (const double valA, const double valB) ;
double equation (const double x) ;
double solveEquation (double (* pEquation) (const double x), const double leftEndian, const double rightEndian, const double precision) ;
double absoluteValue (const double vlaA, const double valB) ;

int main (void)
{
	double leftEndian = 2.0, rightEndian = 3.0 ;
	double precision = 0.01 ;
	
	std ::cout << "Result is : " << solveEquation(equation, leftEndian, rightEndian, precision) << std ::endl ;

	return 0 ;
}

double absoluteValue (const double valA, const double valB)
{
	if (valA > valB)
		return valA - valB ;
	else
		return valB - valA ;
}

double equation (const double x)
{
	return 3 - log10(x) ;
}

double solveEquation (double (* pEquation) (const double x), const double leftEndian, const double rightEndian, const double precision)
{
	double a = leftEndian, b = rightEndian ;
	double bisection ;

	do
	{
		bisection = (a + b) / 2 ;
		double tempValue = (* pEquation)(bisection) ;
		if ((* pEquation)(a) * tempValue < 0)
			b = bisection ;
		else if ((* pEquation)(b) * tempValue < 0)
			a = bisection ;
		else
			break ;
	}
	while (absoluteValue(a, b) >= precision)
		;

	return bisection ;
}

抱歉!评论已关闭.