Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/88: Рейтинг темы: голосов - 88, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 6
1

Метод простых итераций

05.10.2016, 14:24. Просмотров 17849. Ответов 9
Метки нет (Все метки)

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

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
/*Задание 2. Вариант 10.*/
 
 
#include <iostream>
#include <cmath> 
#include <stdlib.h>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
double initial(double x)
{
    return 1.4*cos(3.9*x) - log(2.5*x);
}
 
double transformed(double x)
{
    /*return (exp(1.4*cos(3.9*x)) / 2.5);*/
    return (acos(log(2.5*x) / 5.46));
    /*return 1.4*cos(3.9*x) - log(2.5*x) + x; */
}                                            
 
 
double PD(double a, double b, double e, int &count);
double MI(double a, double b, double e, int &count);
 
void main()
{
    setlocale(LC_ALL, "rus");
    double a, b, e;
    int count = 0;
 
    cout << "Введите погрешность вычислений: ";
    cin >> e;
 
    cout << endl << "Метод половинного деления." << endl;
    cout << "Введите предел a: "; cin >> a; cout << "Введите предел b: "; cin >> b;
    cout << "Корень данного уравнения на [" << a << "," << b << "]";
 
    double result = PD(a, b, e, count);
    cout << " с погрешностью " << e << ": " << setprecision(8) << result << endl << "При числе итераций: " << count << "\n";
 
    count = 0;
    cout << endl << "Метод простых итераций." << endl;
    cout << "Введите предел a: "; cin >> a; cout << "Введите предел b: "; cin >> b;
    cout << "Корень данного уравнения на [" << a << "," << b << "]";
        double resultat = MI(a, b, e, count);
        cout<< " с погрешностью " << e << ": " << setprecision(8) << resultat << endl << "При числе итераций: " << count << "\n";
 
    system("pause");
}
 
double  PD(double a, double b, double e, int &count)
{
    count = 0;
    double x = 0;
    if (initial(a)*initial(b) >= 0 || a > b)
    {
        cout << "Неверные пределы! На данном промежутке нет корней или корень не является единственным." << endl;
        return 0;
    }
    while (b - a > e)
    {
        x = (a + b) / 2;
        if (initial(a) * initial(x) < 0) b = x;
        else a = x;
        count++;
    }
    return (a + b) / 2;
}
double MI(double a, double b, double e, int &count)
{
    count = 0;
    double x = 0;
    double y = b / 2;
    while (abs(y - x) > e)
    {
        x = y;
        y = transformed(x);
        count++;
    } 
    return x;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2016, 14:24
Ответы с готовыми решениями:

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

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

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

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

9
369 / 216 / 150
Регистрация: 06.06.2016
Сообщений: 463
05.10.2016, 15:34 2
Цитата Сообщение от Glants Посмотреть сообщение
Дана функция 1.4 Cos[3.9 x] - Log[2.5 x]=0
Ее надо преобразовать к виду ф(x)=x, я не совсем понимаю как это сделать
Например

https://www.cyberforum.ru/cgi-bin/latex.cgi?1.4 \cos[3.9 x] - \log[2.5 x] = 0 \qquad \rightarrow \qquad 1.4 \cos[3.9 x] - \log[2.5 x] + x = x

Для функции

https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi(x) = 1.4 \cos[3.9 x] - \log[2.5 x] + x

Нужно проверить условие сходимости

https://www.cyberforum.ru/cgi-bin/latex.cgi? |\varphi'(x)| \, < \, 1
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 6
05.10.2016, 16:34  [ТС] 3
То есть мне просто надо найти производную? от ф(x)?
0
369 / 216 / 150
Регистрация: 06.06.2016
Сообщений: 463
05.10.2016, 16:40 4
Вам нужно проверить, что модуль производной меньше единицы, тогда метод простых итераций сходится.
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 6
05.10.2016, 16:50  [ТС] 5
Извините, но вы не могли кратко объяснить как проверить то что модуль производной меньше единицы?
0
369 / 216 / 150
Регистрация: 06.06.2016
Сообщений: 463
05.10.2016, 17:47 6
Вначале нужно отделить корни (для данного уравнения их несколько), начертите график или сделайте это аналитически, а затем для x вблизи корня (это будет начальным приближением) считайте

https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi'(x) = -1.4 \cdot 3.4 \cdot \sin (3.9x) -  \dfrac{1}{x} + 1 = -4.76 \, sin (3.9x) - \dfrac{1}{x} + 1

Если эта величина по модулю < 1, можно применять метод простых итераций. Если же это не так можно выбрать функцию https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi иначе, так чтобы

https://www.cyberforum.ru/cgi-bin/latex.cgi? |\varphi'(x)| \, < \, 1.
0
Вложения
Тип файла: pdf 0.pdf (11.8 Кб, 72 просмотров)
Тип файла: pdf 1.pdf (10.9 Кб, 51 просмотров)
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 6
08.10.2016, 11:02  [ТС] 7
Так как x=0.40190026, получается что модуль ф'(x) >1
Значит надо по другому привести к виду ф(х)??
0
369 / 216 / 150
Регистрация: 06.06.2016
Сообщений: 463
08.10.2016, 19:51 8
Да.
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 6
09.10.2016, 12:37  [ТС] 9
Так, каким же способом можно задать ф(x)? И еще один вопрос, я просто не особо понял алгоритм метода итераций, я понял что я должен лишь сделать проверку |ф'(x)|<1, но я не понял саму суть этого метода? Вы не могли бы объяснить?
0
369 / 216 / 150
Регистрация: 06.06.2016
Сообщений: 463
09.10.2016, 15:54 10
Цитата Сообщение от Glants Посмотреть сообщение
я не понял саму суть этого метода? Вы не могли бы объяснить?
Читайте любую книжку по численным методам.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2016, 15:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Метод простых итераций
Необходимо реализовать программно метод простых итерация для решения НУ. к примеру возьмём...

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

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

Метод простых итераций для СЛАУ
Доброго времени суток всем!!! решаю СЛАУ методом простых итераций, проблема вот в чем: не могу...

Метод простых итераций с заданной точностью на С++
Помогите пожалуйста,дано такое задание.Первую часть,с методом простых итераций смогла сделать,вот...


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

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

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