/*
实验三 非线性方程实根的正割法
一、目的与要求:掌握解非线性方程实根的正割法的上机编程运算.
二、实验内容
问题1. 用正割法求x^3-0.2x^2-0.2x-1.2=0在区间 [1,1.5]内的实根(精确到1e-3).
问题2. 用双点弦法解方程x=exp(-x)
*/
// 用单点弦法求解 问题1中的方程,不妨设为x0 = 1.5, x1 = 1
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int k;
double x0,fx0,x,xk,fxk,err;
double f(double x);
k = 0;
x0 = 1.5;
fx0 = f(x0);
xk = 1.0;
err = 1.0;
while ( err > 0.001 )
{
x = xk;
fxk = f(xk);
xk = xk - fxk*(xk - x0)/(fxk - fx0);
err = fabs(x-xk);
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 ( pow(x,3) - 0.2*pow(x,2) - 0.2*x - 1.2 );
}
实验三 非线性方程实根的正割法
一、目的与要求:掌握解非线性方程实根的正割法的上机编程运算.
二、实验内容
问题1. 用正割法求x^3-0.2x^2-0.2x-1.2=0在区间 [1,1.5]内的实根(精确到1e-3).
问题2. 用双点弦法解方程x=exp(-x)
*/
// 用单点弦法求解 问题1中的方程,不妨设为x0 = 1.5, x1 = 1
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int k;
double x0,fx0,x,xk,fxk,err;
double f(double x);
k = 0;
x0 = 1.5;
fx0 = f(x0);
xk = 1.0;
err = 1.0;
while ( err > 0.001 )
{
x = xk;
fxk = f(xk);
xk = xk - fxk*(xk - x0)/(fxk - fx0);
err = fabs(x-xk);
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 ( pow(x,3) - 0.2*pow(x,2) - 0.2*x - 1.2 );
}