Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/88: Рейтинг темы: голосов - 88, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 11

Комбинированный метод хорд и касательных

25.10.2017, 21:51. Показов 17329. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, добрый вечер, не могли бы Вы помочь?
Есть этот код, с помощью него нужно чтобы при заданном интервале выдавало ответ. Мой интервал [-5.2;-2.66] и [1.33;4.2], когда ввожу эти интервалы, пишет нет корней, не могли бы помочь решить данную проблему?

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <cmath>
#include<iomanip>
#include<conio.h>
using namespace std;
int k = 0;
 
float f(float x) //функция по которой вычисляем  нужные нам корни 
{
    float y;
    y = pow(x, 3) - 2 * pow(x, 2) - 19 * x - 20;
    return y;
}
 
float f1(float x) { //первая производная
    float z;
    z = 3 * pow(x, 2) - 4 * x - 19;
    return z;
}
 
float f2(float x) { //вторая производная
    float u;
    u = 6 * x - 4;
    return u;
}
 
float function(float a, float b, float e) {// функция вычисляет по методу хорд и касательных 
    float c;
    do {
        if (f(a) * f2(a) < 0) {//Условие начальной точки для метода хорд
            a = a + (b - a) / (f(a) - f(b))*f(a); //формулы расчета по методу хорд
            b = b - f(b) / f1(b);
        }
        else if (f(a) * f2(a) > 0) {//Условие начальной точки для метода касательных
            a = a - f(a) / f1(a); //формулы расчета по методу касательных
            b = b + (b - a) / (f(b) - f(a))*f(b);
        }
        else
        {
            cout << "can't solve\n";
            break;
        }
        k++;
    } while (fabs(b - a) > e);//Построение хорд и касательных продолжается до достижения необходимой точности решения е
    return (a + b) / 2.0;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    double a, b, e = 0.00001, F, pr = 1;
    cout << "................................................................................";
    cout << ".                                                                              .";
    cout << "." << setw(55) << "МЕТОД №4. КОМБИНИРОВАННЫЙ МЕТОД." << "                       .";
    cout << ".                                                                              .";
    cout << "................................................................................";
    cout << endl;
    while (pr != 0) {
        cout << "--------------------------------------------------------------------------------";
        cout << "|" << setw(53) << "Введите начало отрезка a" << "                         |";
        cout << "--------------------------------------------------------------------------------" << endl;
        cin >> a;
        cout << endl;
        cout << "--------------------------------------------------------------------------------";
        cout << "|" << setw(53) << "Введите конец отрезка b" << "                         |";
        cout << "--------------------------------------------------------------------------------" << endl;
        cin >> b;
        cout << endl;
 
        cout << "________________________________________________________________________________" << endl;
        if (f(a)*f(b) < 0)//отрезок на концах которых функция имеет разный знак
        {
            pr = 0;//находим значение функции от а и b
            cout << setw(40) << "f(a) = " << "f(" << a << ") = " << f(a) << endl;
            cout << setw(40) << "f(b) = " << "f(" << b << ") = " << f(b) << endl;
            cout << endl;
        }
        else cout << setw(75) << "КОРНЕЙ НЕТ! ПОПЫТАЙТЕСЬ ВВЕСТИ ДРУГИЕ ЗНАЧЕНИЯ НАЧАЛА И КОНЦА ОТРЕЗКА!" << endl;
        cout << "________________________________________________________________________________";
        cout << endl;
    }
    cout << "РЕЗУЛЬТАТ" << endl;//выводим результат на экран 
    cout << function(a, b, e) << endl;
    cout << "Количество итераций: " << k << endl;
    cout << "Проверка" << endl;
    F = function(a, b, e);
    cout << setprecision(10) << f(F);
    cout << endl;
    _getch();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2017, 21:51
Ответы с готовыми решениями:

Комбинированный метод хорд и касательных
Сдравствуйте господа программисты. Помогите решить задачу. Нужно написать программу на Си, которая решает уравнение комбинированным...

Комбинированный метод хорд и касательных.
Помогите найти ошибку!!! Считает только 1 раз, не могу понять почему условие не срабатывает #include &quot;stdafx.h&quot; #include...

Комбинированный метод хорд и касательных
Добрый вечер! Знаю, что эта задачка уже, наверное, надоела, но все же может кто поможет!! Нужно написать программу, которая ищет корни...

3
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
26.10.2017, 11:01
вы наверное функцию записали не верно, ваша ф-я имеет один корень на отрезке -5,-2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float function(float a, float b, float e) {// функция вычисляет по методу хорд и касательных 
    do {
        if (f(a) * f2(a) < 0) 
            a += (b - a) / (f(a) - f(b))*f(a); 
        else 
            a -= f(a) / f1(a);
        if (f(b) * f2(b) < 0)
            b += (a - b) / (f(b) - f(a))*f(b);
        else
            b -= f(b) / f1(b);
 
        k++;
    } while (fabs(a - b) > 2*e);//Построение хорд и касательных продолжается до достижения необходимой точности решения е
    return (a + b) / 2.0;
}
1
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 11
26.10.2017, 13:31  [ТС]
спасибо большое, но не могу понять почему не получается вывести то что мне надо.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
float function(float a, float b, float e) {// функция вычисляет по методу хорд и касательных 
    float res;
    do {
        if (f(a) * f2(a) < 0) {
            a += a - (f(a) / (f(b) - f(a))*(b - a)); //формулы расчета по методу хорд
            b = b - f(b) / f1(b);
        }
        else
            a -= f(a) / f1(a);
 
        if (f(b) * f2(b) < 0) {
            a = a - f(a) / f1(a); //формулы расчета по методу касательных
            b = b - (f(b) / (f(a) - f(b))*(a - b));
        }
        else
            b -= f(b) / f1(b);
        res = (a + b) / 2;
        k++;
    } while ((a - b) > 2 * e);//Построение хорд и касательных продолжается до достижения необходимой точности решения е
    return res;
}
в этом кусочке оно считает и в итоге должно вывести Е по формуле (a + b) / 2 , но оно выводит совсем не тот результат
Миниатюры
Комбинированный метод хорд и касательных  
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,630
26.10.2017, 14:34
Skiper1, у вас у заданной функции нет нулей на интервале [-5.2;-2.66], его нужно продлить до -2, корень равен -2.43134, может поэтому
Миниатюры
Комбинированный метод хорд и касательных   Комбинированный метод хорд и касательных  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2017, 14:34
Помогаю со студенческими работами здесь

Метод хорд и касательных
Господа программисты, очень нужна ваша помощь. Нужно написать программу на C++, в ней решить любое уравнение от балды методом хорд и...

Не работает метод хорд и касательных
Должно бить в районе 2,5-2,6 #include &lt;iostream.h&gt; #include &lt;math.h&gt; double f(double x) ; double df(double x); int main() { ...

Метод хорд, касательных, золотого сечения
Написать программу которая решает какой из методов дает более точный результат для уравнения (уравнение свое), Хорд/касательных/золотого...

Решение нелинейного уравнения. Метод хорд и касательных
Написал я программку для решения, но вот незадача: Не находит их на некоторых отрезках. Уравнение: ln(x+1)-p/(x^2)=0 p = -1...1 ...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru