Работа с комплексными числами в Delphi
|
|
FedinMA | Дата: Понедельник, 05.05.2008, 17:03 | Сообщение # 1 |
Асс. каф. ФЭМАЭК
Группа: Модераторы
Сообщений: 227
Статус: Offline
| Конкретно проблема состоит в следующем: необходимо составить матрицу с комплексными элементами, при этом увеличивать в два раза размерность матрицы из-за отдельной работы с действительными и мнимыми частями особого желания нет..
Учиться надо так, чтобы это было тебе в радость.
|
|
| |
DVK | Дата: Понедельник, 05.05.2008, 18:44 | Сообщение # 2 |
Группа: Удаленные
| Раз тут народу мало обитает, я, незная дельфи, позволю себе написать, а точнее расказать, как я себе представляю решение: (я на перле когда-то пытался писать, так что не пинайте - там вообще типизация отсутствует ) 1) Можно числа как строки хранить, если дельфи умеет работать с матрицами строк. Но в это памяти съест много. 2) Если допускается погрешность, можно "скленить действительную и мнимую часть (модуль и угол) в виде: RRRRRIIIII (MMMMMMAAAA). Только обратные преобразования как-то смущают. И почему в 2 раза размерность увеличится? Верно: размерность +1.
|
|
| |
FedinMA | Дата: Среда, 07.05.2008, 12:54 | Сообщение # 3 |
Асс. каф. ФЭМАЭК
Группа: Модераторы
Сообщений: 227
Статус: Offline
| Quote (DVK) И почему в 2 раза размерность увеличится? Верно: размерность +1. Положим, что размерность матрицы исходной системы комплексных уравнений равна 100 (100х100=10000 элементов матрицы). Каждое из этих 100 уравнений распадается, в свою очередь, на 2 уравнения: для действительной и мнимой частей. Тогда размерность квадратной матрицы становится равной 200, т.е. состоять она будет уже из 200х200=40000 элементов, из которых не менее половины, как ты понимаешь, будут нулевыми. Вообще задача эта вчера уже была решена, но тема, естественно, продолжает оставаться актуальной.
Учиться надо так, чтобы это было тебе в радость.
|
|
| |
DVK | Дата: Четверг, 27.11.2008, 19:09 | Сообщение # 4 |
Группа: Удаленные
| OMG. Этож почему 200х200? Было: 100х100х1 -> стало: 100х100х2.
|
|
| |
FedinMA | Дата: Четверг, 27.11.2008, 22:28 | Сообщение # 5 |
Асс. каф. ФЭМАЭК
Группа: Модераторы
Сообщений: 227
Статус: Offline
| Это же трехмерный массив ... Мы вообще немного подзабыли термины. На самом деле, конечно же, размерность вообще не изменится (как была 2, так и останется), изменится размер. Но ход мыслей я, кажется, понял. Действительно, казалось бы можно составить две матрицы размером 100х100 для Re и Im частей и решить две системы из 10000 уравнений, т.е. всего 20000 уравнений, а не 40000, как писалось выше, а нет..не получится. Дело в том, что как действительные, так и мнимые части вектор-столбца неизвестных входят одновременно и в вещественную, и в мнимую части каждого из уравнений системы.
Учиться надо так, чтобы это было тебе в радость.
|
|
| |
DVK | Дата: Четверг, 27.11.2008, 22:42 | Сообщение # 6 |
Группа: Удаленные
| Может я просто не понял. Какая матрица имелась ввиду? Матрица СЛАУ? Или Массив для хранения даннных?
|
|
| |
FedinMA | Дата: Четверг, 27.11.2008, 22:57 | Сообщение # 7 |
Асс. каф. ФЭМАЭК
Группа: Модераторы
Сообщений: 227
Статус: Offline
| Именно матрица А СЛАУ A*x=b.
Учиться надо так, чтобы это было тебе в радость.
|
|
| |
Garry | Дата: Четверг, 20.10.2011, 18:34 | Сообщение # 8 |
Школьник
Группа: Проверенные
Сообщений: 2
Статус: Offline
| Когда такое требовалось, составлял одномерную матрицу записей, которые в свою очередь и были комплексным числом. Либо в форме - длина вектора, угол, либо x,y. А для операций с элементами составить простенькие процедурки. Хотя сейчас уже есть аддоны для дельфи для работы с комплексными числами.
|
|
| |
JuKO | Дата: Пятница, 21.10.2011, 16:59 | Сообщение # 9 |
Аспирант
Группа: Модераторы
Сообщений: 157
Статус: Offline
| Может стоит сделать гайд по решению данной проблемы и выложить его на сайте для всех страждущих? Кто возьмется?
Jedem Das Seine
|
|
| |
Garry | Дата: Понедельник, 24.10.2011, 13:41 | Сообщение # 10 |
Школьник
Группа: Проверенные
Сообщений: 2
Статус: Offline
| Code type ComplexRI = Record Re,Im:real; end; {или} ComplexAF = Record a,fi:real; end; {Логично использовать оба вида записей для облегчения работы и исключения путаницы при выполнении различных операций. Качественно обе записи абсолютно одинаковые, и различаются только именем записи и именем полей. }
var С1:array[1..100] of ComplexRI; C2:array[1..100] of ComplexAF; begin
{тело программы}
end; это пока только описание матриц комплексных чисел, потом приведу описание процедур для работы с ними
Сообщение отредактировал Garry - Понедельник, 24.10.2011, 13:43 |
|
| |