Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

возведение в степень

28K
14 июля 2007 года
Ramzey
3 / / 12.05.2007
кто-нибудь в курсе, есть ли классический вариант возведения в спепень выражения вида:
(a+ib)^n
(комплексного числа.)
Мне надо получить, например, (a+ib)^2=a^2+2iab+(ib)^2=a^2+2iab-b^2;
максимальное n=10.
Конечно, можно записать многочлен для каждой степени (и это оправдано с точки зрения производительности), но хотелось бы универсализма. А вдруг n=100, в ручную возводить - охренеешь.
2.0K
14 июля 2007 года
nevile
138 / / 05.01.2007
а циклы тебе на что?
551
14 июля 2007 года
Pavia
357 / / 22.04.2004
Через Cos и Sin быстрее
16K
14 июля 2007 года
OlbanyRok
75 / / 14.07.2007
Ну, по форме биномиальная формула. Должна быть.
Поищи... ну не знаю, хоть у Кнута.
350
15 июля 2007 года
cheburator
589 / / 01.06.2006
Цитата: Pavia
Через Cos и Sin быстрее


Ага. Если точнее, через экспоненту. Читайте элементарный матан :)

Комплексное число a + i*b можно представить в виде A*(cos fi + i * sin fi) = A * e ^ (i * fi), где A - модуль комплексного числа, fi - аргумент. Связь с a и b в формуле a + i*b такова:
A = sqrt(a^2 + b^2), где sqrt - корень квадратный;
fi = arctg (b/a),
а также
a = A * cos fi,
b = A * sin fi.

Теперь перейдем к возведению в степень.
(a + i*b) ^ n = (A * e ^ (i*fi)) ^ n = A^n * e^(i*fi*n) = A^n * (cos (fi*n) + i * sin (fi*n))... Далее, думаю, понятно - вместо A и fi подставим вышеуказанные значения. И никаких биномов - снято ограничение на целостность числа n.
Вот такой примерно код:

 
Код:
double A = sqrt (a*a + b*b);
double fi = a == 0 ? pi/2 : atan(b/a);
double ApowN = pow (A, n);
double a1 = ApowN * cos (fi * n);
double b1 = ApowN * sin (fi * n);

Вообще-то, если речь идет о C++, все это реализовано:
Код:
#include <complex>
#include <stdio>
using namespace std;

void main ()
{
  double a, b, n;
  cout >> "Введите реальную часть числа, мнимую часть числа, показатель степени:";
  cin >> a >> b >> n;
  complex<double> x (a, b);
  complex<double> result = pow (x, n);
  std::cout << "Результат: " << result.real() << " + i * " << result.imag();
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог