UVa 10341 Solve It (牛顿法解超越方程)
来源:互联网 发布:淘宝联盟怎么自己买 编辑:程序博客网 时间:2024/05/20 23:32
10341 - Solve It
Time limit: 3.000 seconds
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=1282
Solve the equation:
p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0
where 0 <= x <= 1.
Input
Input consists of multiple test cases and terminated by an EOF. Each test case consists of 6 integers in a single line: p, q, r, s, t and u (where0 <= p,r <= 20 and -20 <= q,s,t <= 0). There will be maximum 2100 lines in the input file.
Output
For each set of input, there should be a line containing the value of x, correct upto 4 decimal places, or the string "No solution", whichever is applicable.
Sample Input
0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1
Sample Output
0.7071
No solution
0.7554
参考:维基百科——牛顿法
注意:
1. 根据系数的范围知道方程左端是递减的。(可以使用零点定理)
2. 如果f'(x)不为0, 那么牛顿法将具有平方收敛的性能.。粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
PS:你也可以用二分法,只不过慢一点而已。
完整代码:
/*0.019s*/#include <cstdio>#include <cmath>int p, q, r, s, t, u;double x;inline double fun(double x){return p * exp(-x) + q * sin(x) + r * cos(x) + s * tan(x) + t * x * x + u;}///导数inline double fun2(double x){return -p * exp(-x) + q * cos(x) - r * sin(x) + s / (cos(x) * cos(x)) + 2 * t * x;}int main(void){while (~scanf("%d%d%d%d%d%d", &p, &q, &r, &s, &t, &u)){double x1 = fun(0.0), x2 = fun(1.0);if (x1 == 0){puts("0.0000");continue;}if (x2 == 0){puts("1.0000");continue;}if (x1 * x2 > 0){puts("No solution");continue;}x = 0.5;///从0.5开始double tmp = 0.0;while (fabs(x - tmp) > 1e-3)///想保险点的话可以写1e-6(保两位){tmp = x;x -= fun(x) / fun2(x);}printf("%.4f\n", x);}return 0;}
- UVa 10341 Solve It (牛顿法解超越方程)
- UVA 10341 Solve It 解方程 二分查找+精度
- UVA 10341 Solve It (解方程 二分查找+精度)
- UVA 10341Solve 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
- Uva 10341 Solve It
- UVa:10341 Solve It
- UVA 10341 Solve It
- UVa 10341 Solve It
- uva 10341 Solve It
- 抽象abstract
- android学习笔记18:Dom和Dom4j解析XML
- java中ArrayList 、LinkList区别
- jQuery性能优化指南
- SQL Server Driver Timeout expired
- UVa 10341 Solve It (牛顿法解超越方程)
- 阿里巴巴面试题--数组
- 强大的矩阵奇异值分解(SVD)及其应用
- 字符串中单词的个数(状态机的使用)
- CSS Hack浏览器兼容IE6+IE7+IE8+IE9+FF
- 数据索引
- 复杂的列表布局 开发思路
- 69.旋转数组中的最小元素
- Button 图文混排