Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *Теория* | Извлечение корня N-степени (http://forum.oszone.net/showthread.php?t=78069)

Coutty 23-01-2007 13:11 540134

*Теория* | Извлечение корня N-степени
 
Школьное определение ("Корнем степени P числа M будет такое число T, которое при возведении в степень P даст M") не годится для вычисления корней - ведь не перебором же они считаются, иначе как калькулятор может выдавать число с длинным рядом цифр после запятой. Должен быть какой-то алгоритм. Подскажите, кто знает.

На вопрос "Зачем это нужно?":
1. Иногда нужно вычислить корень из некоторого нетабличного числа (скажем, корень из 247,5), а под рукой нет вычислительных устройств. Точность плюс-минус 0,5 не подходит - нужно хотя бы до третьего знака после запятой. Скажете: "А где в жизни это вообще встречается?" - Ну, например, на экзамене по физике ;-)
2. С этим алгоритмом можно будет считать "ручками" дробные степени.
3. Просто интересно.

XPEHOMETP 23-01-2007 15:12 540188

Цитата:

корень из 247,5
247.5 = 225 + 22.5 = (15 + х)^2 - надо найти этот х
Стало быть,
30х + х^2 = 22.5
Икс у нас маленький, <1, его квадрат - тем более, пренебрегаем, короче:
корень = 15 + 22.5/30 = 15.75
точное значение - 15,7321327225522732048718027051991
Для экзамена по физике сойдет. Для точности "до третьего знака после запятой" - придется итерационно: взяли х = 0.75, возвели в квадрат, подставили, где надо, получили:
корень = 15 + (22.5 - 0,5625)/30 = 15.73125
Ну, уже почти!

XCodeR 23-01-2007 15:59 540206

а калькулятор на экзамене уже(теперь) запрещен?

Coutty 23-01-2007 17:59 540245

XCodeR, калькулятор даже рекомендуется к использованию. Просто у нас (бедных студентов=^_^= ) всего два калькулятора на группу бывает. Кроме того - просто интересно, как это работает. Попробовать алгоритм сваять...
XPEHOMETP, спасибо! Работает))

Экзамен по физике, правда, уже прошёл и больше не планируется, но на будущее сгодится.
Пойду, попробую на C# переложить...

UPD:
Идём дальше. Пример: корень 5 степени из 6354.
корень = (5 + х)^5.
3125 + 625x + 125x^2 + 25x^3 + 5x^4 + x^5 = 6354
Если пренебречь всем, что степени выше единицы (оставить 3125 + 625х = 6354), то х = 5,1676... Т.е. больше единицы. Соответственно, пренебрегать нельзя. Решаем тогда квадратное уравнение. Получается два корня. Или кубическое - тогда три. Какое число брать? Есть предположение, что то, которое положительное и меньше единицы, но вдруг таких будет несколько? Я не могу проверить - просто не решу кубическое уравнение.
Или тут нужен другой подход?

Ser6720 24-01-2007 00:08 540349

Coutty
Вот ещё способ, самый простой, преподавался в школе
http://www.sctc.msiu.ru/files/10clas...77925045a73e9b,
в самом низу страницы, расписан текстом, хорош для больших чисел.

ещё есть (была) логарифмическая линейка

P.S.
Вот ещё http://www.krugosvet.ru/articles/15/1001515/print.htm

Coutty 24-01-2007 09:16 540442

ser6720, почитал по первой ссылке - почувствовал себя идиотом. По второй всё понятно (даже алгоритм Евклида вспомнил...). Спасибо.

Про линейку ничего не знаю, кроме её внешнего вида))

Да, кстати, то, что я выше пятую степень суммы разложил - это же чушь полная... Я там множители для слагаемых упустил. Надо-то было так: (5+x)^5 = 3125 + 5*625x + 10*125x^2 + 10*25x^3 + 5*5x^4 + x^5

Ser6720 24-01-2007 20:00 540791

Coutty
Цитата:

почитал по первой ссылке - почувствовал себя ......
А как ты хотел, XV век, однако.
Попробую показать.

Задача - извлечь корень квадратный из числа 294849.
Записываем в виде 29.48.49
Силой логики ума находим число, кот. будучи возведённое в квадрат, даст результат близкий к 29.
Очевидно это 5, т.к. 5^2=25,
таким образом 5 это первая цифра ответа.
Далее
**29.48.49
**25
----------------------
10I448

где 29-25=4, к 4 сносим 48,
на * не обращай внимания,
I -это вертикальная черта,
а 10 слева от вертикальной черты, есть удвоенное значение первой цифры ответа, т. е. 5 х 2=10
Теперь в записи 10I448, выделяем число 104 (10 слева от вертик. черты и 4 справа)
Далее силой логики ума находим число, умножив которое на 104, получим число близкое к 448.
Очевидно это 4 , т. к. 104х4=416.
4 есть вторая цифра ответа, т. е. уже есть 54
Далее
***29.48.49
***25
-----------------------------------
*10I448
***I416
------------------------
*108I3249

где 448-416=32,
к 32 сносим 49, получаем 3249.
108 это удвоенное значение промежуточного результата 54х2=108.
I - вертикальная черта.
Теперь в записи 108I3249, выделяем число 1083 (108 слева от вертик черты и 3 справа).
Затем в уме находим число, на которое нужно умножить 1083, чтобы получить 3249.
В данном случае это 3 , т.к. 1083х3=3249.
3 это третья цифра ответа.
Итак

***29.48.49
***25
------------------------первая цифра ответа 5
*10I448
***I416
------------------------вторая цифра ответа 4 , или уже 54
*108I3249
****I3249
------------------------третья цифра ответа 3
********0
итого, ответ:543
Уфффф, написал, надеюсь более понятно, а если непонятно, то не ругай, всё что смог.

Coutty 24-01-2007 22:12 540849

Первый взгляд:
:Ohmy: :clever-ma :o

Первый проход:
Ну... Понять-то я вроде как немного понял. Но на практике уж точно не смогу применить :dont-know

Второй проход:
Попробовал решить. "Угадал" только первую цифру.

Третий проход:
Сошлось до второго знака после запятой. Дальше забил, т.к. мозг выдохся. В принципе, можно даже на практике применять уже.

ser6720, Вы гений! Жаль, что Вы не преподаёте у нас какую-нибудь из математик... =(


Время: 13:19.

Время: 13:19.
© OSzone.net 2001-