Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Опять за старое :)   Найти похожие ветки 

 
Loginov Dmitry ©   (2006-08-18 07:38) [0]

Начал разработку новой версии системы матричный вычислений(старую версию так и  не стал развивать, так как это полнейший тупик).

Возможности новой версии модуля:
- будет встроена работа с массивами всех стандартных числовых типов, а  также работа с битовой матрицей (таким образом, количество элементов  массива сможет достигать 16 миллиардов)
- поддержка многомерных массивов без ограничений по числу измерений  (однако "родными" будут все же 2-мерные матрицы)
- поддержка массивов с комплексными элементами (по умолчанию будут  реализованы комплексные массивы с элементами типа Integer и Extended).
- возможность добавлять свои типы массивов
- поддержка всех основных возможностей старой версии
- запись/чтение данных в файлы различных форматов
- привязка массива к рабочей области станет необязательной, но такая  возможность по-прежнему сохранится, так как в этом-то и есть сила старой  версии.
- массивы MatriX будут удобными обертками динамических массивов Delphi, хотя на самом деле способ хранения массивов может быть любой.

Архитектура системы следующая
______________________________

                   Абстрактный класс TMatrix
                       /              \
Класс целочисленных массивов         Класс дробных массивов
   |             |       |                  |          |
TBitMatrix TByteMatrix TIntMatrix..  TSingleMatrix TDoubleMatrix ...

Абстрактный класс TMatrix умеет делать львиную долю всех основных  операций, реализованных в старой версии. Ему плевать, какие типы  элементов у его потомков, и работает он в основном с типом Extended.
Класс целочисленных массивов уже учитывает тот факт, что элементы у его  потомков будут целочисленными, и предоставляет более эффективные  средства для реализации некоторых операций. Соответствующие методы  класса TMatrix являются виртуальными, и их всегда можно перезаписать в  потомках для написания более эффективного кода.
Есть операции, которые сильно привязаны к типу элементов, например,  запись в двоичный файл и т.п. Такие операции будут реализованы лишь в  потомках, однако как виртуальные (и по мере возможности абстрактные) в  классе TMatrix они присутствовать будут.

Думаю, что при таком подходе число строк модуля сильно не увеличится.

Надеюсь, пользы от такой задумки (реализованной, конечто) будет  по-больше, чем от старой версии.

Пока написано только 700 строк программного кода, т.е. разработка только  начата.
Если есть какие-либо идеи по улучшению модуля, выскажите их.

Время, которое будет затрачено на написание системы я еще даже не  расчитывал, но чувствую, что ни один месяц придется возиться.

Ну и конечно, как всегда, присоединяйтесь!


 
Jeer ©   (2006-08-18 09:51) [1]

Loginov Dmitry ©   (18.08.06 07:38)

>старую версию так и  не стал развивать, так как это полнейший тупик).

о чем и предупреждалось.


> Возможности новой версии модуля:
> - будет встроена работа с массивами всех стандартных числовых
> типов,


Опять изобретаем свой "велосипед" ?

Удивишся, но если ты взглянешь, например, на библиотеку Delphi Fundamentals by David Butler, то найдешь очень много "похожих", но реализованных мыслей.

Кстати, очень рекомендую всем, кто работает с разными структурами данных и математикой и ее не видел - взглянуть.

http://fundementals.sourceforge.net/


 
Loginov Dmitry_   (2006-08-18 10:39) [2]


> Удивишся, но если ты взглянешь, например, на библиотеку
> Delphi Fundamentals by David Butler, то найдешь очень много
> "похожих", но реализованных мыслей.


Так посмотрел в легкую. Хорошо, но местами слабовато. Сплагиатить есть что, однозначно :).

Новая система помощнее будет (если получится ее реализовать :)

Дома более подробно ознакомлюсь с исходниками (ой как я их раскритикую :)))).


 
Loginov Dmitry ©   (2006-08-18 16:25) [3]

Посмотрел. Ознакомился.


> http://fundementals.sourceforge.net/

- просто сборник различных процедур и функций на все случаи жизни. Там есть средства для работы с матрицами и векторами, но они являются весьма примитивными. Ставить данное средство в аналоги MatriX весьма необоснованно, имхо.

Но взглянуть на эту штуку все-же можно. Много интересного (правда на 90% бесполезного :)).

Похожих, но реализованных мыслей там все-таки нет. Матрицей тама является 2-мерный массив вещественных чисел типа Extended. И все! Никакие другие типы не поддерживаются. Даже до старой версии MatriX этой штуке весьма далеко.


 
Loginov Dmitry ©   (2006-08-18 16:31) [4]

> правда на 90% бесполезного


Однако оставшиеся 10% весьма полезные. Например FFT. Сплагиатить будет чего :)


 
Jeer ©   (2006-08-18 17:36) [5]


> Много интересного (правда на 90% бесполезного :)).


Ну-ну..
Ожидаем-с очередного тупика с вашей стороны.


 
Loginov Dmitry ©   (2006-08-18 18:24) [6]

Не дождетесь...
Тупика.

Будет рульная вещь!


 
Мефисто   (2006-08-18 19:29) [7]


> Loginov Dmitry ©   (18.08.06 18:24) [6]



> Будет рульная вещь!


Ждем первых исходников рульной вещи :)

чтобы по аналогии [2]:


> (ой как я их раскритикую :)))).


;)


 
Галинка ©   (2006-08-18 19:32) [8]

Жду... А то собираются на Матлаб переводить. Т.к. она и есть мощная программуля работающая с матрицами. Но с дельфи тугова-то контачит (((


 
Loginov Dmitry ©   (2006-08-18 20:20) [9]

> Жду... А то собираются на Матлаб переводить. Т.к. она и
> есть мощная программуля работающая с матрицами. Но с дельфи
> тугова-то контачит (((


А чем старая версия не подходит? Не надейтесь, что новая версия заменит Матлаб. Уже пробовал. Бесполезно :(


 
Loginov Dmitry ©   (2006-08-25 21:19) [10]


> Ждем первых исходников рульной вещи :)


Дождались :)

http://matrix.kladovka.net.ru/download.php?getfilename=uploads/heart/Matrix2.zip

В архиве как всегда небольшая демка. Пока реализованы (частично) классы TByteMatrix, TIntegerMatrix, TExtendedMatrix. Создание новых классов - дело техники, когда все основные операции уже реализованы в родительских классах.

Сейчас для математических операций доступны функции CalcFunc, CalcFunc2, MulMatrix. Вся работа производится исключительно с классом TMatrix (за исключением упоминания дочерних классов при создании массивов). Таким образом, любая математическая функция сможет работать вперемежку с массивами различных (но совместимых) классов (т.е. Byte вполне совместим с Extended и наоборот).

В демке вы можете создать неограниченное кол-во массивов любого типа (по выбору), и выполнить над ними матем. операции (тоже по выбору).

Модуль получается очень простым. Программирование с использованием виртуальных методов рулит! :))

Можете попинать меня за плохое качество кода и за неоригинальность решений :))

Жду отзывов...


 
Alexis ©   (2006-08-25 23:03) [11]


> Программирование с использованием виртуальных методов рулит!
>  :))

Программирование с использованием шаблонов рулит! :)

TByteMatrix, TIntegerMatrix, TExtendedMatrix ... эх, эх
На меня конечно сейчас накинутся, но уж лучше эту математику писать на C++. Там можно определить один шаблонный класс TMatrix, а уж пользователь библиотеки мог бы юзать этот класс как хочет и работать с любыми типами:

TMatrix<Byte> *object = new TMatrix<Byte>();
TMatrix<Integer> *object = new TMatrix<Integer>();
TMatrix<Extended> *object = new TMatrix<Extended>();

object->DoCalculations();
Синтаксис сишный, но на Delphi давно не писал, не помню синтаксиса.


> Однако оставшиеся 10% весьма полезные. Например FFT

Это о быстром преобразовании Фурье речь идет?


 
Anatoly Podgoretsky ©   (2006-08-25 23:17) [12]

Это мы уже проходили, теперь вторая стадия Марлианского балета?


 
Loginov Dmitry ©   (2006-08-26 09:07) [13]

Что-то у меня DMC эту ветку никак не хочет нормально отображать


> Это мы уже проходили


Ну да. Было дело. Была создана финальная версия. И вот опять...
Новые идеи приходят с опытом.


> теперь вторая стадия Марлианского балета?


Че за балет? Ни разу не был в Марлиане.


 
Loginov Dmitry ©   (2006-08-26 09:11) [14]


> Alexis ©   (25.08.06 23:03) [11]

> Программирование с использованием шаблонов рулит! :)


Может быть. Но на этом форуме рулит Дельфи, а не Приплюснутый, так что шаблоны пусть курят где-нить в сторонке.


> Это о быстром преобразовании Фурье речь идет?


Это самое!


 
Lamer@fools.ua ©   (2006-08-26 10:30) [15]

>>Anatoly Podgoretsky ©   (25.08.06 23:17) [12]

[offtopic]
Марлезонского, вроде...
[/offtopic]


 
Marser ©   (2006-08-26 10:33) [16]

> [12] Anatoly Podgoretsky ©   (25.08.06 23:17)
> Это мы уже проходили, теперь вторая стадия Марлианского
> балета?

Мерлезонского (С) "Три мушкетёра".
Да, проходили, было дело. Только Вас уже давно не было, много вы пропустили. Но, как видите, под сей ценный проект Керк даже место в "Кладовке" выделил.


 
Marser ©   (2006-08-26 10:35) [17]

> [15] Lamer@fools.ua ©   (26.08.06 10:30)

{$IFDEF OFFTOP}
Это по фильму так слышится, в книге именно так, как я написал, во всяком случае, в одном из переводов.
{$ENDIF}


 
Loginov Dmitry ©   (2006-08-26 12:33) [18]

> Marser ©   (26.08.06 10:33) [16]

> Да, проходили, было дело. Только Вас уже давно не было,
> много вы пропустили. Но, как видите, под сей ценный проект
> Керк даже место в "Кладовке" выделил.


Анатолий как раз ничего не пропустил. От него постов по этой теме было значительно больше, чем от любого другого форумчанина (правда на sql.ru)


 
Anatoly Podgoretsky ©   (2006-08-26 17:40) [19]

Loginov Dmitry ©   (26.08.06 12:33) [18]
Не помню, что бы я много писал, больше в сторонке стоял.
Тут надо процесс правильно организовать, а не собой восхищаться.
Пока последнего больше, особенно в первой части балета.
Работать, работать и еще раз работать.


 
Loginov Dmitry ©   (2006-08-26 18:09) [20]

> Пока последнего больше, особенно в первой части балета.


Во второй части такого не будет. Уже не интересно стало.


> Тут надо процесс правильно организовать


Вот я и хочу узнать мнение профессионалов: в привильном ли направлении я сейчас двигаюсь. Может конструктивные советы будут у кого-нибудь. Может стоит подправить иерархию классов. Ведь чем дальше, тем сложнее будет исправлять ошибки, с будущей функциональностью желательно определиться на начальном этапе.


 
ArtemESC ©   (2006-08-26 19:35) [21]

Loginov Dmitry, напиши хотя бы нормальную справку, а то невозможно понять: какие-то рабочие области - читая описания, чувствуешь, что писалось каким - то невростенником (не хочу никого обидеть), просто ничего не понятно - какие-то судорожные описания, я не считаю себя чайником - читал множество документаций, и в большинстве доходило о чем идет речь...


 
Loginov Dmitry ©   (2006-08-26 20:50) [22]

> ArtemESC ©   (26.08.06 19:35) [21]


Для старой версии на сайте есть подробнейшая справка.
Почитай. Я думаю, что все станет ясно.

Для текущей (новой) версии я комментариями особо не раскидывался, так что на них особенно внимания не обращайте, тем более, работа с рабочими областями пока реализована на уровне "абы работало".


 
Loginov Dmitry ©   (2006-09-04 21:10) [23]

