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

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Ramzey
Сообщения: 49
Зарегистрирован: 12 дек 2006, 12:56

14 июл 2007, 20:52

кто-нибудь в курсе, есть ли классический вариант возведения в спепень выражения вида:
(a+ib)^n
(комплексного числа.)
Мне надо получить, например, (a+ib)^2=a^2+2iab+(ib)^2=a^2+2iab-b^2;
максимальное n=10.
Конечно, можно записать многочлен для каждой степени (и это оправдано с точки зрения производительности), но хотелось бы универсализма. А вдруг n=100, в ручную возводить - охренеешь.
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

16 июл 2007, 04:58

реализуй операцию умножения двух комплексных чисел, а потом разложи свою степень, как последовательность умножения N комплексных чисел, где N - степень. Причём из приведённого тобой примера, это решение просто напрашивается :)
Ramzey
Сообщения: 49
Зарегистрирован: 12 дек 2006, 12:56

16 июл 2007, 13:37

И как ты себе это представляешь?
Приведи пример для N=7, например на паскале.
Наверно стоит уйти от комплексных чисел, пусть будет (x+ay)^n.
(для комплексных все крайне просто)
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

17 июл 2007, 06:15

Просишь пример? Хорошо вот тебе пример (но только для комплексных чисел, если будут ошибки в работе с ними прошу прощения, я комплексные числа изучал крайне давно и не работал больше с ними)
(a1+i*b1)*(a2+i*b2) = a1*a2+i*b2*a1+i*b1*a2+i*b1*i*b2 = a1*a2+i*b2*a1+i*b1*a2-b1*b2=a1*a2-b1*b2+i*(b1*a2+b2*a1) = a3+i*b3

это пример умножения двух комплексных чисел (разных), в результате чего получается новое комплексное число.
(a+ib)^N есть последовательное произведение N одинаковых комплексных чисел:
(a+ib) * (a+ib) * (a+ib) * ... * (a+ib)
думаю с этим может уже справиться и обыкновенный цикл.
Реализуешь функцию произведения двух комплексных чисел (например ComplexMul)

Код: Выделить всё

type
  TComplex = record
    a, b: Real;
  end;
function ComplexPower(a: TComplex; n: Integer): TComplex;
var
  i: Integer;
begin
  Result := a;
  for i := 2 to n do
    Result := ComplexMul(Result, a);
end;
Что ещё надо?
Ответить