Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Войти

ВНИМАНИЕ! Работа форума продлена. Спонсор веселья Магазин химической посуды и реактивов Antrazoxrom.ru Здесь Вы всегда можете приобрести реактивы и оборудование по выгодным ценам. Но главное преимущество данного магазина, это фасовка в любом нужном вам количестве без необходимости покупать лишнее.
Правила для пользователей Пиротека
Вы так же можете пожертвовать на оплату хостинга по кнопке ниже


Страниц: 1   Вниз
  Печать  
Автор Тема: Вычисления (математика)  (Прочитано 8138 раз)
Ozone
Пиротехник*

Пирорепутация: +100/-32
Оффлайн Оффлайн

Сообщений: 1510
« : 30 Октябрь 2011, 12:18:23 »

Когда то давно в мои ранние школьные годы калькуляторов с синусами и логарифмами почти не было, а если и были, то стоили они тогда как мне казалось дорого. Поэтому пользовался я тогда обычным калькулятором, где были основные операции + - * / ну и ещё извлечение квадратного корня.

Раннее увлечение точными науками заставило меня искать эффективные способы вычисления: и синусов, и арксинусов, и логарифмов, и экспоненты, а так же корней других степеней, например кубического, используя при этом только основные операции: + - * /. И в самом деле это довольно эффективно можно сделать! Сейчас возможно это уже не так актуально, но тогда было интересно. Я на таком простом калькуляторе считал всё что мне нужно и довольно быстро.

Например кто то знает как можно вычислить квадратный корень используя только основные операции арифметики? А кубический?

Я позже тут напишу, после нескольких ответов.
bomsz
Специалист

Пирорепутация: +11/-2
Оффлайн Оффлайн

Сообщений: 1150
« Ответ #1 : 30 Октябрь 2011, 15:31:31 »

Ну можна ответ угадать, а калькулятором только проверять насколько точно угадал.
Перемножил угаданый результат на его же, и надо смотреть совпало или не.
А если не совпало, то вышло больше или меньше? И насколько?
Тогда следующеее угадывание будет точнее, а следующее еще точнее.
Кажется это метод итераций.
Ozone
Пиротехник*

Пирорепутация: +100/-32
Оффлайн Оффлайн

Сообщений: 1510
« Ответ #2 : 30 Октябрь 2011, 18:35:53 »

Вообще некоторые методы так и поступают: угадать начальное значение, а потом его улучшить, потом ещё улучшить и так до необходимой точности.

Например квадратный корень из числа w можно посчитать решив уравнение: 0=x2-w

Корень функции y=x2-w ищут методом касательных Ньютона - самый быстро сходящийся итерационный метод. Первое приближение можно взять любое число больше нуля, например само w.

x0 = w

Следующие ищут так: xn+1 = xn - y(xn)/y'(xn)

Функция делённая на производную - это и есть наиболее хорошая поправочка для одной итерации. Для поиска квадратного корня получается так:

xn+1 = xn - ((xn)2 - w)/(2*xn)

После упрощения получается:

xn+1 = (xn + w/xn)/2

...

Можно посмотреть немного другую интерпретацию. Допустим xn уже довольно хорошее приближение корня из числа w, тогда надо как то прикинуть на сколько лучше всего скорректировать его за одну итерацию чтобы следующее приближение корня было ещё лучше. Обозначим коррекцию пока условно h и посмотрим на следующее:

(xn + h)2 = (xn)2 + 2*xn*h + h2

Предполагается что h по модулю меньше чем xn и последнее слагаемое вносит минимальный вклад в сумму.

w = (xn)2 + 2*xn*h + h2
w - (xn)2 = 2*xn*h + h2
w/xn - xn = 2*h + h2/xn
(w/xn - xn)/2 = h + h2/(2*xn)

Пренебрегая малым по сравнению с h слагаемым h2/(2*xn) откинем его и получим примерное значение для h.

h ~ (w/xn - xn)/2

Тогда новое и более точное значение для следующего приближения:

xn+1 = xn + (w/xn - xn)/2

Что после упрощения даст то же самое как и в методе касательных Ньютона.

...

x0 = w
xn+1 = (xn + w/xn)/2

Проверка.

w = 64
x0 = 64
x1 = (64 + 64/64)/2 = 32.5
x2 = (32.5 + 64/32.5)/2 = 17.234615
x3 = (17.234615 + 64/17.234615)/2 = 10.474035
x4 = (10.474035 + 64/10.474035)/2 = 8.2921915
x5 = (8.2921915 + 64/8.2921915)/2 = 8.0051479
x6 = (8.0051479 + 64/8.0051479)/2 = 8.0000016
x7 = (8.0000016 + 64/8.0000016)/2 = 8.00000000000016
x8 = (8.00000000000016 + 64/8.00000000000016)/2 = 8.0000000000000000000000000016

Чем ближе к корню - тем быстрее начинает сходиться.

Для примера вычисление кубического корня происходит так:

x0 = w
xn+1 = (2*xn + w/(xn)2 )/3

И пример:

w = 27
x0 = 27
x1 = (2*27 + 27/(27*27))/3 = 18.012345
x2 = (2*18.012345 + 27/(18.012345*18.012345))/3 = 12.035969
x3 = (2*12.035969 + 27/(12.035969*12.035969))/3 = 8.0861063
x4 = (2*8.0861063 + 27/(8.0861063*8.0861063))/3 = 5.5283835
x5 = (2*5.5283835 + 27/(5.5283835*5.5283835))/3 = 3.9800624
x6 = (2*3.9800624 + 27/(3.9800624*3.9800624))/3 = 3.2215245
x7 = (2*3.2215245 + 27/(3.2215245*3.2215245))/3 = 3.0148837
x8 = (2*3.0148837 + 27/(3.0148837*3.0148837))/3 = 3.0000733
x9 = (2*3.0000733 + 27/(3.0000733*3.0000733))/3 = 3.00000000179
x10 = (2*3.00000000179 + 27/(3.00000000179*3.00000000179))/3 = 3.000000000000000001
SableKnight
Специалист

Пирорепутация: +11/-1
Оффлайн Оффлайн

Сообщений: 253
« Ответ #3 : 30 Октябрь 2011, 21:14:26 »

Квадратный корень для небольших целых чисел - можно просто вычитать из них все нечетный по порядку. Считаем кол-во действий, и вуаля :)
Например, дано число 64

1) 64-1=63
2) 63-3=60
3) 60-5=55
4) 55-7=48
5) 48-9=39
6) 39-11=28
7) 28-13=15
8) 15-15=0

Совершено 8 действий, следовательно, квадратный корень из 64 = 8

Долго и довольно грубо, зато никакого умножения и деления, то есть калькулятор совсем отпадает)
-----------------------------
Еще один интересный способ описан в вике, но про него я  узнал только что... А про описанный здесь - из детской книжки "Путешествие в историю математики", полученной в 5-ом классе за участие в олимпиаде по информатике :)
Ozone
Пиротехник*

Пирорепутация: +100/-32
Оффлайн Оффлайн

Сообщений: 1510
« Ответ #4 : 30 Октябрь 2011, 21:28:58 »

Квадратный корень для небольших целых чисел - можно просто вычитать из них все нечетный по порядку.
Это да, потому как соседние квадраты целых чисел всегда отличаются на нечётные числа идущие по порядку.

(n+1)2 - n2 = 2*n +1

1 = 1
1 + 3 = 4
1 + 3 + 5 = 9
1 + 3 + 5 + 7 = 16
1 + 3 + 5 + 7 + 9 = 25
...
« Последнее редактирование: 30 Октябрь 2011, 21:31:34 от Ozone »
Ozone
Пиротехник*

Пирорепутация: +100/-32
Оффлайн Оффлайн

Сообщений: 1510
« Ответ #5 : 31 Октябрь 2011, 18:23:05 »

Сегодня будем считать логарифм. :cheesy:

Для простоты по основанию 2.

То есть для любого числа w надо назвать такое число x, что 2x = w.

Это обозначается так: x = log2w.

Логарифмы (для вещественных чисел) можно считать только для w > 0. Для других случаев он определяется иначе, уходя в комплексную область чисел, а в 0 устремляясь к одной из бесконечностей.

И так, w > 0. Если w = 1, то его логарифм равен 0, так как 1 = 20.
Если w < 1 (но w > 0) тогда вычислим 1/w и уже от него будем дальше считать логарифм, просто запомним, что перед ним надо будет написать знак "-", он будет отрицательным.

Отбросив все тонкости имеем условие w>1, надо определить в какой степени число 2 даст такое число w.

То есть решить уравнение: w = 2x, при w > 1.

Алгоритм:

Надо определить целое число n, такое чтобы: 1 <= w/(2n) < 2
Это будет целая часть числа x.

w/(2n) = 2x-n

Значение (x-n) лежит между 0 <= (x-n) < 1 и чтобы узнать следующую десятичную цифру числа x надо возвести обе части выражения в степень 10. Получим:

(w/(2n))10 = 2(x-n)*10

Теперь новое значение w' = (w/(2n))10, а найти надо снова первую целую цифру числа (x-n)*10, она как раз лежит в 0 <= (x-n) < 10, снова действуем так же, только с новым уравнением: w' = 2x'

Продолжая так делать мы сможем найти последующие цифры исходного числа x, тем самым вычислив логарифм исходного числа w.

Пример: log230

16 <= 30 < 32, значит целая часть степени равна 4 (24 = 16).
30/16 = 1.875

----------------

Далее хвостик: log21.875

Возведём 1.875 в 10 степень и найдём целую часть логарифма.

1.87510 = 537.04752644989639520645141601563

512 <= 537.04752644989639520645141601563 < 1024
Значит вторая цифра логарифма это 9 (29 = 512)
537.04752644989639520645141601563/512 = 1.0489209500974538968876004219055

----------------

Следующий хвостик: log21.0489209500974538968876004219055

Возведём опять в степень 10.

1.048920950097453896887600421905510 = 1.6122322217108406432700103917809

1 <= 1.6122322217108406432700103917809 < 2
Хороший случай, значит третья цифра это 0 (20 = 1)

----------------

Хвостик: log21.6122322217108406432700103917809

Возведём опять в степень 10.

1.612232221710840643270010391780910 = 118.65224672328065554328088882849

64 <= 118.65224672328065554328088882849 < 128
Четвёртая цифра это 6 (26 = 64)
118.65224672328065554328088882849/64 = 1.8539413550512602428637638879451

----------------

Хвостик: log21.8539413550512602428637638879451

Возведём опять в степень 10.

1.853941355051260242863763887945110 = 479.6891791112607334627100837127

256 <= 479.6891791112607334627100837127 < 512
Пятая цифра это 8 (28 = 256)
479.6891791112607334627100837127/256 = 1.8737858559033622400887112645027

----------------

Хвостик: log21.8737858559033622400887112645027

1.873785855903362240088711264502710 = 533.5800261099443896324773924383

512 <= 533.5800261099443896324773924383 < 1024
Шестая цифра это 9 (29 = 512)
....

И так: log230 = 4.90689...
seva
Модератор раздела

Пирорепутация: +29/-1
Оффлайн Оффлайн

Сообщений: 494
« Ответ #6 : 31 Октябрь 2011, 18:49:09 »

Кто знает сколькими способами можно разменять 50 копеек , если есть 1,2,5 копеечные монеты?
Ozone
Пиротехник*

Пирорепутация: +100/-32
Оффлайн Оффлайн

Сообщений: 1510
« Ответ #7 : 31 Октябрь 2011, 19:38:49 »

Кто знает сколькими способами можно разменять 50 копеек , если есть 1,2,5 копеечные монеты?

(1 способ)

50 = 5*10

(3 способа)

50 = 5*9 + 2*2 + 1*1
50 = 5*9 + 2*1 + 1*3
50 = 5*9 + 2*0 + 1*5

(6 способов)

50 = 5*8 + 2*5 + 1*0
50 = 5*8 + 2*4 + 1*2
50 = 5*8 + 2*3 + 1*4
50 = 5*8 + 2*2 + 1*6
50 = 5*8 + 2*1 + 1*8
50 = 5*8 + 2*0 + 1*10

(8 способов)

50 = 5*7 + 2*7 + 1*1
50 = 5*7 + 2*6 + 1*3
50 = 5*7 + 2*5 + 1*5
50 = 5*7 + 2*4 + 1*7
50 = 5*7 + 2*3 + 1*9
50 = 5*7 + 2*2 + 1*11
50 = 5*7 + 2*1 + 1*13
50 = 5*7 + 2*0 + 1*15

...

1 + 3 + 6 + 8 + 11 + 13 + 16 + 18 + 21 + 23 + 26 = 146 способов.
« Последнее редактирование: 31 Октябрь 2011, 19:41:35 от Ozone »
seva
Модератор раздела

Пирорепутация: +29/-1
Оффлайн Оффлайн

Сообщений: 494
« Ответ #8 : 31 Октябрь 2011, 19:55:31 »

ээ, а нам вроде препод говорил что 36 способами
пьос

Пирорепутация: +68/-3
Оффлайн Оффлайн

Сообщений: 639
« Ответ #9 : 01 Ноябрь 2011, 10:55:25 »

Препод просто не знаком с Озоном.
Да, силён, уважаю  :good:
seva
Модератор раздела

Пирорепутация: +29/-1
Оффлайн Оффлайн

Сообщений: 494
« Ответ #10 : 01 Ноябрь 2011, 16:19:16 »

да респект Озону . Препод решал методом подбора .
Страниц: 1   Вверх
  Печать  

Powered by SMF 2.0.18 | SMF © 2006-2008, Simple Machines LLC

© 2024 piroforum.info Копирование материалов сайта запрещено.