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

Вниз

Matrix32   Найти похожие ветки [announce]

 
Loginov Dmitry ©   (2006-12-16 17:07) [0]

Выложил очередное обновление системы (Достаточно важное, т.к. добавлено много полезных возможностей).

Любителям Delphi и Матлаба посвещается:

Добавлен модуль взаимодействия с Матлабом matrixMatlab.pas. В нем реализован класс TMatlab, обеспечивающий удобный интерфейс с Матлабом. Функции GetMatrix и PutMatrix предназначены для обмена массивами, и могут передавать не только 2-мерные матрицы, но также и сложные структуры данных: массивы ячеек и записей. Размерность передаваемых числовых массивов ограничена 2-мя измерениями. Это ограничение накладывают функции Матлаба GetFullMatrix() и PutFullMatrix(), и обойти их пока не удалось. В любом случае, функции достаточно мощные, и успешно справляются с обменом даже таких сложных данных, как нейронные сети.
Сейчас в классе TMatlab реализованы 13 различных функций, и их набор будет пополняться.

Матлаб должен уметь запускаться как DCOM-сервер. Для этого необходимо выполнить процедуру регистрации - запустить bat-файл C:\MATLAB6p5\Bin\Matlab.bat (Для седьмого Матлаба не знаю, как это делается).

Пример загрузки нейронной сети из Матлаба:


procedure TMainForm.Button1Click(Sender: TObject);
var
 A: TMatrix;
begin
 Matlab.Execute("net = newc([0 1; 0 1],2);");
 A := Matlab.GetMatrix("net");
end;


Добавлен модуль быстрого преобразование Фурье (правда месяц назад это было, не все-же) matrixFourier.pas. Для его работы нужны библиотеки от Д. Батлера, их можно скачать у меня, либо с сайта автора (необходимые ссылки приведены).

Бог знает, чего еще я добавлял, но все во благо :)

Модуль matrix32.pas:
- число строк - 8165
- размер в байтах - 245 КБайт

Размер архива: 74 КБайта

Скачать модуль можно по этой ссылке:
http://matrix.kladovka.net.ru/download.php?getfilename=uploads/heart/matrix32.zip


 
Axis_of_Evil ©   (2006-12-16 17:27) [1]

попалось на глаза:

function FloatToString(Value: Extended): string;
var
 Buffer: array[0..63] of Char;
 I: Integer;
begin
 SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended,
   ffGeneral, 15, 0));
 I := Pos(",", Result);
 if I > 0 then Result[I] := ".";
end;

DecimalSeparator?


 
Loginov Dmitry ©   (2006-12-16 17:31) [2]

> DecimalSeparator?


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


 
Anatoly Podgoretsky ©   (2006-12-16 20:12) [3]

> Loginov Dmitry  (16.12.2006 17:31:02)  [2]

> Запятая - это разделитель чисел в массиве.

Разделитель чисел и других списков в системе как правило точка с запятой


 
Loginov Dmitry ©   (2006-12-16 20:52) [4]

> Разделитель чисел и других списков в системе как правило
> точка с запятой


В Матрикс точка с запятой - разделитель строк матрицы (наряду с sLineBreak)


 
Anatoly Podgoretsky ©   (2006-12-16 20:55) [5]

> Loginov Dmitry  (16.12.2006 20:52:04)  [4]

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


 
Loginov Dmitry ©   (2006-12-16 21:16) [6]

> [5] Anatoly Podgoretsky ©   (16.12.06 20:55)
> > Loginov Dmitry  (16.12.2006 20:52:04)  [4]
>
> Ты не понимаешь, что тебе намекуют, что ты вольно обращаешься
> с региональными установками и не умеешь вести дисскуссию,
> чтобы оправдать эту вольность.


Не верно. Я не заменял и не имеют права изменять стандартную функцию FloatToStr. Региональные настройки здесь не причем, вольно я с ними не обращаюсь, и никак не обращаюсь. Что Вам не нравится - мне не понятно. Я лишь обеспечил независимость Матрикса от различных региональных настроек. Функция FloatToString() переводит число в строку, и здесь я уверен, что Матрикс всегда безошибочно сможет выполнить необходимые обратные преобразования.

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

Попробуйте распарсить строку из следующего примера, следуя текущим региональным настройкам:


procedure TMainForm.Button5Click(Sender: TObject);
begin
 with TDoubleComplexMatrix.Create() do
 try
   AsString := "-1.2002e-100 + 20.20i, 1E100; .100 - 1i";
   ShowMessage(AsString);
 finally
   Free;
 end;
end;


 
Loginov Dmitry ©   (2006-12-16 21:18) [7]

Хотя, возможно стоит вместо
I := Pos(",", Result);

сделать

I := Pos(DecimalSeparator, Result);

Об этом речь что-ли?


 
Anatoly Podgoretsky ©   (2006-12-16 21:24) [8]

> Loginov Dmitry  (16.12.2006 21:16:06)  [6]

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


 
Loginov Dmitry ©   (2006-12-16 22:10) [9]

> то первая претензия и основание для отказа как раз будут
> игнорирование региональных настроек.


Ну и совершенно глупая претензия.


 
Anatoly Podgoretsky ©   (2006-12-16 22:11) [10]

> Loginov Dmitry  (16.12.2006 22:10:09)  [9]

Таких умных как ты много, но в наше время они идут лесом.
Прошли времена ДОС


 
Loginov Dmitry ©   (2006-12-16 23:52) [11]

Спор ни о чем...


 
Vovan #2   (2006-12-17 00:14) [12]

>Спор ни о чем...

Да точно, Подгорецкий уже сто лет по существу не говорит. Если свод правил о разделителях есть где-то в справке или хотя бы есть простенький пример, где эти тонкости налицо - можно не волноваться. Региональные настройки - лесом.


 
antonn ©   (2006-12-17 00:24) [13]

Anatoly Podgoretsky ©   (16.12.06 20:55) [5]
скажите, почему Вас волнует так, как протекают внутренние процесы в модуле, если они даже пользователя не касаются? Региональная настройка - привилегия пользователя для работы с интерфейсом.


 
Ne-Ld   (2006-12-17 00:29) [14]

Объект поклонения многих работающих с матрицами:
http://www.netlib.org/lapack/
p.s. у тебя твой пакет умеет считать собственные значения быстро? А быстро перемножать матрицы? Без этих и им подобных фишек твой пакет ни кому не будет интересен, скорее всего. Плюсом будет несомненно работа с большими (порядка 10^6 на 10^6) матрицами - сам я с ними в не сталкивался, однако слышал от товарищей, что в приложениях матрицы такого порядка очень распространены.


 
Loginov Dmitry ©   (2006-12-17 08:29) [15]

> у тебя твой пакет умеет считать собственные значения быстро?
> А быстро перемножать матрицы?


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


 
Loginov Dmitry ©   (2006-12-17 08:31) [16]

Кстати, на счет региональных настроек: я ввел DecimalSeparator согласно [7], поэтому доказывать о его необходимости теперь не стоит.


 
Virgo_Style ©   (2006-12-17 08:49) [17]

Loginov Dmitry ©   (17.12.06 8:31) [16]

не стоит ли/не проще ли сделать свойства DecimalSeparator, LineSeparator, и т.д. для других спорных обозначений, в т.ч. для i и j, причем инициализируемые из региональных настроек и с предопределенными константами (вроде .DecimalSeparator := dsFromRegionalSettings) ?


 
Loginov Dmitry ©   (2006-12-18 00:09) [18]

> в т.ч. для i и j


Не понятно, что имелось ввиду?


 
Virgo_Style ©   (2006-12-18 07:47) [19]

Loginov Dmitry ©   (18.12.06 0:09) [18]
система воспринимает оба обозначения мнимой единицы?


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

Для этого в модуле присутствует переменная:

var
 ComplexImagSymbol: Char = "i"


 
Jeer ©   (2006-12-18 10:50) [21]

Когда твоя супер-пупер матрих-энтерпрайз сможет оптимизировать
Z = A * B * C * D*...
тогда и заходи, а поделок, даже не со стыренным кодом, пруд-пруди.


 
Loginov Dmitry ©   (2006-12-18 12:20) [22]

> Когда твоя супер-пупер матрих-энтерпрайз сможет оптимизировать
> Z = A * B * C * D*...
> тогда и заходи, а поделок, даже не со стыренным кодом, пруд-
> пруди.


На кой хрен это нужно? Поделок, оптимизирующих Z = A * B * C * D*... итак пруд-пруди.


 
Virgo_Style ©   (2006-12-18 13:26) [23]

Loginov Dmitry ©   (18.12.06 8:03) [20]
Именно это я и имел в виду.


 
Loginov Dmitry ©   (2006-12-18 15:07) [24]

А LineSeparator зачем вводить? В модуле System для этого есть sLineBreak.

А если в целом, то несколько неясно, почему все стали придираться к разделителям. Неужели это единственный изъян системы?


 
Jeer ©   (2006-12-18 15:38) [25]


> Неужели это единственный изъян системы?
>


Да успокойся, никому кроме тебя эта система не пригодится.

Изъян в идеологии, но это - как и вера, сомнению у верующего не подлежит.


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

Не стоит считать свое мнение всеобщим.


 
Jeer ©   (2006-12-18 16:29) [27]

"Не обязательно ждать всходов, чтобы выяснить, что должно появиться из семени репейника" (С)


 
Ne-Ld   (2006-12-18 22:06) [28]

2Loginov Dmitry
А фичалист есть? Мне просто лень исходник качать что бы посмотреть какие фичи там есть...
2Jeer
AFAIK  выражения типа A*B*C*... распараллеливают. Такую вешь написать достаточно сложно, дополнительно возникают вопросы о тестировании - а кластера то у обычного человека скорее всего и нет =)
К тому же много полезных библиотек уже написано и придумать самому хорошую задачу на которой можно будет потренироваться достаточно тяжело. Может быть было бы лучше, если бы вы предложили автору задачу которая была бы более полезна и другим людям и автору ветки?


 
Loginov Dmitry ©   (2006-12-18 23:11) [29]

> А фичалист есть? Мне просто лень исходник качать что бы
> посмотреть какие фичи там есть


На своем сайте я попытался осветить кое-какие возможности. Но это весьма сложная задача. Модуль очень большой, и умеет делать огромное количество всевозможных задач. Мало-мальски подробное изложение займет не менее 20 страниц печатного текста. Раньше была старая версия, и все фичи освещалить в прилагаемом тестовом приложении и укладывались в десяток-другой панелек, теперь так сделать уже - unreal. Главная фича модуля - поддерживает все основные типы данных Матлаба и успешно работает со всеми ними, поддержимает все типы числовых массивов, предоставляя программисту возможность с легкостью добавить свой собственный тип элементов, умеет все данные сохранять в двоичный файл собственного формата, и загружать их оттуда, полная поддежка вычислений с комплексными числами, и т.д. и т.п.
Раз уж здесь неоднократно упоминался Матлаб, по стоит упомянуть определенные преимущества данного модуля перед Матлабом:
- поддерживаются все стандартные числовые типы данных не только для хранения массивов данных (как это сделано в Матлабе 6.0), но и для выполнения всевозможных вычислений (в Матлабе это тоже правда сделали версии в седьмой).
- как и в Матлабе, поддерживаются многомерные массивы, их размеры и размерности можно изменять динамически, но скорость работы с многомерными массивами в десятки раз выше, чем в Матлабе (хотя это конечно не преимущество, так как нигде в Матлабе вы реально не встретите ни одного 3-х мерного массива, разработчики Матлаба даже через DCOM не разрешают передачу многомерных массивов). Таким образом вытекает все-таки преимущество - в Матриксе реально можно работать с многомерными массивами.


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


Не нужно мне придумывать никаких полезных или безполезных задач. Полезно только то, что необходимо. А все необходимое для меня на данный момент уже состедоточено в освещаемой системе.


 
Ne-Ld   (2006-12-18 23:42) [30]

2Loginov Dmitry
Есть две мысли:
1. Использовать автогенератор документации - без нее энтузиазм теряется сразу : - )
2. Если такие проблемы со количеством участников, то почему бы не положить m32 на какой нибудь http://sourceforge.net/ ?


 
Ne-Ld   (2006-12-18 23:56) [31]

Хотя с соурсфорджем я походу дела поторопился - на http://sourceforge.net/  какие то изменения в лицензии походу дела... Надо выбрать видимо какой то аналог - ну тут товарищи линкусойды подскажут - куда идти и выкладывать m32.



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

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

Наверх





Память: 0.54 MB
Время: 0.01 c
2-1166355278
ezorcist
2006-12-17 14:34
2007.01.07
Вычисление интеграла.


15-1166529637
IAmDanil
2006-12-19 15:00
2007.01.07
Помогите с хтмл


3-1161529514
diofant
2006-10-22 19:05
2007.01.07
Подключение к серверу приложений


2-1166381023
allrussia
2006-12-17 21:43
2007.01.07
Как и можно ли создать таблицу в таблице?


15-1166092041
Vlad Oshin
2006-12-14 13:27
2007.01.07
MySql и/или MSSQL Логи. Как делать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский