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

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

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

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

27.10.2012, 23:20. Просмотров 1990. Ответов 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
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 11:52 #16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот код для экспоненты, т.е практически никаких изменений, важно чтобы выполнялось условие |А| < 1
При A = -0.5 не будет решений.
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 11:56 #17
Цитата Сообщение от doctor_lecter Посмотреть сообщение
При A = -0.5 не будет решений.
- я бы сказал больше решений не будет при |А| > 0.5 т.е получается

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
|А| < 1
верно для косинуса, а для экспоненты это условие ещё жёще |A| < 0.5 (провел пару тестов с экспонентой и пришёл к такому выводу). Также думаю надо для экспоненты исключать точку ноль, т.к в этом случае решение тоже не определено. Надо бы по свободе посмотреть ОДЗ f(x) = x - A*exp(-x)
0
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 12:06 #18
При A > 0 решения есть всегда, данный метод начинает расходится при A > 3. Но при A < -0.4 (это примерное значение) решений уже нет.
С 0 все нормально, получается уравнение x=0
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 13:07 #19
doctor_lecter, лучше всего смотреть ОДЗ графически, на скрине анализ экспонеты в MathCAD, видно что изгиб поверхности f(x,A) идёт до А = 2, после только ноль, впринципе вручную можно подобрать реальный диапазон для А
1
Миниатюры
Уравнение x = A*cos(x)  
-=ЮрА=-
Заблокирован
Автор FAQ
30.10.2012, 13:13 #20
Цитата Сообщение от doctor_lecter Посмотреть сообщение
при A < -0.4 (это примерное значение) решений уже нет.
- решения нет и при -0,4, лучше посмотри график поверхности и всё поймёшь.
Цитата Сообщение от doctor_lecter Посмотреть сообщение
данный метод начинает расходится при A > 3.
- кто расходится, метод простых итераций?А его критерии сходимости вообще когда-нибудь встречал?Т.е данный метод зависит от значения А? Хорошо а как быть скажем с таким уравнением x = cos(x) где тут А?
0
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 13:30 #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)
И увидите что они пересекаются
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
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 665
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
doctor_lecter
280 / 153 / 8
Регистрация: 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 Посмотреть сообщение
И увидите что они пересекаются
- хорошо построил и какой сакраментальный смысл я должен был извлеч?
Ты так и не ответил на вопрос, что мы сейчас с тобой обсуждаем либо спорим, т.е в чём предмет нашей дискуссии?
1
Миниатюры
Уравнение x = A*cos(x)  
doctor_lecter
280 / 153 / 8
Регистрация: 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
doctor_lecter
280 / 153 / 8
Регистрация: 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
doctor_lecter
280 / 153 / 8
Регистрация: 22.09.2012
Сообщений: 283
30.10.2012, 14:01 #30
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
возможно для этой функции да
Я именно для этой функции (Aexp(-x)) и говорил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Всё определяется ОДЗ функции, не более
С этим полностью согласен
0
30.10.2012, 14:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 14:01
Привет! Вот еще темы с ответами:

Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена - 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++
Заупутался :-(


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

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

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