Да уж.. Прогресс идет весьма медленно. Скорректирую будущие возможности, указанные в [0].

- поддержка 2-мерных массивов числовых типов (целых и дробных) (возможны и другие типы);
- поддержка многомерных массивов чисел типа Extended
- поддержка многомерных массивов типа Integer (на его основе будут построены многомерные массивы объектов)
- поддержка многомерных вариантных массивов (с счастью, это стандартный тип данных в Дельфи).
- эмуляция таких типов данных Матлаба, как cell array, structure
- каждый объект TMatrix может быть владельцем произвольного числа других подобных объектов.

В результате:
- значимость объекта TWorkspace (рабочая область) будет значительно снижена. Но объект придется сохранить для возможности "правильной" обработки исключений. Объект как и раньше будет использоваться как хранилище массивов, и владелец других объектов TWorkspace. Правильная обработка исключений подразумевает, что будут удалены все данные, которыми все-равно невозможно будет воспользоваться в случае возникновения исключения (это все данные, хранимые в дочерних рабочих областях).

- новые типы данных позволят выполнить эмуляцию многих "заумных" операций системы Матлаб (весьма упростится процесс конвертации кода Матлаба в Delphi).

- будет упрощен процесс программирования "внешних" функций, так как ряд проверок переданных данных будет просто не нужен. Также не будет требоваться копирование всех входных массивов в рабочую область функции и перемещение массивов-результатов в рабочую область вызывающей функции.

- будет усложнен вызов этих "внешних" функций. Перед их вызовом придется сначала создать объекты, с которыми функция будет работать. Смысл в том, что функция должна возвращать данные в любом формате, а требуемый формат она сможет узнать только если объект-результат будет создан заранее. При вызове "внешней" функции, как и раньше, может быть передана ссылка на рабочую область вызывающей функции (для правильной обработки исключений).

Короче, ХЗ, сколько месяцев уйдет на это чудо ;)


 
Loginov Dmitry ©   (2006-09-05 18:21) [24]

Корректировочка :)

- поддержки 2-мерных массивов не будет. Абсолютно все массивы будут многомерные, причем как размерность, так и размеры массивов можно будет изменять динамически.

- от динамических массивов опять придется отказаться. Причины:
 - низкая скорость обработчи элементов многомерных дин. массивов;
 - низкая скорость операции изменения размеров (идет обнуление и копирование старых элементов когда надо, и когда не надо);
 - размерность нельзя изменять динамически;
 - невозможно применить какой-либо унифицированный способ доступа к элементам дин. массива любого числового типа, в результате чего приходится перекрывать через чур много виртуальных методов родительского класса.


 
Loginov Dmitry ©   (2006-09-07 01:20) [25]

Все-таки нашел немного времени от описания будущих возможностей перейти к реализации. Оставшуюся неделю этого времени наверное уже не будет.

На данный момент реализовано следующее:

- массивы стали полностью динамическими, т.е. менять размерность и размеры можно когда угодно.
- созданы классы TIntegerMatrix и TExtendedMatrix.
- размерность массивов программно не ограничивается, однако-же если число изменений больше 20, то доступ к отдельным элементом начинает тормозить (хотя он все-равно по крайней мере в 100 раз быстрее, чем у Матлаба).
- реализованы вычислительные функции CalcFunction, CalcOperation, MulMatrices, в качестве параметров которых поступает открытый массив объектов TMatrix. (MulMatrices - матричное умножение переданных многомерных массивов)
- реализованы операции перемещения массивов, копирования со содержимому, копирования по ссылке.
- реализовано свойство VecElem[], позволяющее обращаться к массивам любой размерности как в вектору. Свойство обеспечивает также самый быстрый способ доступа к элементам массива.
- и другое.


> ArtemESC ©   (26.08.06 19:35) [21]
> Loginov Dmitry, напиши хотя бы нормальную справку, а то
> невозможно понять: какие-то рабочие области - читая описания,
> чувствуешь, что писалось каким - то невростенником (не
> хочу никого обидеть), просто ничего не понятно - какие-то
> судорожные описания, я не считаю себя чайником - читал множество
> документаций, и в большинстве доходило о чем идет речь...


Теперь все стало очень подробно закомментировано.

P.S. Разработка начинает приобретать очертания весьма мощного проекта.


 
Loginov Dmitry ©   (2006-09-15 07:27) [26]

Что нового:

Появилась новая функция PreservResize. Она позволяет изменять размеры / размерности массивов, оставляя старые элементы на преждних местах.

Например:

 with TByteMatrix.Create(nil) do
 try
   // Делаем массив 3-мерным
   Resize([2, 5, 8]);

   Zeros; // Обнуляем

   SetElemDyn([1, 3, 5], 100); // Устанавливаем элемент массива

   // Делаем массив 9-мерным с сохранением элементов
   PreservResize([1, 2, 3, 4, 5, 6, 7, 8, 9]);

   // Проверяем, остался ли элемент на прежднем месте
   ShowMessage(GetElemStr([0, 0, 0, 0, 0, 0, 1, 3, 5]));
   
 finally
   Free;
 end;


В Матлабе имеется аналогичная возможность. НО! В матлабе элементы массива в памяти расположены нестандартным образом, а именно, элемент с наибольшим индексом находится не в конце, а в начале буфера памяти. Поэтому аналогии точной не получится, а работать будет только так:

>> A = zeros(2, 5, 8);
>> A(1, 3, 5) = 100;
>> A(1, 3, 5, 4, 3, 2, 1) = 0;
>> A(1, 3, 5)

ans =

  100

Таким образом, сделать так, чтобы функция PreservResize работала аналогично
соответствующей операции в Матлабе не получится, так как для меня важнее сохранить привязку массивов Matrix"a к стандартным массивам Delphi.

Кроме того, реализован еще один тип массива - TByteMatrix (Реализация новых числовых типов выполняется крайне просто, и занимает не более 5 минут).

Адрес для скачивания немного поменялся:
http://matrix.kladovka.net.ru/download.php?getfilename=uploads/heart/matrix2.zip


 
Loginov Dmitry ©   (2006-09-17 23:13) [27]

Улучшена обработка исключений. Теперь практически любое исключение, происшедшее при  работе Matrix, отлавливается, формируется подробный отчет, где указывается когда, где и какое исключение возникло. Можно поменять функцию обработки исключений во время выполнения программы. Реализован полный контроль за доступом к элементам массива (при включенной директиве компиляции "CheckRange").

На данный момент реализованы 3 типа классов:
- TIntegerMatrixClass
- TInt64MatrixClass
- TFloatMatrixClass

От каждого из них можно создавать дочерние классы. Быстрее всего выполняется обработка элементов класса TIntegerMatrixClass, дольше всего - TFloatMatrixClass.

Реализованы функции копирования стандартных массивов Дельфи, например:


procedure TMainForm.Button7Click(Sender: TObject);
var
 Ar: array[0..9, 0..9, 0..9] of Byte;
begin
 FillChar(Ar, SizeOf(Ar), 255);

 with TByteMatrix.Create(nil) do
 try
   // Копирование по значению. Текущий массив может быть
   // создан с помощью любого класса
   //CopyFrom(@Ar, TByteMatrix, [10, 10, 10]);

   // Копирование по ссылке. Текущий массив может быть
   // создан только с помощью класса, у которого элементы
   // имеют тот же тип, что и у массива Дельфи
   CopyByRef(@Ar, [10, 10, 10]);

   Reshape([1000]);
   ShowMessage(AsString);
 finally
   Free;
 end;

end;

(пояснения в исходниках)

Размер модуля уже превысил 3000 строк, при этом реализация новых типов массивов (наследников от TIntegerMatrixClass, TInt64MatrixClass,  TFloatMatrixClass) не превышает 50 строк. Треть модуля занимает интерфейсная часть.

Размер архива - 25 КБайт


 
ArtemESC ©   (2006-09-18 00:25) [28]

Ты все еще пишешь, я думал, что ты уже написал давно - в любом случае всему этому предстоит длительная отладка, чтобы можно было надежно использовать это в программах...


 
Loginov Dmitry ©   (2006-09-18 07:53) [29]

ArtemESC ©   (18.09.06 0:25) [28]
Ты все еще пишешь, я думал, что ты уже написал давно


Мне еще писАть - да - писАть ;))


>в любом случае всему этому предстоит длительная >отладка, чтобы можно было надежно использовать >это в программах


Ну куда же без отладки. Если система окажется востребованной, полезной, то пользователи-прогеры быстро найдут все возможные глюки. Они выявляются обычно во время прогона программы. А моя задача - найти их как можно больше, и допускать как можно меньше.


 
ArtemESC ©   (2006-09-18 22:40) [30]

Loginov Dmitry ©   (18.09.06 07:53) [29]
>>то пользователи-прогеры быстро найдут все возможные глюки.
Мда!!! Вот этого я и боюсь... Ты должен отлаживать это, ты и только ты!! Никому не нужно недоделанная библиотека, которую еще нужно отлаживать... Разве что ты делаешь это только для себя?


 
Loginov Dmitry ©   (2006-10-01 12:42) [31]

up


 
Loginov Dmitry ©   (2006-10-01 12:42) [32]

Что нового?

Добавлен новый тип массива - массив комплексных чисел. Появилась масса различных
функций для работы с комплексными числами (они передраны из модуля VarCmplx).

Добавлен новый тип массива - массив ячеек TCellMatrix. Фактически это массив, в
котором хранятся ссылки на другие массивы. Арифметические операции над таким массивом
запрещены. Можно свободно изменять размеры, транспонировать, и т.д. Для доступа к
элементам массива разрешены только VecCells[], Cells[], SetCell(), GetCell(). При
присвоении ссылки на новый массив старый массив удаляется автоматически.
Это аналог массива ячеек Матлаба (правда пока довольно сырой).

Добавлена функция-метод GetClone - она создает дубликат объекта и возвращает ссылку на
него.

Добавлены множество свойств и методов для доступа к элементу массива (они заточены под
тип элементов массива). Для работы с числовыми массивами предусмотрены различные
свойства и методы, например:

   property Elem[const Row, Col: Integer]: Extended;
   property ElemI[const Row, Col: Integer]: Integer;
   property ElemI64[const Row, Col: Integer]: Int64;
   property ElemCx[const Row, Col: Integer]: TExtendedComplex;

Свойство ElemCx - универсальное, и годится для работы с числовыми массивами любого
типа. Однако для доступа к элементам простого целочисленного массива свойство ElemCx
использовать нет смысла, так как уменьшиться скорость.

Добавлены методы AssignElem, AssignDynElem, AssignVecElem, позволяющие присвоить
элемент заданного массива, не учитывая тип элементов массива. Они обеспечивают самую
быструю скорость присвоения элементов другого массива TMatrix.

Добавлено еще куча разных функций. Размер модуля приблизился к 5000 тыс. строк.

В дальнейшем будет добавлен новый тип данных - ЗАПИСЬ. Это аналог соответствующей
возможности Матлаба. Будут реализованы функции по записи и чтению массивов из
двоичного файла и из потока TStream.


 
Loginov Dmitry ©   (2006-10-01 12:47) [33]

ArtemESC ©   (18.09.06 22:40) [30]
Никому не нужно недоделанная библиотека, которую еще нужно отлаживать... Разве что ты делаешь это только для себя?


Я не делаю эту библиотеку "только для себя". Для моих нужд слихвой хватало старой версии. А насчет отладки - все полностью отладить я смогу лишь и идеале. На самом деле ошибки могут присутствовать. На период отладки я просто не стану пиарить систему на каждом углу.


 
Loginov Dmitry ©   (2006-10-02 21:15) [34]

Добавил тип "запись". Для поддержки нового типа пришлось добавить новый класс
TRecordMatrix = class(TMatrix)

Реализована полная эмуляция типа "структура" Матлаба. Однако записи в большим уровнем вложенности довольно трудны для понимания. Так если в Матлабе реализовать запись

patient(1).code = 007;
patient(1).billing = 127.00;
patient(1).test = [79 75 73; 180 178 177.5; 220 210 205];

