这个程序很简单,不加注释都可以看明白
Code:
// test.cpp
/*
实验一 非线性方程实根的二分法
一、目的与要求: 掌握解非线性方程实根的二分法的上机编程运算.
二、实验内容
问题1. 用区间二分法求方程x^3-x-1=0在[1,2]的近似根,准确到1e-3,并求若近似根准确到1e-3至少要二分多少次?
问题2. 用区间二分法求方程x^3-2x^2-4x-7=0 在[3,4]内的根,精确到1e-3.
*/
// 下面的程序仅解决问题2
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a,b,x,err;
double f(double x);
int sgn(double x);
int temp, k = 0;
a = 3.0;
b = 4.0;
err = b-a;
while (err >= 0.001)
{
x = (b+a)/2.0;
temp = sgn(f(x));
if (temp == 0)
break;
else if (temp == sgn(f(a)))
a = x;
else
b = x;
k++;
err = err/2.0;
}
x = (b+a)/2.0;
cout << "K-th iteration: " << k << endl;
cout << "err= " << setprecision(12) << err << endl;
cout << "x= " << setprecision(12) << x << endl;
cout << "f(x)= " << setprecision(12) << f(x) << endl;
return 0;
}
// f(x)
double f(double x)
{
return (pow(x,3.0) - 2.0*pow(x,2.0) - 4.0*x - 7.0);
}
//符号函数
int sgn(double x)
{
if (x > 0) return (1);
if (x < 0) return (-1);
return (0);
}
Code:
// test.cpp
/*
实验一 非线性方程实根的二分法
一、目的与要求: 掌握解非线性方程实根的二分法的上机编程运算.
二、实验内容
问题1. 用区间二分法求方程x^3-x-1=0在[1,2]的近似根,准确到1e-3,并求若近似根准确到1e-3至少要二分多少次?
问题2. 用区间二分法求方程x^3-2x^2-4x-7=0 在[3,4]内的根,精确到1e-3.
*/
// 下面的程序仅解决问题2
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a,b,x,err;
double f(double x);
int sgn(double x);
int temp, k = 0;
a = 3.0;
b = 4.0;
err = b-a;
while (err >= 0.001)
{
x = (b+a)/2.0;
temp = sgn(f(x));
if (temp == 0)
break;
else if (temp == sgn(f(a)))
a = x;
else
b = x;
k++;
err = err/2.0;
}
x = (b+a)/2.0;
cout << "K-th iteration: " << k << endl;
cout << "err= " << setprecision(12) << err << endl;
cout << "x= " << setprecision(12) << x << endl;
cout << "f(x)= " << setprecision(12) << f(x) << endl;
return 0;
}
// f(x)
double f(double x)
{
return (pow(x,3.0) - 2.0*pow(x,2.0) - 4.0*x - 7.0);
}
//符号函数
int sgn(double x)
{
if (x > 0) return (1);
if (x < 0) return (-1);
return (0);
}