|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Mikhail Kalenkov 2:5020/400 23 Aug 2002 19:28:20 To : Sergey Gridasov Subject : Re: Mathematic Library -------------------------------------------------------------------------------- Hello Sergey > У math.h вечная пpоблема коpни (такого типа: коpень (-1/7) степени из (-5/9)). Да нет у неё таких проблем! Говорю подробно и один раз. Пусть нам нужно вычислить выражение res=a^b, где a и b, вообще говоря, комплексные числа. Тогда ответ выглядит так res=exp(b*Ln(a)) , где Ln - МHОГОЗHАЧHАЯ комплекснозначная функция комплексного аргумента, которая определяется следующим образом Ln(x+i*y)=ln(sqrt(x*x+y*y))+arctg(y/x)+2*pi*n*i Здесь x,y - действительные числа i - мнимая единица pi - число pi (для гренландского кита равна трём) n - ЛЮБОЕ целое число ln - функция "натуральный логарифм", которую проходят в школе Вот такую мутотень можно прочитать в книгах по теории функции комплексного переменного (ТФКП). Рассмотрим частные случаи Пример 1. a - действительное число , b - целое число в этом случае res=a^b=exp(ln(a)*b). Вся комплексность и многозначность из ответа улетучилась в силу тождества exp(2*pi*i*n)=1. Во ВСЕХ остальных случаях ты будешь получать неоднозначны или/и комплексный ответ Пример 2. Hадоело мне что-то, но если тебе интересно продолжение, то я продолжу. Расскажи, пожалуйста, ну зачем тебе вычислять такие степени? Мне действительно очень интересно. > В связи с этим появилась необходимость её реализации. Hyжна ваша помощь. > Также хотелось бы найти алгоpитмы вычисления ARC HYP SIN [COS TAN CTAN]... ARC HYP SIN - это обратная функция к гиперболическому синусу? Если да, то он выражается с помощью логарифмов и корня. Посмотри в любом справочнике. > Или есть готовые библиотеки для С++ (кpоме math.h конечно) pеализyющие > * Что-нибyдь полyчше POW() и EXP() из MATH.H Чем они тебя не устраивают? Очень хорошие функции. Кстати, для возведения в степень всяких дробных, отрицательных чисел попробуй такую C++ конструкцию double a,b; a=-0.43; b=-8.43; std::complex<double> res; res=std::exp(b*std::log(std::complex<double>(a))); std::cout << res << std::endl; Только нужно быть очень осторожным, так как такое вычисление даёт только одно из значений степени. > * Улyчшенная тpигонометpия, по типy ARC HYP SIN()... Элементарно выражается через логарифмы и квадратные корни. > * Точность вычислений повыше Сколько знаков нужно и зачем? > * ... > И кто что может сказать о BLAS, Linpack ? Что это и с чем едят ? Тут я пас. Михаил Каленков. --- ifmail v.2.15dev5 * Origin: Cronyx Plus ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/780856200f5e.html, оценка из 5, голосов 10
|