#include <math.h>
#include <stdio.h>
using namespace std;
double
f(double x)
{
return 3 * pow(x, 4) + 4 * pow(x, 3) - 12 * pow(x, 2) - 5;
//—Ñ—É–Ω–∫—Ü–∏—è
}
double
df(double x)
{
return 12 * pow(x, 3) + 12 * pow(x, 2) - 24 * x;
//–ø—63–æ–∏–∑–≤–æ–¥–Ω–∞—è
}
/**INDENT** Error@4: Unbalanced parens */
#if 0
double
dixit(double a, double b, double eps)//–º–µ—Ç–æ–¥–¥–∏—Ö–æ—Ç–æ–º–∏–∏, —Ñ—É–Ω—Ü–∏—èf(x) = 0 – Ω–µ–ø—7–µ—7—ã–≤–Ω–∞//–Ω–∞–æ—Ç—7–µ–∑–∫–µ[a;
/**INDENT** Warning@5: Extra ] */
b] – ∏f(a) * f(b) < 0.
{
double c;
do {
c = (a + b) / 2.0;
//–Ω–∞—Ö–æ–¥–∏–º—Ç–æ—á–∫—Éc = (a + b) / 2 if (f(a) * f(c) < 0)
b = c;
/**INDENT** Error@8: Unbalanced parens */
//–µ—Å–ª–∏—ç—Ç–æ—É—Å–ª–æ–≤–∏–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–æ, —Ç–æ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[a;
/**INDENT** Warning@9: Extra ] */
c]
/**INDENT** Error@9: Unmatched 'else' */
else
if (f(b) * f(c) < 0)
a = c;
/**INDENT** Error@10: Unbalanced parens */
//–∏–Ω–∞—á–µ–∫–æ—119–µ–Ω—å–ª–µ–∂–∏—Ç–Ω–∞[c;
/**INDENT** Warning@11: Extra ] */
b]
/**INDENT** Error@11: Unmatched 'else' */
else {
cout << "–ö–æ—175–µ–Ω—å –Ω–µ –Ω–∞–π–¥–µ–Ω" << endl;
//–µ—Å–ª–∏–æ–±–∞—É—Å–ª–æ–≤–∏—è–Ω–µ–≤—ã–ø–æ–ª–Ω—è—é—Ç—Å—è, —Ç–æ–∫–æ—175–Ω—è–Ω–µ—Ç–Ω–∞–¥–∞–Ω–Ω–æ–º–ø—175–æ–º–µ–∂—É—Ç–∫–µreturn 0;
}
} while (fabs(b - a) > eps);
//–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—63–∏—Ç–º–Ω–∞—Ö–æ–∂–¥–µ–Ω–∏—è—Å, –æ–ø–∏—Å–∞–Ω–Ω—ã–π—Å–≤–µ—63—Ö—Éreturn c;
//–≤–æ–∑–≤—63–∞—â–∞–µ–º–∑–Ω–∞—á–µ–Ω–∏–µ—Å–ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
} double
/**INDENT** Error@15: Unbalanced parens */
Hord(double a, double b, double eps)//–º–µ—Ç–æ–¥—Ö–æ—7–¥//—7–∞–∑–±–∏–µ–Ω–∏–µ–æ—Ç—7–µ–∑–∫–∞[a;
/**INDENT** Warning@16: Extra ] */
b] – Ω–∞–¥–≤–∞–æ—Ç—7–µ–∑–∫–∞—Å–ø–æ–º–æ—â—å—é—Ö–æ—7–¥—ã–∏–≤—ã–±–æ—7–µ–Ω–æ–≤–æ–≥–æ–æ—Ç—7–µ–∑–∫–∞–æ—Ç—Ç–æ—á–∫–∏//–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è—Ö–æ—7–¥—ã—Å–æ—Å—å—é–∞–±—Å—Ü–∏—Å—Å–¥–æ–Ω–µ–ø–æ–¥–≤–∏–∂–Ω–æ–π—Ç–æ—á–∫–∏, –Ω–∞–∫–æ—Ç–æ—7–æ–º//—Ñ—É–Ω–∫—Ü–∏—è–º–µ–Ω—è–µ—Ç–∑–Ω–∞–∫–∏—Å–æ–¥–µ—7–∂–∏—Ç—7–µ—à–µ–Ω–∏–µ, –ø—7–∏—á—ë–º–ø–æ–¥–≤–∏–∂–Ω–∞—è—Ç–æ—á–∫–∞//–ø—7–∏–±–ª–∏–∂–∞–µ—Ç—Å—è–∫Œµ-–æ–∫—7–µ—Å—Ç–Ω–æ—Å—Ç–∏—7–µ—à–µ–Ω–∏—è.
{
while (fabs(b - a) > eps)
//–ø–æ–∫–∞–∑–Ω–∞—á–µ–Ω–∏–µ–≤—Ñ—É–Ω–∫—Ü–∏–∏–≤—Ç–æ—á–∫–µb - a – ±–æ–ª—å—à–µ–∑–∞–¥–∞–Ω–Ω–æ–π—Ç–æ—á–Ω–æ—Å—Ç–∏, //–≤—ã–ø–æ–ª–Ω—è–µ–º–∞–ª–≥–æ—119–∏—Ç–º, –æ–ø–∏—Å–∞–Ω–Ω—ã–π–Ω–∏–∂–µ{
a = b - (b - a) * f(b) / (f(b) - f(a));
//—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—è–∞–ø–æ—Ñ–æ—119–º—É–ª–µb = a - (a - b) * f(a) / (f(a) - f(b));
//—119–∞—Å—á–µ—Ç–Ω–æ–≤–æ–≥–æ–∑–Ω–∞—á–µ–Ω–∏—èb – ø–æ—Ñ–æ—119–º—É–ª–µ
} return b;
//–≤–æ–∑–≤—63–∞—â–∞–µ–ºb – ø–æ—Å–ª–µ–≤—ã–ø–æ–ª–Ω–µ–Ω–∏—è—Ü–∏–∫–ª–∞
}
#endif
double
Newton(double x, double &n, double eps)//–º–µ—Ç–æ–¥–ù—å—é—Ç–æ–Ω–∞//–ø—7–æ—Ü–µ—Å—Å–∏—Ç–µ—7–∞—Ü–∏–π—Å–æ—Å—Ç–æ–∏—Ç–≤—Ç–æ–º, —á—Ç–æ–≤–∫–∞—á–µ—Å—Ç–≤–µ//–ø—7–∏–±–ª–∏–∂–µ–Ω–∏–π–∫–∫–æ—7–Ω—é–ø—7–∏–Ω–∏–º–∞—é—Ç—Å—è–∑–Ω–∞—á–µ–Ω–∏—è—Ö0, —Ö1, —Ö2 ‚ 7¶—Ç–æ—á–µ–∫–ø–µ—7–µ—Å–µ—á–µ–Ω–∏—è//–∫–∞—Å–∞—Ç–µ–ª—å–Ω–æ–π–∫–∫—7–∏–≤–æ–π
{
double dx;
n = 0;
while (1) {
dx = f(x) / df(x);
x = x - dx;
if (fabs(dx) < eps)
break;
n++;
if (n > 100)
break;
} return x;
}
double g(double x) { return x - 1.0/df(x) * f(x); }
double
Iter(double x, double b, int n, double eps)
{
double dx;
n = 0;
while (1) {
// dx = b * f(x);
// x = x + dx;
// solve x = g(x) where g(x) = x - lamdda(x)*f(x), g(x) is defined above Iter. Assume lambda(x) = 1/f'(x)
dx = g(x) - x; // dx = g(x) - x
x = g(x); // x = g(x)
if (fabs(dx) < eps)
break;
if (n > 100)
break;
} return x;
}
int main () {
// setlocale(LC_ALL, "rus");
// double a;
// double b;
// double eps;
// double x;
// cout << "–í–≤–µ–¥–∏—Ç–µ –∞ " << endl;
// cin >> a;
// cout << "–í–≤–µ–¥–∏—Ç–µ b" << endl;
// cin >> b;
// cout << "–í–≤–µ–¥–∏—Ç–µ eps" << endl;
// cin >> eps;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –¥–∏—Ö–æ—Ç–æ–º–∏–∏ = %7f", dixit(a, b, eps));
// cout << endl;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º —Ö–æ—63–¥ = %7f", Hord(a, b, eps));
// cout << endl;
// printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ù—å—é—Ç–æ–Ω–∞ = %7f", Newton(a, b, eps));
// cout << endl;
// cout << "–í–≤–µ–¥–∏—Ç–µ x0 " << endl;
// cin >> x;
// cout << endl;
printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(2.5, 2, 3, 0.001));
printf("–ö–æ—63–µ–Ω—å, –Ω–∞–π–¥–µ–Ω–Ω—ã–π –º–µ—Ç–æ–¥–æ–º –ø—63–æ—Å—Ç—ã—Ö –∏—Ç–µ—63–∞—Ü–∏–π = %7f\n", Iter(-2.5, -3, -2, 0.001));
}