例题2.26 解方程 UVa10341

1.题目描述:点击打开链接

2.解题思路:本题要求解一个超越方程,通过观察发现,方程的前五项在区间[0,1]上单调递减,因此如果端点F(0)≤0或F(1)≥0,则无解。否则,一定有解。此时可以利用二分搜素来求出解。由于实数区间可以无限二分,因此通常是当区间长度小于特定值eps时终止,例如eps=1e-5;也可以当迭代次数超过一定值时终止,例如100次。

3.代码:

#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;int p, q, r, s, t, u;double F(double x){return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;}const double eps = 1e-14;int main(){//freopen("t.txt", "r", stdin);while (~scanf("%d%d%d%d%d%d", &p, &q, &r, &s, &t, &u)){double f0 = F(0), f1 = F(1);if (f1 > eps || f0 < -eps)printf("No solution\n");else{double x = 0, y = 1, m;for (int i = 0; i < 100; i++)//限制迭代次数{m = x + (y – x) / 2;if (F(m) < 0)y = m;else x = m;}printf("%.4lf\n", m);}}return 0;}

,感受最美的风景。你曾经说,

例题2.26 解方程 UVa10341

相关文章:

你感兴趣的文章:

标签云: