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

Метод простых итераций с заданной точностью на С++

24.02.2019, 08:47. Показов 6988. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста,дано такое задание.Первую часть,с методом простых итераций смогла сделать,вот код,но вторую часть задания я вообще не понимаю как делать.Может кто-нибудь может объяснить??Во вложениях есть и само задание и уравнение с диапазоном и погрешностью.
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 pow(2.0,x) - 2*pow(x, 2.0) - 1;
}
 
double g(double x)
{
    return x + 0.5*f(x);
}
 
int main()
{
    double x;
    double eps;
    cout<<"Enter initial root value   : ";cin>>x;
    cout<<"Enter error of calculation : ";cin>>eps;
    for(double iter = 1; eps < fabs(f(x)); iter = iter + 1)
    {
        system("cls");
        //*Итераций может быть очень много, поэтому рекомендую забыть
        //о целых а использовать дабл как счётчик, хотя в принципе если 
        //решение не нашли за 10-100 итераций то решения для данного коэффициента
        //при f(x) в g(x) нет и надо его менять
        cout<<"Iteration : "<<setprecision(0)<<iter<<endl;
        cout<<"x    = "<<x   <<endl;
        cout<<"g(x) = "<<g(x)<<endl;
        cout<<"f(x) = "<<f(x)<<endl;
        x = g(x);
    }
    system("pause");
    return 0;
}
Вложения, ожидающие проверки
Тип файла: png 13.PNG
Тип файла: png 12.PNG
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2019, 08:47
Ответы с готовыми решениями:

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real; b,c:array of real; ...

Метод простых итераций
Помогите с написанием программы на С++, нужно решить СЛАУ методом простых итераций. с точностью 0,0001. Мой код #include...

Метод простых итераций
Дана функция 1.4 Cos - Log=0 Ее надо преобразовать к виду ф(x)=x, я не совсем понимаю как это сделать нужно написать программу в C++...

8
24.02.2019, 09:38
 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Переписывайте!
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 124
24.02.2019, 09:42  [ТС]
Задание:
1)Написать вычислительную программу на языке программирования C++ для решения системы двух нелинейных уравнений методом простых итераций с заданной точностью.
2)С использованием написанной программы найти численно минимум заданной функции двух переменных ��(��,��) в указанной области путем численного решения системы двух нелинейных уравнений, получающихся на основе необходимых условий экстремума.

Уравнение:
1−(x2−1)(y2−1)(x*expy+y*expx),диапазон [0,1]×[0,1] ,погрешность 10-5
0
690 / 487 / 250
Регистрация: 10.06.2016
Сообщений: 2,303
24.02.2019, 11:01
Studentosi, хорошая практическая задачка из области оптимизации. Необходимые условия экстремума:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\partial f}{\partial x}=0
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\partial f}{\partial y}=0
где f(x,y) - ваша функция. Продифференцировав и приравняв 0, получите систему из двух нелинейных уравнений относительно х и у. Далее нужно будет эту систему представить в виде:

https://www.cyberforum.ru/cgi-bin/latex.cgi?x={f}_{1}(x,y)
https://www.cyberforum.ru/cgi-bin/latex.cgi?y={f}_{2}(x,y)
Это собственно и будут расчетные формулы для итерационного процесса, начиная с какого-то начального приближения https://www.cyberforum.ru/cgi-bin/latex.cgi?\left({x}_{0},{y}_{0} \right). Код, конечно, придется подкорректировать под эту задачу.

Добавлено через 11 минут
Должно получиться приблизительно так x=y=0.525427559791034
1
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 124
25.02.2019, 20:37  [ТС]
Спасибо,попыталась исправить код,вроде бы получилось нормально,но возникла проблема того,что функция расходится,хотя должна сходится к точке приблизительно (0.5,0.5).В чем проблема-понять не могу,вроде бы все правильно,но числа все равно получаются запредельные

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
#include <iomanip>
#include <iostream>
using namespace std;
 
 
inline double fx(double x, double y)
{
    return (-((x*x - 1)*(exp(y) + y * exp(x))) / (2 * x*exp(y) + 2 * y * exp(x)));
}
 
inline double gy(double x, double y)
{
    return (-((y*y - 1)*(x*exp(y) + exp(x))) / (2 * x*exp(y) + 2 * y * exp(x)));
}
 
int main()
{
    double x, y, xn, yn;
    double eps;
    cout << "Enter initial root value x= ";
    cin >> x;
    cout << "Enter initial root value y= ";
    cin >> y;
    cout << endl;
    cout << "Enter error of calculation : ";
    cin >> eps;
    for (double iter = 1; (eps < fabs(fx(x, y))) && (eps < fabs(gy(x, y))); iter = iter + 1)
    {
        system("cls");
        //*Итераций может быть очень много, поэтому рекомендую забыть
        //о целых а использовать дабл как счётчик, хотя в принципе если 
        //решение не нашли за 10-100 итераций то решения для данного коэффициента
        //при f(x,y) в g(x,y) нет и надо его менять
        cout << "Iteration : " << setprecision(0) << iter << endl;
        cout << "x = " << x << endl;
        cout << "y = " << y << endl;
        cout << "f(x,y) = " << fx(x, y) << endl;
        cout << "g(x,y) = " << gy(x, y) << endl;
        xn = x;
        yn = y;
        x -= fx(xn, yn);
        y -= gy(xn, yn);
 
        //system("pause");
 
    }
    system("pause");
    return 0;
}
0
690 / 487 / 250
Регистрация: 10.06.2016
Сообщений: 2,303
25.02.2019, 22:00
Studentosi, в производных не ошиблись? Не можете привести результат дифференцирования?
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 124
26.02.2019, 17:29  [ТС]
slava_psk,Да, дифференцирование проводила в Мэйпл,прикрепляю скриншот
Миниатюры
Метод простых итераций с заданной точностью на С++  
0
690 / 487 / 250
Регистрация: 10.06.2016
Сообщений: 2,303
26.02.2019, 17:44
Studentosi, да, при таких итерационных формулах процесс не сходится. Можно попробовать выразить x,y по другому. Например, выразить https://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{x}, {e}^{y}, а потом прологарифмировать. Сейчас к сожалению очень занят, не могу сам попробовать. Посмотрите теорию, там помнится нужно рассматривать и вторые производные.
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 124
26.02.2019, 17:46  [ТС]
slava_pskХорошо,сейчас попробую что-нибудь сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2019, 17:46
Помогаю со студенческими работами здесь

Метод простых итераций. С/С++
Такое задание: написать алгоритм численного решения нелинейных уравнений методом простых итераций и реализовать его на языке...

Метод простых итераций
Здраствуйте! Нужно методом простой итерации решать такую систему нелинейных уравнений с точностью e=10-4 и найти погрешность. Нашел на...

Метод простых итераций
Необходимо реализовать программно метод простых итерация для решения НУ. к примеру возьмём x^6-3x^2+x-1, интервал изоляции корня . ...

Метод простых итераций
Систему решил ,получилось верно.Возникла одна проблема ,иксы которые я получил перемножить на матрицу. То есть Ax=b --&gt;b=b ...

Метод простых итераций для СЛАУ
Здравствуйте! Пытаюсь реализовать метод простых итераций. Все функции, которые работают нормально, кроме самих итераций. Не могу понять,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru