Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.08.2015, 17:06
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 1  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
По умолчанию Вычислить работы цикла математически

Здравствуйте, можно ли вычислить результат работы цикла без использования самого цикла? По какой нибудь формуле?
Код AS3:
var x:Number  = 0;
for (var i:int = 0; i < 100; i++){
    x *= 0.9;
    x += 10;
}

Старый 29.08.2015, 18:48
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 2  
Ответить с цитированием
Bletraut
[+ 22.07.15]
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 553
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Может быть как-то через прогрессии.

Добавлено через 1 час 1 минуту
В принципе я могу вывести подобное.

Добавлено через 1 час 2 минуты
Код AS3:
			var x:Number = 0;
			var x2:Number = 0;
 
			var d:Number = 0.9;
			var m:Number = 10;
			var j:int = 100;
 
			for (var i:int = 0; i < j; i++)
			{
				x *= d;
				x += m;
			}
 
			x2 = x2 * Math.pow(d, j - 1) + d * m * (1 + (d * (1 - Math.pow(d, j - 2))) / (1 - d)) + m;
			trace(x, x2);
выводит

Код AS3:
99.99734386011124 
99.99734386011126
Числа немного отличаются.

Добавлено через 1 час 7 минут
Вот искомая формула, где d = 0.9, m = 10, j - размерность цикла.
Код AS3:
x2 = x2 * Math.pow(d, j - 1) + d * m * (1 + (d * (1 - Math.pow(d, j - 2))) / (1 - d)) + m;
Добавлено через 1 час 16 минут
А если не секрет, то где такое тебе понадобилось?
__________________
Я заклинаю вас действовать иначе.


Последний раз редактировалось Bletraut; 29.08.2015 в 19:57.
Старый 29.08.2015, 20:51
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,633
Записей в блоге: 4
Похоже на какое-то тестирование. В OCPJP такие вопросы встречал

Старый 30.08.2015, 12:51
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 4  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Bletraut, Использовал в игре для нахождения максимальной скорости которою может развить транспортное средство с двигателем определенной мощности. В оригинале опытным путём было выбрано 300 итераций для цикла - дальше прирост уже незначительный.
Если не секрет, как Вы вывели формулу? Какой это раздел математики?

Старый 30.08.2015, 13:21
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,779
Записей в блоге: 3
p.s. Формула работает в два раза быстрее цикла, проверил.

Старый 30.08.2015, 15:10
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 6  
Ответить с цитированием
Bletraut
[+ 22.07.15]
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 553
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
PlutDem, прогрессии. Я не математик и не имею глубоких познаний в математике, поэтому объясню как умею, выводил я следующим образом:
Нужное нам число состоит из арифметической и геометрической прогрессии + исходное число.
d - коэффициент умножения, m - коэффициент сложения, a1 - первый член прогрессии (в нашем случае 0), an - n-ый член прогрессии.

Чтобы найти an для геометрической прогрессии воспользуемся формулой an = a1*d^(n-1), где n - номер нужного нам члена геометрической прогрессии.
В нашем случае прогрессия смешанная, чтобы увидеть закономерность, выведем формулу нескольких первых членов прогрессии.

Код:
1) a1 = 0
2) a2 = a1*d + m
3) a3 = a2*d + m = (a1*d + m)*d + m = a1*d^2 + d*m + m
4) a4 = a3*d + m = (a1*d^2 + d*m + m)*d = a1*d^3 + d^2*m + d*m + m
Разберем первую часть формулы. Нетрудно заметить, что это есть формула n-ого члена геометрической прогрессии, следовательно можем заменить данный кусок формулы на a1*d^(n-1)
Код:
2) a1*d
3) a1*d^2 
4) a1*d^3
Далее разберем конец формулы, очевидно, что ничего не меняется, поэтому мы можем просто записать +m
Код:
2) + m
3) + m
4) + m
Теперь самое интересное, рассмотрим середину. Последовательность трудно заметить, поэтому выведем пятый член прогрессии:
Код:
a5 = a1*d^4 + d^3*m + d^2*m + d*m + m
, внимательно посмотрим на пятое выражение
Код:
d^3*m + d^2*m + d*m
, вынесем d*m за скобки и получим
Код:
d*m*(d^2 + d + 1)
. Можно заметить, что в скобках у нас получилась сумма членов геометрической прогрессии к которой прибавляется 1. Сумма членов геометрической прогрессии (k1, k2, k3, ...kn) вычисляется по формуле S = (k1*(1 - q^n))/ (1-q), для нашего случая k1 = q = d. Так же заметим, что степень нашей последовательности начинается n - 2. Поэтому середину формулы мы запишем как
Код:
d*m*(1 + (d*(1 - d^(n-2)))/(1-d))
Код:
2) 0
3) d*m
4) d^2*m + d*m
5) d^3*m + d^2*m + d*m
В итоге вся формула будет иметь вид
Код:
an = a1 * d^(n-1) + d * m * (1 + (d * (1 - d^(n - 2))) / (1 - d)) + m;
__________________
Я заклинаю вас действовать иначе.


Последний раз редактировалось Bletraut; 31.08.2015 в 16:26.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.