Форум: "Прочее";
Текущий архив: 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