patient(2).name = 007;
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];


то в Матриксе тоже самое будет выглядеть так:

procedure TMainForm.Button8Click(Sender: TObject);
var
 M: TMatrix;
 I: Integer;
begin
 M := TRecordMatrix.Create();

 try
   M.Fields["patient"] := TCellMatrix.Create();
   M.Fields["patient"].Resize([2]);

   M.Fields["patient"].VecCells[0] := TRecordMatrix.Create();
   with M.Fields["patient"].VecCells[0] do
   begin
     Fields["code"] := TIntegerMatrix.Create();
     Fields["code"].AsString := "007";

     Fields["billing"] := TSingleMatrix.Create();
     Fields["billing"].AsString := "127.00";

     Fields["test"] := TSingleMatrix.Create();
     Fields["test"].AsString :=
       "[79, 75, 73; 180, 178, 177.5; 220, 210, 205]";
   end;

   M.Fields["patient"].VecCells[1] := TRecordMatrix.Create();
   with M.Fields["patient"].VecCells[1] do
   begin
     Fields["code"] := TIntegerMatrix.Create();
     Fields["code"].AsString := "008";

     Fields["billing"] := TSingleMatrix.Create();
     Fields["billing"].AsString := "28.50";

     Fields["test"] := TSingleMatrix.Create();
     Fields["test"].AsString :=
       "[68, 70, 68; 118, 118, 119; 172, 170, 169]";
   end;

   ShowMessage(
     M.Fields["patient"].VecCells[0].Fields["test"].AsString + #13#10 +
     M.Fields["patient"].VecCells[1].Fields["test"].AsString);
 finally
   M.Free;
 end;
end;


это, конечно, может показаться более сложным для понимания. Однако факт, что все основные типы данных матлаба уже поддерживаются.


 
TStas ©   (2006-10-02 21:27) [35]

Дык если уж туда добавлять комплексные числа, то уж надо произвольную математику добавить, благо это просто совсем: сделать Plus, Minus, Multiply & Divide abstract, а у потомков их перекрывать. Тем более, что раз уж взяты комплексные, легко же сделать произвольные наборы, притом это и на практике некоторым требуется


 
Loginov Dmitry ©   (2006-10-02 23:22) [36]

TStas ©   (02.10.06 21:27) [35]


Советую ознакомиться хоть чуток с исходниками :)


 
ArtemESC ©   (2006-10-02 23:47) [37]

Loginov Dmitry, а в другие системы счисления можно переводить?


 
Loginov Dmitry ©   (2006-10-03 07:42) [38]

ArtemESC ©   (02.10.06 23:47) [37]

А это где-нибудь используется?


 
ArtemESC ©   (2006-10-03 20:59) [39]

Loginov Dmitry ©   (03.10.06 07:42) [38]
Да непример hex - дамп файла после обработки нужно вывести - удобно пользоваться...

Также, если там функции для удобного вывода на экран, например нужно напечать матрицу, столбцы которые выровнены по определенным критериям?


 
Loginov Dmitry ©   (2006-10-03 23:05) [40]

ArtemESC ©   (03.10.06 20:59) [39]

Не самое срочное, но приму к сведению.

TStas ©   (02.10.06 21:27) [35]

Пожалуй сделаю соответствующие методы. Но только для Plus, Minus, Multiply & Divide (вообще существует довольно удобные методы для подобных вещей - CalcOperation(), но им нужно указывать функцию, в которой реализуется требуемая операция).



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.039 c
8-1143357037
Sco
2006-03-26 11:10
2006.10.29
glScale и яркость объекта


1-1158509750
MixAnOL
2006-09-17 20:15
2006.10.29
OLEVariant


2-1160752903
Merry
2006-10-13 19:21
2006.10.29
TIBTable и TDataSource


2-1160571980
проходил мимо решил заглянуть
2006-10-11 17:06
2006.10.29
Как скопировать все файлы без подкаталогов


1-1158407293
Прогер
2006-09-16 15:48
2006.10.29
Unicode <=> ANSI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский