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

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

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

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

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

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

Уравнение 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). Вот...

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

47
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
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, заканчивай "со своей предвыборной агитацией", в твоих словах из последних потсов больше бреда чем истины...
0
Миниатюры
Уравнение x = A*cos(x)  
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:15 #34
Цитата Сообщение от doctor_lecter Посмотреть сообщение
x1 = 2xк - x0
надо
хк = 2x[к - 1] - x[к - 1], т.е x1 = 2*x0 - x0
0
doctor_lecter
280 / 153 / 8
Регистрация: 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
doctor_lecter
280 / 153 / 8
Регистрация: 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
doctor_lecter
280 / 153 / 8
Регистрация: 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
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 16:52 #41
-=ЮрА=-, вы не умеете читать, или читаете невнимательно.
Я попросил с начальной точкой x0 = 2
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 16:53 #42
ах да с начальной точкой 2 просто прости не увидел
0
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 17:02 #43
Вы же сами так говорили, ну вот и попробуйте с любой точкой кроме 3 (т.к. 3 - корень)

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

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- я не выкаю людям младше меня, дорости сначала)))
Ну вы же производите впечатление умного человека, ну зачем вести себя как "гопник с раёна". К тому же меня вы не знаете.

0
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 17:19 #44
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Ну вы же производите впечатление умного человека, ну зачем вести себя как "гопник с раёна". К тому же меня вы не знаете.
-
это камень в мой огород?

Хорошо ниже решение именно с 2-кой, интересно как ты сейчас запоёшь
http://cismet.blogspot.com/p/blog-page_13.html

Суть метода простых итераций состоит в переходе от уравнения
f(x)= 0 (*)
к эквивалентному уравнению
x =φ(x). (**)
Этот переход можно осуществить разными способами, в зависимости от вида f(x). Например, можно положить
φ(x) =x+bf(x),(***)
где b = const, при этом корни исходного уравнения не изменятся.

Я например захотел так
g(x) = x + 0.5*f(x)

Решение
f(x) = 6-2*x
g(x) = x + 3 - x = 3
Если известно начальное приближение к корню x0, то новое приближение
x1=φx(0),
x1= g(x0 = 2) = 3
NICE TRY да не все функции подходят под тупую схему - забрать икс от исходной функции, ну и что начальная точка изменила итог, м?

Добавлено через 6 минут

Не по теме:

doctor_lecter, хоть так хоть эдак, повторюсь

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

1
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 17:43 #45
Можно даже еще добавить что
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Этот переход можно осуществить разными способами, в зависимости от вида f(x). Например, можно положить
g(x) = x + 0.5*f(x)
φ(x) =x+bf(x),(***)
где b = const, при этом корни исходного уравнения не изменятся.
b не обязательно const, важно чтобы не равно 0.
А теперь представьте что вы не знаете общего вида уравнения, у вас есть некоторая уже реализованная кем-то функция f(x), и вам нужно решить методов простых итераций уравнение f(x) = 0

Под вашу новую схему можно придумать еще одно уравнение, которое будет также зацикливаться, и в общем случае вы не сможете подобрать "правильную схему", если есть 1 уравнение которое не подходит под схему, то вполне может быть и больше.

NICE TRY, но мы до этого обсуждали метод в котором b = 1, и я привел пример при котором он зацикливается, вы это отрицали. Теперь просто немного изменили схему метода.

Добавлено через 50 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а кроме этого для простых итераций ещё важен подбор функции. Этих недостаков лишены более продвинутые методы, скажем, хорд, бисекций и посложней...
Так я это и пытаюсь сказать. Для каких-то функций метод простых итераций хорош, для каких-то лучше использовать другой метод

Добавлено через 4 минуты
К тому-же по вашей ссылке (кстати, я ее уже выше приводил), есть еще и критерий сходимости этого метода.

Добавлено через 14 минут
Тут хорошо рассказывается про метод простых итераций http://webmath.exponenta.ru/s/kiselev1/node80.htm, там же рассмотрен этот пример, который я выше привел
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 17:43
Привет! Вот еще темы с ответами:

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

Функция sin(x+y)=sin(x)cos(y)+cos(x)sin(y) - C++
как её записать на языке с++?

18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави - C++
#include &lt;iostream&gt; using namespace std; void main() { int urov1 = 0; int urov2 = 0; int urov3 = 0; float stad = 0; ...

Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур - C++
Заупутался :-(


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
30.10.2012, 17:43
Ответ Создать тему
Опции темы

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