Re: Mathematic Library

From
Mikhail Kalenkov ()
To
Sergey Gridasov
Date
2002-08-23T19:28:20Z
Area
RU.ALGORITHMS
From: "Mikhail Kalenkov" <kalenkov@rinet.ru>

Hello Sergey

> У math.h вечная пpоблема коpни (такого типа: коpень (-1/7) степени из
(-5/9)).
Да нет у неё таких проблем! Говорю подробно и один раз. Пусть нам нужно
вычислить выражение res=a^b, где a и b, вообще говоря, комплексные числа.
Тогда ответ выглядит так
res=exp(b*Ln(a)) ,
где Ln - МНОГОЗНАЧНАЯ комплекснозначная функция комплексного аргумента,
которая определяется следующим образом
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.
Надоело мне что-то, но если тебе интересно продолжение, то я продолжу.

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

> В связи с этим появилась необходимость её реализации. 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)