171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
1

Уравнение x = A*cos(x)

27.10.2012, 23:20. Показов 7187. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго время суток. Написать программу для вычисления методом последовательных итераций уравнения x = A*cos(x). Параметр A вводится пользователем. Проверить, для каких значений параметра A применим метод последовательных итераций. Читал теорию про последовательные итерации, но к сожалению так и не понял как это можно применить для решения данной задачи???? Насколько я понял x = cos(x) при x очень близких к 0. Но остается параметр A, которой должен удовлетворять данному равенству. Ума не приложу как это реализовать программно???? Помогите пожалуйста!!!! Заранее огромное спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2012, 23:20
Ответы с готовыми решениями:

Уравнение cos(2/x) * sin(x) = 0 , вывести корни на экран
#include "stdafx.h" #include <iostream> #include <cmath> using namespace std; int main() {...

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

Вычислить s=cos(1+cos(2+....+cos(39+cos40)
Вычислить s=cos(1+cos(2+....+cos(39+cos40) помогите

Используя разложение cos(x) в ряд. Вычислить cos(0.5)
Знаю конечно, что наглость, но пожалуйста подскажите как это разложить? Так же в ряд Тейлора или...

47
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:30 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
решения нет и при -0,4, лучше посмотри график поверхности и всё поймёшь.
Я же говорю 0.4 примерное число.
А график рекомендую посмотреть вам и тогда вы убедитесь что при A > 0 решение всегда. Метод простых итераций может разойтись, если начальное значение x находится далеко от корня.
Данный метод зависит от x0, который как раз и зависит от A.

Добавлено через 11 минут
Попробуйте построить графики функций
f(x) = x и g(x) = exp(-x)
f(x) = x и g(x) = 2exp(-x)
f(x) = x и g(x) = 10exp(-x)
f(x) = x и g(x) = 100exp(-x)
f(x) = x и g(x) = 1000exp(-x)
И увидите что они пересекаются
1
Заблокирован
Автор FAQ
30.10.2012, 13:35 22
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Данный метод зависит от x0, который как раз и зависит от A.
- начальное значение вообще ни от чего не зависит, в ряде методов есть критерии выбора промежутка существования корня, но только не для метода простых итераций, скажем для А = 1 получим один и тот же ответ(учитывая погрешность) введя х0 = 2,5 либо -3
x = 0.567557
err = 0.000647725
Results
x = 0.567557
A*exp(-x) = 0.566909
Для продолжения нажмите любую клавишу . . .
x = 0.566604
err = -0.000845218
Results
x = 0.566604
A*exp(-x) = 0.567449
Для продолжения нажмите любую клавишу . . .
PS:doctor_lecter, что вообще пытаешся доказать я так и не понял?
1
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
30.10.2012, 13:38  [ТС] 23
-=ЮрА=- огромное спасибо как всегда на высоте! doctor_lecter вам тоже огромное спасибо за помощь. Вот внес не большие изменния:
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
#include <cmath>
#include <iostream>
using namespace std;
 
double A;
double g(double x)
{
    return /*A*cos(x)*/A*exp(-x);
}
 
double f(double x)
{
    return x - g(x);
}
 
int main()
{
    setlocale( LC_ALL,"Russian" );
    double x;
    double eps;
    cout<<"Введите начальное значение  A : ";cin>>A;
    if(A<= - 0.4) // контроль введенных данных
    {
        cout<<"Уравнение не имеет решений\n";
        system("pause");
        return 1;
    }
    cout<<"Введите начальное значение x : ";cin>>x;
    cout<<"Введите точность вычислений: ";cin>>eps;
    while(eps < fabs(f(x)))
    {
        system("cls");
        cout<<"x   = "<<(x = g(x))<<endl;
        cout<<"err = "<<f(x)<<endl;
    }
    cout<<"\tResults"<<endl;
    cout<<"x        = "<<x<<endl;
    //cout<<"A*cos(x) = "<<g(x)<<endl;
    cout<<"A*exp(-x) = "<<g(x)<<endl;
    system("pause");
    return 0;
}
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:40 24
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS:doctor_lecter, что вообще пытаешся доказать я так и не понял?
Я пытаюсь доказать что ограничение |A| < 1 (или 0.5 или любого другого числа) не верно. То что данный метод зацикливается при больших A это недостаток метода и плохой выбор начальной точки.

PS Как тут прикрепить изображение?

Добавлено через 2 минуты
Тут написано про критерий сходимости http://cismet.blogspot.ru/p/blog-page_13.html
0
Заблокирован
Автор FAQ
30.10.2012, 13:41 25
Цитата Сообщение от doctor_lecter Посмотреть сообщение
И увидите что они пересекаются
- хорошо построил и какой сакраментальный смысл я должен был извлеч?
Ты так и не ответил на вопрос, что мы сейчас с тобой обсуждаем либо спорим, т.е в чём предмет нашей дискуссии?
Миниатюры
Уравнение x = A*cos(x)  
1
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:46 26
Может я вас неправильно понял: вы говорили что при |A| < 1 решений нет.

Я имел ввиду на одной плоскости 2 графика: y=x и y=10*exp(-x). Они должны пересекаться, что означает что при A=10 существует решение. (как и при любом другом A > 0)
1
Заблокирован
Автор FAQ
30.10.2012, 13:46 27
В разложениях рядов часто аргумент ограничен по модулю 1-цей, я провёл аналогии. Ты пишешь
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Я пытаюсь доказать что ограничение |A| < 1 (или 0.5 или любого другого числа) не верно.
- почему тогда при А = -0,4 не считает и при А -0,5, а говоришь ограничивать не верно
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:55 28
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- почему тогда при А = -0,4 не считает и при А -0,5, а говоришь ограничивать не верно
Хотя бы по тому что при A=-0.4 условие |-0.4| < 1 выполняется, а корней нет.
И при A > 0 решения всегда есть.
Ограничение на A должно быть только снизу
0
Заблокирован
Автор FAQ
30.10.2012, 13:59 29
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Ограничение на A должно быть только снизу
- возможно для этой функции да, а скжем для этой функции
exp(A*x)*Ax = tg(x)/A
каким должно быть ограничение?Всё определяется ОДЗ функции, не более
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 14:01 30
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
возможно для этой функции да
Я именно для этой функции (Aexp(-x)) и говорил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Всё определяется ОДЗ функции, не более
С этим полностью согласен
0
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
30.10.2012, 14:09  [ТС] 31
Вот еще не много изменил для A >= 3.0:
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 <cmath>
#include <iostream>
using namespace std;
 
double A;
double g(double x)
{
    return /*A*cos(x)*/A*exp(-x);
}
 
double f(double x)
{
    return x - g(x);
}
 
int main()
{
    setlocale( LC_ALL,"Russian" );
    double x;
    double eps;
    cout<<"Ââåäèòå íà÷àëüíîå çíà÷åíèå  A : ";cin>>A;
    if(A<= - 0.4) // êîíòðîëü ââåäåííûõ äàííûõ
    {
        cout<<"Óðàâíåíèå íå èìååò ðåøåíèé\n";
        system("pause");
        return 1;
    }
    if(A >= 3.0) // êîíòðîëü ââåäåííûõ äàííûõ
    {
        cout<<"Äàííûé ìåòîä ðàñõîäèòñÿ\n";
        system("pause");
        return 1;
    }
    
    cout<<"Ââåäèòå íà÷àëüíîå çíà÷åíèå x : ";cin>>x;
    cout<<"Ââåäèòå òî÷íîñòü âû÷èñëåíèé: ";cin>>eps;
    while(eps < fabs(f(x)))
    {
        system("cls");
        cout<<"x   = "<<(x = g(x))<<endl;
        cout<<"err = "<<f(x)<<endl;
    }
    cout<<"\tResults"<<endl;
    cout<<"x        = "<<x<<endl;
    //cout<<"A*cos(x) = "<<g(x)<<endl;
    cout<<"A*exp(-x) = "<<g(x)<<endl;
    system("pause");
    return 0;
}
0
doctor_lecter
30.10.2012, 14:28
  #32

Не по теме:

Интересный случай решения уравнения методом простой итерации:
Будем решать уравнение x = 2xк - x
Очевидно, что xк - корень, но в качестве начального решения выберем x0 != xк
Получим последовательность:
x1 = 2xк - x0
x2 = 2xк - x1 = 2xк - 2xк + x0 = x0
x3 = 2xк - x2 = 2xк - x0 = x1
Таким образом получили зацикливание метода.
Это по поводу сходимости метода, и выбора начальной точки

1
Заблокирован
Автор FAQ
30.10.2012, 16:12 33
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Таким образом получили зацикливание метода.
Это по поводу сходимости метода, и выбора начальной точки
doctor_lecter, хорошая попытка, но..(!)

Ещё раз повторяю - НАЧАЛЬНАЯ ТОЧКА В МЕТОДЕ ПРОСТЫХ ИТЕРАЦИЙ НЕ ИГРАЕТ ТАКОЙ КРИТИЧЕСКОЙ РОЛИ КАК В ДРУГИХ МЕТОДАХ, зарубали на носу и перестали дискутировать
Цитата Сообщение от doctor_lecter Посмотреть сообщение
x1 = 2xк - x0
- НЕВЕРНО!Потому как g(x) = 2*x - x и когда ставим x0 находим g(x0) = 2*x0 - x0. Надеюсь видно что методу пох на начальную точку!
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 <iostream>
using namespace std;
 
double A;
double g(double x)
{
    return /*A*cos(x)*//*A*exp(-x)*/2*x - x;
}
 
double f(double x)
{
    return x - g(x);
}
 
int main()
{
    double x;
    double eps;
//  cout<<"Enter initial value of A : ";cin>>A;
    cout<<"Enter initial value of x : ";cin>>x;
    cout<<"Enter calculetions error : ";cin>>eps;
    while(eps < fabs(f(x)))
    {
        system("cls");
        cout<<"x   = "<<(x = g(x))<<endl;
        cout<<"err = "<<f(x)<<endl;
    }
    cout<<"\tResults"<<endl;
    cout<<"x    = "<<x<<endl;
    cout<<"g(x) = "<<g(x)<<endl;
    system("pause");
    return 0;
}
doctor_lecter, заканчивай "со своей предвыборной агитацией", в твоих словах из последних потсов больше бреда чем истины...
Миниатюры
Уравнение x = A*cos(x)  
0
Заблокирован
Автор FAQ
30.10.2012, 16:15 34
Цитата Сообщение от doctor_lecter Посмотреть сообщение
x1 = 2xк - x0
надо
хк = 2x[к - 1] - x[к - 1], т.е x1 = 2*x0 - x0
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:34 35
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в твоих словах из последних потсов больше бреда чем истины...
Во-первых вы меня знаете? Если нет то почему на "ты"?
Во-вторых щас вы бредите.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ещё раз повторяю - НАЧАЛЬНАЯ ТОЧКА В МЕТОДЕ ПРОСТЫХ ИТЕРАЦИЙ НЕ ИГРАЕТ ТАКОЙ КРИТИЧЕСКОЙ РОЛИ КАК В ДРУГИХ МЕТОДАХ, зарубали на носу и перестали дискутировать
Начальная точка имеет огромное значение, желательно чтобы она была ближе к реальному корню.

почему у вас такая функция: 2x - x, у меня было 2xк - x, где xк - константа. Если вам так не нравится, давайте заменим на A.

Давайте еще раз и подробнее:

дано уравнение 2A - 2x = 0. Очевидно, что корень тут x = A, но специально возьмем x0 отличный от A.
решение:
1) преобразуем исходное уравнение к виду x = g(x)
получим: x = 2A - x
2) начальная точка пусть будет x0
Подставим x0
Получим: x1 = 2A - x0
3) Подставим x1
Получим: x2 = 2A - x1 = 2A - 2A + x0 = x0
Теперь мы снова вернулись к начальной точке, и очевидно что это будет бесконечный процесс
0
Заблокирован
Автор FAQ
30.10.2012, 16:42 36
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Во-первых вы меня знаете? Если нет то почему на "ты"?
- ОМГ почему я должен быть на ВЫ с каждым студентом?


Цитата Сообщение от doctor_lecter Посмотреть сообщение
Давайте еще раз и подробнее:
дано уравнение 2A - 2x = 0. Очевидно, что корень тут x = A, но специально возьмем x0 отличный от A.
решение:
1) преобразуем исходное уравнение к виду x = g(x)
получим: x = 2A - x
2) начальная точка пусть будет x0
Подставим x0
Получим: x1 = 2A - x0
3) Подставим x1
Получим: x2 = 2A - x1 = 2A - 2A + x0 = x0
Теперь мы снова вернулись к начальной точке, и очевидно что это будет бесконечный процесс
- фууух каже тебе объяснить x = g(x) можешь понять, что когда находим x на последующих итерациях используем следующее выражение x[k] = g(x[k - 1]), что у нас стоит в g нука смотрим g(x) = 2*x - x.
Кто даёт тебе право находить смешанное выражение g(x0) = 2*x - x0, кто?
Ты должен находить x1 как g(x0) ну так будь добр подставить x0 в каждое слагаемое, в каждое, а у тебя смесь

Цитата Сообщение от doctor_lecter Посмотреть сообщение
Начальная точка имеет огромное значение, желательно чтобы она была ближе к реальному корню.
- это повлияет лишь на число пробегов именно конкретно метода простых итераций, за другие методы не говорю
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:46 37
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ОМГ почему я должен быть на ВЫ с каждым студентом?
Потому что это элементарные правила приличия.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
последующих итерациях используем следующее выражение x[k] = g(x[k - 1])
А я так и делаю

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
у нас стоит в g нука смотрим g(x) = 2*x - x
В g(x) стоит совершенно другое

Решите уравнение 6 - 2x = 0 методом простых итераций с начальное точкой x0 = 2
0
Заблокирован
Автор FAQ
30.10.2012, 16:48 38
Цитата Сообщение от doctor_lecter Посмотреть сообщение
но специально возьмем x0 отличный от A.
- ну вот и возьми чёрт возьми x = 2*x - x
g(x0) = 2*x0 - x0 = x0
f(x) = x - g(x) = x0 - g(x0) = 0
fabs(f(x0) < eps) - стоп итерацям, что ту непонятного, а ты находишь g(x) как я вообще не пойму что g(x0) = 2*x1 - x0 либо что у тебя под x стоит даже сам думаю не скажишь и наченаешь какие то нелепые в самом начале выкладки городить
Вот какой ответ в выражении x = 2*x - x м 5-ть 10-ть или может вся числовая ось?Какое ты отличное число возьмёшь
0
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:51 39
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну вот и возьми чёрт возьми x = 2*x - x
g(x0) = 2*x0 - x0 = x0
ПОЧЕМУ ТАК???
Уравнение 2*A - 2*x = 0
g(x) = 2*A - x
0
Заблокирован
Автор FAQ
30.10.2012, 16:51 40
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Потому что это элементарные правила приличия.
- я не выкаю людям младше меня, дорости сначала)))

Цитата Сообщение от doctor_lecter Посмотреть сообщение
Решите уравнение 6 - 2x = 0 методом простых итераций с начальное точкой x0 = 2
: 6 - x - x = 0
g(x) = 6 - x
g(x0 = 3) = 6 - 3 = 3
f(x0) = x0 - g(x0) = 3 - 3 = 0
Что-нибудь ещё, может чаю кофе, что ещё для тебя могу сделать?
0
30.10.2012, 16:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2012, 16:51
Помогаю со студенческими работами здесь

pow(cos,cos)
Здравствуйте, помогите пожалуйста с квадратным корнем. Ошибка в pow(cos,cos). Вот...

|cos x - cos y| в степени
|cos x - cos y| в степени 1 + 2sin2y(1 + z + (z*z)/2 + (z*z*z)/3 + (z*z*z*z)/4) помогите найти...

Дано уравнение ax2+bx+c=0. Решить уравнение, результат вывести на экран.
Здравствуйте. Завтра зачет, нужно сдать две программы на с++, как их писать у меня весьма смутное...

Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена
Создать абстрактный базовый класс уравнение с виртуальной функцией - корни уравнения. Создать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru