【数值方法,水题】UVa 10341 - Solve It
2015-03-25 18:46
495 查看
题意:
解方程:p ∗ e^(−x) + q ∗ sin(x) + r ∗ cos(x) + s ∗ tan(x) + t ∗ x^2 + u = 0 (0 <= x <= 1);
其中0 ≤ p, r ≤ 20 , −20 ≤ q, s, t ≤ 0。(一开始没看见q,s,t<=0, 卡了半天...)
根据上面的条件,设F(x) = p ∗ e^(−x) + q ∗ sin(x) + r ∗ cos(x) + s ∗ tan(x) + t ∗ x^2 + u ;即求0 <= x <= 1时与x轴是否有交点。
可以看出F(x)在该区间内为减函数,判断有无解则只需判断F(0)>=0&&F(1)<=0即可。若有解,则在[0,1]范围内二分求解。
代码如下:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; const double eps = 1e-14; double 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; } int main() { while(scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u) == 6) { double f0 = F(0), f1 = F(1); if(f1 > eps || f0 < -eps) printf("No solution\n"); else { double L = 0, R = 1, M; while(L < R) { M = L+(R-L)/2; if(fabs(F(M)) < eps) break; if(F(M) < 0) R = M; else L = M; } printf("%.4lf\n", M); } } return 0; }View Code
相关文章推荐
- uva 10341 - Solve It(二分查找水题)
- uva 10341 Solve It(二分解方程)
- uva 10341 - Solve It
- UVA 10341 - Solve It(二分)
- uva 10341 Solve It
- uva 10341 Solve It
- uva - 10341 - Solve It(二分查找,数学)
- UVa 10341 Solve It
- UVA - 10341 Solve It (二分法)
- UVA 10341 Solve It
- uva10341 - Solve It
- Uva - 10341 - Solve It(二分)
- UVA 10341 Solve It 二分
- UVa 10341 - Solve It
- UVa 10341-Solve It
- uva 10341-Solve It 二分求值
- UVA 10341 - Solve It
- UVA 10341 Solve It 解方程 二分查找+精度
- uva10341 - solve it (二分查找)
- UVA 10341 Solve It