Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Вычислить выражение

Ответить
Настройки темы
C/C++ - Вычислить выражение

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


2013-11-27 20_33_23-IntelligentTouchpadWindow.png
как для данного действительного числа x вычислить это выражение?

Отправлено: 22:41, 27-11-2013

 

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Это обычная рекурсия.
Код: Выделить весь код
double f(x)
{
return sin(x) + f(sin(x);
}

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:48, 28-11-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата mrcnn:
f »
выражение должно относиться к арифметическому типу или типу перечисления без области видимости
что-то не так...

Отправлено: 02:09, 28-11-2013 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Если я правильно помню мат.анализ, то выражение на картинке - это разложение в ряд резольвенты оператора sin(x).
Код: Выделить весь код
R = (A - lambda I)^-1 = (- 1/lambda))(I + A/lambda + A^2/lambda^2 + ...)
степень - это применение оператора к самому себе. Отрицательная - обратный оператор
В нашем случая lambda=1. Но резольвента существует только если оператор отображает в круг радиусом до 1. Будем считать что |sin(x)| < 1.
Тогда:
Код: Выделить весь код
  y = -(I + A + A^2 + ....)  -->  -y = ((A - I)^-1) x  ==> (A - I)(-y) = x
где A(x) = sin(x), I(x) = x
используюя свойства синуса sin(-x) = -sin(x), получаем:
Код: Выделить весь код
-sin(y) + y = x
т.е. для заданного x нужно решить уравнение x==y-sin(y), в интервале {-1,+1} (не включая границы, иначе определитель оператора A превысит 1). А это уже можно сделать, например, методом Ньютона.

http://alexandr4784.narod.ru/B13/b13_4_46.pdf, стр.188
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:08, 28-11-2013 | #4


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата p1ka4y777:
выражение должно относиться к арифметическому типу или типу перечисления без области видимости
что-то не так... »
Вы пытались скомпилировать и выдалась ошибка? Если вам эту ошибку выдает студия, то там я забыл скобку. return sin(x) + f(sin(x)); Рекурсия в таком виде вызовет срыв стека, поэтому рекурсия, которая бесконечная должна при опр. условии остановиться, то есть это условие нужно добавить. Условие обычно "эпсилон", например 0.00001 (10 в степени -5). pva, а зачем нужны в данном случае линейные операторные уравнения?

-------
Ehhh.. what's up, doc?..


Отправлено: 16:26, 28-11-2013 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата mrcnn:
а зачем нужны в данном случае линейные операторные уравнения? »
Перевести постановку из формы с бесконечным вызовом нелинейной функции в форму решения нелинейного уравнения. Имхо выглядит не так страшно. Дело вкуса

mrcnn, в твоём способе от рекурсии можно избавиться, сделать в 1 цикл, если переиспользовать предыдущие вычисленные значения sin(sin(...)). Имхо возле единиц сходиться будет медленней чем решение обратного уравнения.

Отправлено: 18:03, 28-11-2013 | #6


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата pva:
от рекурсии можно избавиться »
подробнее об этом, если можно
Цитата pva:
Имхо выглядит не так страшно »
ну... немного напряжно)

Отправлено: 18:38, 28-11-2013 | #7

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


p1ka4y777, делаем замену переменных:
Код: Выделить весь код
1. sin(x) = t1
2. sin(t1) = sin(sin(x)) = t2
3. sin(t2) = sin(sin(sin(x))) = t3
4. sin(t3) = sin(sin(sin(sin(x)))) = t4
...
короче чтобы одна переменная всегда содержала вычисленный в прошлый раз sin(...), тогда синус от неё даст следующий вычисленный синус. Принципиально пишу идею, а не код, ибо код элементарно прост.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:55, 28-11-2013 | #8


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо большое!
условие непонятное... не пойму, когда закончим то?
можно например так сделать?
Код: Выделить весь код
for( i = 1; i <= 5; i++ )
{
 sum+=sin(x);
 x=sin(x);
}

Последний раз редактировалось p1ka4y777, 28-11-2013 в 23:41.


Отправлено: 23:01, 28-11-2013 | #9

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


можно, но при x=pi будет большая погрешность.
Цитата pva:
-sin(y) + y = x »
я что-то неправильно посчитал. Перепутал знак и думал что в исходной формуле x + sin(x) + ...

Хотя если сделать замену t = sin(x), получится то, что надо,
Код: Выделить весь код
y - sin(y) == sin(x)
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:55, 29-11-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Вычислить выражение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - Регулярное выражение LilLoco Программирование и базы данных 19 04-05-2016 09:36
Debian/Ubuntu - grep регулярное выражение Forpost Общий по Linux 3 25-05-2012 00:50
Регулярное выражение venuko Вебмастеру 11 02-08-2010 18:18
.NET - Вычислить строку в C# SmallGod Программирование и базы данных 1 26-02-2010 01:19
Регулярное выражение benya Вебмастеру 27 26-08-2005 14:34




 
Переход