IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Возведение в степень
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


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


Гость






Цитата(ramzes @ 14.07.2007 19:54) *

кто-нибудь в курсе, есть ли классический вариант возведения в спепень выражения вида:
(a+ib)^n
(комплексного числа.)
Мне надо получить, например, (a+ib)^2=a^2+2iab+(ib)^2=a^2+2iab-b^2;
максимальное n=10.
Конечно, можно записать многочлен для каждой степени (и это оправдано с точки зрения производительности), но хотелось бы универсализма. А вдруг n=100, в ручную возводить - охренеешь.

Перевести в показательную или тригонометрическую форму, где операция возведения заменяется умножением.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Каждый член многочлена имеет вид k * i^r * a^p * b^q, где r = 0 или 1, а p и q - из отрезка [0; 10].

Объявляем тип "многочлен":

type Poly = array[0 .. 1, 0 .. 10, 0 .. 10] of integer;


Это у нас кубическая матрица, в которой элемент [r][p][q] задает коэффициент k в члене k * i^r * a^p * b^q.

Например, многочлен a^2+2iab-b^2 будет представлен так:

var x: Poly;
begin
fillchar(x, sizeof(x), 0); // заполнили всё нулями
x[0][2][0] := 1; // a^2
x[1][1][1] := 2; // 2iab
x[0][0][2] := -1; // -b^2
...


Дальше реализуем сложение и умножение:

Function Add(a, b: Poly): Poly;
Var res: Poly;
Begin
fillchar(res, sizeof(res), 0);
.. // реализуешь сам
End;

Function Mul(a, b: Poly): Poly;
Var res: Poly;
Begin
fillchar(res, sizeof(res), 0);
.. // реализуешь сам
End;


Ну и дальше сам додумаешь/доделаешь.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ramzes @ 14.07.2007 20:54) *

возведения в спепень выражения вида:
(a+ib)^n
...
Мне надо получить, например, (a+ib)^2=a^2+2iab+(ib)^2=a^2+2iab-b^2;

Мне так и осталось непонятным, что именно ты хочешь.

1. Если а и b - это конкретные числа, то просто реализуй комплексную арифметику.
Тип:
type
tComplexNumber = record
a,b : real
end;

И операцию умножения (другие, вроде как, не нужны):
procedure MultComplex(var z: tComplexNumber; x,y: tComplexNumber);
begin
z.a := x.a*y.a - x.b*y.b;
{вторую строчку допиши сам}
end;

И тогда перемножай числа в простом цикле for хоть 10 раз, хоть 100, хоть до умопомрачения..

2. А если тебе нужен сам вид многочлена, его коэффициенты (чего я вообще-то не понимаю, ибо, например, i^2 = -1, и т.д., так что в нем можно приводить подобные, а в результате все равно получишь тот же результат, что и в способе 1), то - метод Michael_Rybak тебе в помощь..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 13:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name