Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
#1

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

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

Всем доброго время суток. Написать программу для вычисления методом последовательных итераций уравнения x = A*cos(x). Параметр A вводится пользователем. Проверить, для каких значений параметра A применим метод последовательных итераций. Читал теорию про последовательные итерации, но к сожалению так и не понял как это можно применить для решения данной задачи???? Насколько я понял x = cos(x) при x очень близких к 0. Но остается параметр A, которой должен удовлетворять данному равенству. Ума не приложу как это реализовать программно???? Помогите пожалуйста!!!! Заранее огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 23:20     Уравнение x = A*cos(x)
Посмотрите здесь:

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

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

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

|cos x - cos y| в степени - C++
|cos x - cos y| в степени 1 + 2sin2y(1 + z + (z*z)/2 + (z*z*z)/3 + (z*z*z*z)/4) помогите найти ответ, и ошибку какую я допустил, я хз...

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

Вычисление cos - C++
Надо вычислить cos от 0 до 360 Но for(double j=0;j<=360;j++) cout << j << " "<< cos(j) << "\n"; или for(double...

y=sin(n*x)+cos(k*x)+ln(m*x) - C++
y=sin(n*x)+cos(k*x)+ln(m*x) где x= { e^z+z, при z>1 z^2+1, при z меньше или равно 1 не поможете ли мне пожалуйста...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:30     Уравнение x = A*cos(x) #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
решения нет и при -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)
И увидите что они пересекаются
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 13:35     Уравнение x = A*cos(x) #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, что вообще пытаешся доказать я так и не понял?
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
30.10.2012, 13:38  [ТС]     Уравнение x = A*cos(x) #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;
}
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:40     Уравнение x = A*cos(x) #24
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS:doctor_lecter, что вообще пытаешся доказать я так и не понял?
Я пытаюсь доказать что ограничение |A| < 1 (или 0.5 или любого другого числа) не верно. То что данный метод зацикливается при больших A это недостаток метода и плохой выбор начальной точки.

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

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

Я имел ввиду на одной плоскости 2 графика: y=x и y=10*exp(-x). Они должны пересекаться, что означает что при A=10 существует решение. (как и при любом другом A > 0)
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 13:46     Уравнение x = A*cos(x) #27
В разложениях рядов часто аргумент ограничен по модулю 1-цей, я провёл аналогии. Ты пишешь
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Я пытаюсь доказать что ограничение |A| < 1 (или 0.5 или любого другого числа) не верно.
- почему тогда при А = -0,4 не считает и при А -0,5, а говоришь ограничивать не верно
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:55     Уравнение x = A*cos(x) #28
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- почему тогда при А = -0,4 не считает и при А -0,5, а говоришь ограничивать не верно
Хотя бы по тому что при A=-0.4 условие |-0.4| < 1 выполняется, а корней нет.
И при A > 0 решения всегда есть.
Ограничение на A должно быть только снизу
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 13:59     Уравнение x = A*cos(x) #29
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Ограничение на A должно быть только снизу
- возможно для этой функции да, а скжем для этой функции
exp(A*x)*Ax = tg(x)/A
каким должно быть ограничение?Всё определяется ОДЗ функции, не более
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 14:01     Уравнение x = A*cos(x) #30
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
возможно для этой функции да
Я именно для этой функции (Aexp(-x)) и говорил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Всё определяется ОДЗ функции, не более
С этим полностью согласен
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 656
30.10.2012, 14:09  [ТС]     Уравнение x = A*cos(x) #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;
}
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
Таким образом получили зацикливание метода.
Это по поводу сходимости метода, и выбора начальной точки

-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:12     Уравнение x = A*cos(x) #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)  
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:15     Уравнение x = A*cos(x) #34
Цитата Сообщение от doctor_lecter Посмотреть сообщение
x1 = 2xк - x0
надо
хк = 2x[к - 1] - x[к - 1], т.е x1 = 2*x0 - x0
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:34     Уравнение x = A*cos(x) #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
Теперь мы снова вернулись к начальной точке, и очевидно что это будет бесконечный процесс
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:42     Уравнение x = A*cos(x) #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 Посмотреть сообщение
Начальная точка имеет огромное значение, желательно чтобы она была ближе к реальному корню.
- это повлияет лишь на число пробегов именно конкретно метода простых итераций, за другие методы не говорю
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:46     Уравнение x = A*cos(x) #37
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ОМГ почему я должен быть на ВЫ с каждым студентом?
Потому что это элементарные правила приличия.

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

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

Решите уравнение 6 - 2x = 0 методом простых итераций с начальное точкой x0 = 2
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:48     Уравнение x = A*cos(x) #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-ть или может вся числовая ось?Какое ты отличное число возьмёшь
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:51     Уравнение x = A*cos(x) #39
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну вот и возьми чёрт возьми x = 2*x - x
g(x0) = 2*x0 - x0 = x0
ПОЧЕМУ ТАК???
Уравнение 2*A - 2*x = 0
g(x) = 2*A - x
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 16:51     Уравнение x = A*cos(x)
Еще ссылки по теме:

Из Sin в Cos С++ - C++
Здраствуйте, мне нужно написать програму которая за рядами Тейлора выводит косинус . Проблема заключаеться в том ,что если програма...

функция cos - C++
доброго времени суток столкнулся с проблемкой при работе с функцией cos и sin,дело в то что функция непонятно почему выдаёт непредсказуемые...

Sin() cos() - C++
Всем приветик. У меня последний Qt MinGW. Вопрос: Перед использованием функции sin(x), мне сказали что нужно градусы перевести в...

Определить sin и cos - C++
Считая, что функции sin и cos применимы только к аргументам в диапазоне , вычислить y = sin(x) для любого заданного вещественного числа x.

Ограничения для Cos - C++
Доброго времени суток. Пишу программу , котрая считает такого рода уравнения. НО мне тонко намекнули что могут вводить какие-то...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:51     Уравнение x = A*cos(x) #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
Что-нибудь ещё, может чаю кофе, что ещё для тебя могу сделать?
Yandex
Объявления
30.10.2012, 16:51     Уравнение x = A*cos(x)
Ответ Создать тему
Опции темы

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