本文主要是介绍11(非线性方程求解)不动点迭代法求函数根,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
不动点迭代法求函数根(非线性方程求解)
【问题描述】在[a,b]区间内寻找方程x**5-2*x-1=0的根的初始近似值位置,确定不动点迭代的初始点(可能有多个),然后使用不动点迭代法求方程的根(可能有多个根)。前后两次迭代的差的绝对值小于delta后停止迭代。
【输入形式】在屏幕上输入3个数,依次为区间左端点值a、右端点值b和所求根的精度值。各数间都以一个空格分隔。根据输入的所求根的精度值可求得delta。测试用例的输入满足:b>a, 1<=d<=8, d为正整数。
【输出形式】每一行输出一个根,保留d位小数。根据a、b的值,可能荐在0或1或多个根。若在区间[a, b]内没有根,则输出error。
【样例1输入】
-1.2 1.5 3
【样例1输出】
-1.000
-0.519
1.291
【样例1说明】输入:左端点a值为-1.2,右端点b值为1.5,前后两次迭代的差的绝对值小于delta=10**(-3)后停止迭代。输出:从小到大顺序输出三个根的值,保留3位小数。
【样例2输入】
-2 -1.2 3
【样例2输出】
error
【样例2说明】输入:左端点a值为-2,右端点b值为-1.2,前后两次迭代的差的绝对值小于delta=10**(-3)后停止迭代。输出:error,表示在区间[-2, -1.2]内没有根。
【评分标准】根据输入得到的输出准确
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>using namespace std;double func(double x)//原函数
{return pow(x, 5) - 2 * x - 1;
}
double g_1(double x)//x=g_1(x) 求出-0.519
{return (pow(x, 5) - 1) / 2;
}
double g_2(double x)//x=g_2(x) 求出-1.000和1.291
{double result=pow((2 * x + 1), (1 / 5));if ((2 * x +1) < 0){return -result;}else
这篇关于11(非线性方程求解)不动点迭代法求函数根的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!