Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114

Решить уравнение с заданной точностью методом итераций

09.03.2018, 20:59. Показов 7062. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уравнение x – sinx – 0,25 = 0 на отрезке [–5, 5] с точностью e методом итерации
Помогите наладить код плиз,

В консоли ввожу 1.х=6 х=8 - выходит (соблюдены условия отрезка) 2. х=-5 е=0,001 и начинается бесконечная итерация , если х=5 е=8 выходит из консоли без вывода

Первый раз сталкиваюсь с итерацией так должно быть или нет?
Если да , то как ограничить итерацию в пределах 100?


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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return x-(sin(x))-0.25;
}
 
 
int main()
{
    double x;
    double eps;
    cout<<"Vvedite x: ";cin>>x;
      if (x >= -5 && x <= 5)
    cout<<"Vvedite eps: ";cin>>eps;
    for(double iter = 1; eps < fabs(f(x)); iter = iter + 1)
    {
        system("cls");
        cout<<"Iteration: "<<setprecision(5)<<iter<<endl;
        cout<<"x    = "<<x   <<endl;
        cout<<"f(x) = "<<f(x)<<endl;
      
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2018, 20:59
Ответы с готовыми решениями:

Решить уравнение методом итераций
Здравствуйте,помогите пожалуйста разобраться,4 уравнение,с методом дихотомии разобрался,а с итерацией никак не выходит

Решить уравнение методом простых итераций
Помогите решить уравнение х^4+2*x^3-x-1 на интервале #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; //Функция ...

Решить уравнение методом простых итераций
Дано : 1) ln(x)-x+1,8=0 ответ 2,8459 2) (z^3) -z-0,9=0 ответ 1,3007 #include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include...

18
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.03.2018, 21:11
Точку или запятую вводишь?
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
09.03.2018, 21:12  [ТС]
и точку и запятую все равно беск итерация или выход(
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.03.2018, 21:21
Должна быть точка. И x должен изменяться как-то.
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
09.03.2018, 21:50  [ТС]
счет итераций идет быстрый
и х не изменяется
Миниатюры
Решить уравнение с заданной точностью методом итераций  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.03.2018, 22:09
Я и без этого вижу, что не меняется. У тебя в программе изменения не предусмотрены. Допиливай.
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 10:04  [ТС]
А что именно нужно сделать, дописать что-то или наоборот удалить и переписать?
0
 Аватар для Recrut_rf
388 / 334 / 65
Регистрация: 14.10.2014
Сообщений: 1,461
10.03.2018, 10:40
Цитата Сообщение от kilo45 Посмотреть сообщение
А что именно нужно сделать, дописать что-то или наоборот удалить и переписать?
Научиться пользоваться дебагером


Выше было же сказано:
Цитата Сообщение от nmcf Посмотреть сообщение
x должен изменяться как-то
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
10.03.2018, 11:02
Метод итераций это:
1. привести уравнение к виду
x=f(x), т.е. для Вашего уравнения:
f(x)=sin(x)+0.25

C++
1
2
3
4
double f(double x)
{
    return sin(x)+0.25;
}
2. Проверяете, что модуль производной меньше 1.
У Вас это f'(x)=cos(x), т.е. подходят почти все значения, кроме кратных M_PI

3. Организуете цикл
C++
1
2
3
4
5
6
while( fabs(x-f(x))>eps)
{
    x=f(x);
    cout<<"f(x) = "<<f(x)-x<<endl;
}
cout<<"корень="<< x<<endl;
1
 Аватар для Recrut_rf
388 / 334 / 65
Регистрация: 14.10.2014
Сообщений: 1,461
10.03.2018, 11:39
Цитата Сообщение от kilo45 Посмотреть сообщение
А что именно нужно сделать, дописать что-то или наоборот удалить и переписать?
В общем, с точки зрения математики лично я не совсем понял, что здесь происходит , но с точки зрения программирования, нужно было организовать выход из цикла -

C++
1
2
3
4
5
6
7
8
for(double iter = 1; eps < fabs(f(x)); iter = iter + 1)
    {
        system("cls");
        cout<<"Iteration: "<<setprecision(5)<<iter<<endl;
        cout<<"x    = "<<x   <<endl;
        cout<<"f(x) = "<<f(x)<<endl;
      
    }
а в данном куске кода его нет, так как счётчик "привязан" к переменной iter
Цитата Сообщение от kilo45 Посмотреть сообщение
for(double iter = 1; eps < fabs(f(x)); iter = iter + 1)
(кстати счётчик должен быть целочисленным - с double оно конечно тоже будет работать - но это не правильно, и зачем использовать
Цитата Сообщение от kilo45 Посмотреть сообщение
iter = iter + 1
) есть же инкремент iter++) Вот переменная iter и "накручивает + 1" до бесконечности , а значение
Цитата Сообщение от kilo45 Посмотреть сообщение
eps < fabs(f(x))
посчиталось один раз и всё - и если оно истинно - имеем бесконечный цикл.

Добавлено через 5 минут
kilo45, я не знаю - правильный ли твой код с точки зрения математики (в смысле полученного результата) но чтоб он правильно заработал (с точки зрения программирования) нужно:

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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return x-(sin(x))-0.25;
}
 
 
int main()
{
    double x;
    double eps;
    cout<<"Vvedite x: ";cin>>x;
      if (x >= -5 && x <= 5)
    cout<<"Vvedite eps: ";cin>>eps;
    for(double iter = 1; ; iter = iter + 1) // убираем условие выхода отсюда
    {
        system("cls");
        cout<<"Iteration: "<<setprecision(5)<<iter<<endl;
        cout<<"x    = "<<x   <<endl;
        cout<<"f(x) = "<<f(x)<<endl;
        if(eps < fabs(f(x))) // и ставим его сюда
        {
            break; // если условие выполняется выходим из цикла
        }
        
      
    }
    system("pause");
    return 0;
}
1
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 11:51  [ТС]
Вот что получилось , это нормально?
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
10.03.2018, 11:54
eps надо задавать достаточно малым, для 6 знаков точности вводите 1e-7
или 0.0000001
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 11:55  [ТС]
zss, Вот что получилось, это нормально ?

при eps=0.000001 f(x) = 4.43841e-007 x and coren - такие же
Миниатюры
Решить уравнение с заданной точностью методом итераций  
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
10.03.2018, 12:28
Цитата Сообщение от kilo45 Посмотреть сообщение
eps=0.000001
А на картинке eps=1
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
10.03.2018, 12:30
Цитата Сообщение от kilo45 Посмотреть сообщение
это нормально ?
Судя по

нормально
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 12:38  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
А на картинке eps=1
я вводил eps = 0.000001 просто решил не загружать скрин
f(x) = 4.43841e-007 x and coren =1,17123
0
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 13:18  [ТС]
Все допилил работает! Спасибо всем

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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return x-(sin(x))-0.25;
}
 
 
int main()
{
    double x;
    double eps;
    cout<<"Vvedite x: ";cin>>x;
      if (x >= -5 && x <= 5)
    cout<<"Vvedite eps: ";cin>>eps;
    for(double iter = 1; ; iter = iter + 1)
        
    while( fabs(x-f(x))>eps)
{
     system("cls");
    cout<<"Iteration: "<<setprecision(0)<<iter<<endl;
    x=f(x);
    cout<<"f(x) = "<<f(x)-x<<endl;
    cout<<"coren ="<< x<<endl;
     if(eps < fabs(f(x)))
        {
            break; 
        }
 
 
    }
    system("pause");
    return 0;
}
Рабочий код: вдруг кому - то пригодится))
Миниатюры
Решить уравнение с заданной точностью методом итераций  
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
10.03.2018, 14:09
kilo45, Вы решили уравнение
x=x-sin(x)-0.25 ( -sin(x)-0.25=0 )
а не
x=sin(x)+0.25 ( x-sin(x)-0.25=0 )

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Цитата Сообщение от kilo45 Посмотреть сообщение
C++
1
2
3
4
double f(double x) 
{ 
  return x-(sin(x))-0.25; 
}
а надо
C++
1
2
3
4
double f(double x) 
{ 
  return sin(x)+0.25; 
}
1
2 / 2 / 3
Регистрация: 31.10.2017
Сообщений: 114
10.03.2018, 14:18  [ТС]
zss, блиин,
исправил
Спасибо!

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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double f(double x)
{
    return sin(x)+0.25; 
}
 
 
int main()
{
    double x;
    double eps;
    cout<<"Vvedite x: ";cin>>x;
      if (x >= -5 && x <= 5){
    cout<<"Vvedite eps: ";cin>>eps;
      }
      else return 0;
    for(double iter = 1; ; iter = iter + 1)
        
    while( fabs(x-f(x))>eps)
{
     system("cls");
    cout<<"Iteration: "<<setprecision(0)<<iter<<endl;
    x=f(x);
    cout<<"f(x) = "<<f(x)-x<<endl;
    cout<<"coren ="<< x<<endl;
    if(eps < fabs(f(x)))
        {
            break; 
        }
 
 
    }
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2018, 14:18
Помогаю со студенческими работами здесь

Решить уравнение вида x=A*cos(x) методом последовательных итераций
Всем привет! Пишу в DEV-C++, не думаю, что это важно. В целом задача на решение уравнения вида x=A*cos(x) методом последовательных...

Решить уравнение с заданной точностью методами дихотомии и Ньютона
1. Ршить уравнение x3 +3x2 –3=0 на отрезке с точностью e методами дихотомии и Ньютона.

Решить уравнение по заданной формуле методом хорд и модифицированным методом Ньютона
8. Решить уравнение 5sinx - x = 0 на отрезке с точностью E методом хорд и модифицированным методом Ньютона.

Решить систему линейных уравнений методом итераций с заданной точностью
Методом итераций решите систему линейных уравнений с точностью до 0,001:

Методом половинного деления решить уравнение с заданной точностью
методом половинного деления решить уравнение с заданной точностью е (вводится с клавиатуры) на паскале


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru