Admin- Admin
- 帖子数 : 46
注册日期 : 10-05-13
由 Admin 周六 五月 15, 2010 4:02 pm
- 代码:
/*
实验三 非线性方程实根的正割法
一、目的与要求:掌握解非线性方程实根的正割法的上机编程运算.
二、实验内容
问题1. 用正割法求x^3-0.2x^2-0.2x-1.2=0在区间 [1,1.5]内的实根(精确到1e-3).
问题2. 用双点弦法解方程x=exp(-x)
*/
// 用双点弦法求解 问题2中的方程x = exp(-x),不妨设f(x) = x*exp(x)-1, 设x0 = 0, x1 = 1
// 1e-5为容许误差
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int k;
double x,xi,xj,fxi,fxj,err;
double f(double x);
k = 0;
xi = 0.0;
xj = 1.0;
err = fabs(xi - xj);
while ( err > 0.00001 )
{
// 迭代序列顺序 xi,xj,x...
fxi = f(xi);
fxj = f(xj);
x = xj - fxj*(xj - xi)/(fxj - fxi);
xi = xj;
xj = x;
err = fabs(xi - xj);
k++;
}
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; // 方程中的函数f(x)在解x点的值
return (0);
}
double f(double x)
{
return ( x*exp(x) - 1.0 );
}