Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Ivan228
0 / 0 / 0
Регистрация: 14.10.2016
Сообщений: 40
1

Решение уравнения c методом касательных (Ньютона)

06.11.2016, 13:23. Просмотров 2716. Ответов 1
Метки нет (Все метки)

На интервале [a;b] с точностью Е(Е > 0) определить значение одного корня уравнения:
tg(7x) + (x^2)^sin(x) + 1
Определить максимальное значение функции на интервале [a;b].
Поиск корня уравнения осуществлять с помощью метода касательных.

С чем связана не корректна работа кода?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
double f(double x)
{
    return tan(7 * x) + x*x*sin(x) + 1; // Значение функции 
}
 
double fp(double x)
{
    return 7 * cos(7 * x)*cos(7 * x) + 2 * x*sin(x) + x*x*cos(x); // Значение производной функции
}
 
double maxim(double a, double eps, double b) //Максимальное значение функции на отрезке
{
    double result = a;
    for (double x = a; x <= b; x = x + eps)
    {
        if (f(x) > f(result))
        {
            result = x;
        }
    }
    return result;
}
 
 
int main()
{
    setlocale(LC_ALL, "Rus");
    double a, b, eps, xn, x;
    cout << "Введите границы отрезка [a;b]";
    cout << "\na = "; cin >> a;
    cout << "b = "; cin >> b;
    cout << "Введите значение погрешности";
    cout << "\nE = "; cin >> eps;
    if (!(a < b))
    { 
        cout << "Неверно указан интервал поиска"<<endl; 
        system("pause");
        return 0; 
    }
    if (!(eps > 0))
    {
        cout << "Значение погрешности должно быть положительным"<<endl;
        system("pause");
        return 0;
    }
    xn = b;
    do
    {
        xn = xn - (f(xn)) / (fp(xn));
    } while (xn - a  >= eps);
    x = (a + xn) / 2;
    cout << "Корень функции: " << x;
    cout << "\nМаксимальное значение функции на заданном отрезке: " << f(maxim(a, eps, b));
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2016, 13:23
Ответы с готовыми решениями:

Решение уравнения методом касательных (метод Ньютона) в С++, С
Доброго времени суток. Помогите решить методом касательных уравнение: 1/x - 2*x=0 Напечатать...

Решение уравнения методом хорд и касательных
Комбінований метод хорд та дотичних x належить Перевожу. Решение уравнения комбинированным...

Решение уравнения методом Ньютона
Здравствуйте, использую код с данного форума для нахождения корня нелинейного уравнения методом...

Решение квадратного уравнения методом Ньютона
напишите прогу метод ньютона на С

Решение уравнения методом Ньютона. Локализация корня
Собственно, программа имеется, все довольно таки просто, но необходимо локализовать корень и найти...

1
afront
1194 / 1044 / 768
Регистрация: 29.02.2016
Сообщений: 3,316
06.11.2016, 14:03 2
Лучший ответ Сообщение было отмечено Ivan228 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <math.h>
using namespace std;
 
double f(double x)
{
    return tan(7 * x) + x*x*sin(x) + 1; // Значение функции 
}
 
double fp(double x)
{
    return 7 * cos(7 * x)*cos(7 * x) + 2 * x*sin(x) + x*x*cos(x); // Значение производной функции
}
 
double maxim(double a, double eps, double b) //Максимальное значение функции на отрезке
{
    double result = a;
    for (double x = a; x <= b; x = x + eps)
    {
        if (f(x) > f(result))
        {
            result = x;
        }
    }
    return result;
}
 
 double Newton(double x0, double epsilon)
        {
            double f0 = f(x0);
            double x = x0;
            while (abs(f(x)) > epsilon)
            {
                x -= f0 / fp(x);
                f0 = f(x);
            }
            return x;
        }
  
int main()
{
    setlocale(LC_ALL, "Rus");
    double a, b, eps, xn, x;
    cout << "Введите границы отрезка [a;b]";
    cout << "\na = "; cin >> a;
    cout << "b = "; cin >> b;
    cout << "Введите значение погрешности";
    cout << "\nE = "; cin >> eps;
    if (!(a < b))
    { 
        cout << "Неверно указан интервал поиска"<<endl; 
        system("pause");
        return 0; 
    }
    if (!(eps > 0))
    {
        cout << "Значение погрешности должно быть положительным"<<endl;
        system("pause");
        return 0;
    }
    x = b;
    Newton(x, eps);
    cout << "Корень функции: " << x;
    cout << "\nМаксимальное значение функции на заданном отрезке: " <<  maxim(a, eps, b) << endl;
    system("pause");
    return 0;
}
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2016, 14:03

Найти решение уравнения на отрезке с точностью е методом Ньютона
найти решение уравнения x3 – 2x2 –4x + 7 = 0 на отрезке с точностью е методом Ньютона. ...

Решение системы нелинейныз алгебраических уравнений методом Ньютона (2 уравнения)
Всем привет, ребята, кто может подсказать, как решается математически по методу Ньютону, разбирался...

Найти корень уравнения методом хорд и методом касательных
На языке программирования DEV C++ 5.8.2 Метод Хорда и Касательный X^3+3x^2-24x-3=0 На отрезке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.