• Source
    1. #include <math.h>
    2. #include <stdio.h>
    3. using namespace std;
    4.  
    5. double
    6. f(double x)
    7. {
    8. return 3 * pow(x, 4) + 4 * pow(x, 3) - 12 * pow(x, 2) - 5;
    9. //—Ñ—É–Ω–∫—Ü–∏—è
    10. }
    11. double
    12. df(double x)
    13. {
    14. return 12 * pow(x, 3) + 12 * pow(x, 2) - 24 * x;
    15. //–ø—63–æ–∏–∑–≤–æ–¥–Ω–∞—è
    16. }
    17.  
    18.  
    19.  
    20. /**INDENT** Error@4: Unbalanced parens */
    21. #if 0
    22. double
    23. dixit(double a, double b, double eps)//–º–µ—Ç–æ–¥–¥–∏—Ö–æ—Ç–æ–º–∏–∏, —Ñ—É–Ω—Ü–∏—èf(x) = 0 – Ω–µ–ø—7–µ—7—ã–≤–Ω–∞//–Ω–∞–æ—Ç—7–µ–∑–∫–µ[a;
    24. /**INDENT** Warning@5: Extra ] */
    25. b] – ∏f(a) * f(b) < 0.
    26. {
    27. double c;
    28. do {
    29. c = (a + b) / 2.0;
    30. //–Ω–∞—Ö–æ–¥–∏–º—Ç–æ—á–∫—Éc = (a + b) / 2 if (f(a) * f(c) < 0)
    31. b = c;
    32. /**INDENT** Error@8: Unbalanced parens */
    33. //–µ—Å–ª–∏—ç—Ç–æ—É—Å–ª–æ–≤–∏–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–æ, —Ç–æ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[a;
    34. /**INDENT** Warning@9: Extra ] */
    35. c]
    36. /**INDENT** Error@9: Unmatched 'else' */
    37. else
    38. if (f(b) * f(c) < 0)
    39. a = c;
    40. /**INDENT** Error@10: Unbalanced parens */
    41. //–∏–Ω–∞—á–µ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[c;
    42. /**INDENT** Warning@11: Extra ] */
    43. b]
    44. /**INDENT** Error@11: Unmatched 'else' */
    45. else {
    46. cout << "–ö–æ—175–µ–Ω—å –Ω–µ –Ω–∞–π–¥–µ–Ω" << endl;
    47. //–µ—Å–ª–∏–æ–±–∞—É—Å–ª–æ–≤–∏—è–Ω–µ–≤—ã–ø–æ–ª–Ω—è—é—Ç—Å—è, —Ç–æ–∫–æ—175–Ω—è–Ω–µ—Ç–Ω–∞–¥–∞–Ω–Ω–æ–º–ø—175–æ–º–µ–∂—É—Ç–∫–µreturn 0;
    48. }
    49. } while (fabs(b - a) > eps);
    50. //–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—63–∏—Ç–º–Ω–∞—Ö–æ–∂–¥–µ–Ω–∏—è—Å, –æ–ø–∏—Å–∞–Ω–Ω—ã–π—Å–≤–µ—63—Ö—Éreturn c;
    51. //–≤–æ–∑–≤—63–∞—â–∞–µ–º–∑–Ω–∞—á–µ–Ω–∏–µ—Å–ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
    52. } double
    53. /**INDENT** Error@15: Unbalanced parens */
    54. Hord(double a, double b, double eps)//–º–µ—Ç–æ–¥—Ö–æ—7–¥//—7–∞–∑–±–∏–µ–Ω–∏–µ–æ—Ç—7–µ–∑–∫–∞[a;
    55. /**INDENT** Warning@16: Extra ] */
    56. b] – Ω–∞–¥–≤–∞–æ—Ç—7–µ–∑–∫–∞—Å–ø–æ–º–æ—â—å—é—Ö–æ—7–¥—ã–∏–≤—ã–±–æ—7–µ–Ω–æ–≤–æ–≥–æ–æ—Ç—7–µ–∑–∫–∞–æ—Ç—Ç–æ—á–∫–∏//–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è—Ö–æ—7–¥—ã—Å–æ—Å—å—é–∞–±—Å—Ü–∏—Å—Å–¥–æ–Ω–µ–ø–æ–¥–≤–∏–∂–Ω–æ–π—Ç–æ—á–∫–∏, –Ω–∞–∫–æ—Ç–æ—7–æ–º//—Ñ—É–Ω–∫—Ü–∏—è–º–µ–Ω—è–µ—Ç–∑–Ω–∞–∫–∏—Å–æ–¥–µ—7–∂–∏—Ç—7–µ—à–µ–Ω–∏–µ, –ø—7–∏—á—ë–º–ø–æ–¥–≤–∏–∂–Ω–∞—è—Ç–æ—á–∫–∞//–ø—7–∏–±–ª–∏–∂–∞–µ—Ç—Å—è–∫Œµ-–æ–∫—7–µ—Å—Ç–Ω–æ—Å—Ç–∏—7–µ—à–µ–Ω–∏—è.
    57. {
    58. while (fabs(b - a) > eps)
    59. //–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—119–∏—Ç–º, –æ–ø–∏—Å–∞–Ω–Ω—ã–π–Ω–∏–∂–µ{
    60. a = b - (b - a) * f(b) / (f(b) - f(a));
    61. //—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—è–∞–ø–æ—Ñ–æ—119–º—É–ª–µb = a - (a - b) * f(a) / (f(a) - f(b));
    62. //—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—èb – ø–æ—Ñ–æ—119–º—É–ª–µ
    63. } return b;
    64. //–≤–æ–∑–≤—63–∞—â–∞–µ–ºb – ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
    65. }
    66.  
    67. #endif
    68.  
    69. double
    70. Newton(double x, double &n, double eps)//–º–µ—Ç–æ–¥–ù—å—é—Ç–æ–Ω–∞//–ø—7–æ—Ü–µ—Å—Å–∏—Ç–µ—7–∞—Ü–∏–π—Å–æ—Å—Ç–æ–∏—Ç–≤—Ç–æ–º, —á—Ç–æ–≤–∫–∞—á–µ—Å—Ç–≤–µ//–ø—7–∏–±–ª–∏–∂–µ–Ω–∏–π–∫–∫–æ—7–Ω—é–ø—7–∏–Ω–∏–º–∞—é—Ç—Å—è–∑–Ω–∞—á–µ–Ω–∏—è—Ö0, —Ö1, —Ö2 ‚ 7¶—Ç–æ—á–µ–∫–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è//–∫–∞—Å–∞—Ç–µ–ª—å–Ω–æ–π–∫–∫—7–∏–≤–æ–π
    71. {
    72. double dx;
    73. n = 0;
    74. while (1) {
    75. dx = f(x) / df(x);
    76. x = x - dx;
    77. if (fabs(dx) < eps)
    78. break;
    79. n++;
    80. if (n > 100)
    81. break;
    82. } return x;
    83. }
    84.  
    85. double g(double x) { return x - 1.0/df(x) * f(x); }
    86. double
    87. Iter(double x, double b, int n, double eps)
    88. {
    89. double dx;
    90. n = 0;
    91. while (1) {
    92.  
    93. // dx = b * f(x);
    94. // x = x + dx;
    95.  
    96. // solve x = g(x) where g(x) = x - lamdda(x)*f(x), g(x) is defined above Iter. Assume lambda(x) = 1/f'(x)
    97. dx = g(x) - x; // dx = g(x) - x
    98. x = g(x); // x = g(x)
    99.  
    100. if (fabs(dx) < eps)
    101. break;
    102. if (n > 100)
    103. break;
    104. } return x;
    105. }
    106.  
    107.  
    108. int main () {
    109.  
    110. // setlocale(LC_ALL, "rus");
    111. // double a;
    112. // double b;
    113. // double eps;
    114. // double x;
    115. // cout << "–í–≤–µ–¥–∏—Ç–µ –∞ " << endl;
    116. // cin >> a;
    117. // cout << "–í–≤–µ–¥–∏—Ç–µ b" << endl;
    118. // cin >> b;
    119. // cout << "–í–≤–µ–¥–∏—Ç–µ eps" << endl;
    120. // cin >> eps;
    121. // printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –¥–∏—Ö–æ—Ç–æ–º–∏–∏ = %7f", dixit(a, b, eps));
    122. // cout << endl;
    123. // printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º —Ö–æ—63–¥ = %7f", Hord(a, b, eps));
    124. // cout << endl;
    125. // printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ù—å—é—Ç–æ–Ω–∞ = %7f", Newton(a, b, eps));
    126. // cout << endl;
    127. // cout << "–í–≤–µ–¥–∏—Ç–µ x0 " << endl;
    128. // cin >> x;
    129. // cout << endl;
    130. printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(2.5, 2, 3, 0.001));
    131. printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(-2.5, -3, -2, 0.001));
    132. }
    133.