Разработка программы "Тензорный калькулятор", страница 2

11)  Чтобы создать тензор, то создайте данные, соответствующего размера (тензор готов). Далее по желанию отформатируйте вывод под тензор (следующий пункт).

12)  Есть возможность ввода/вывода данных в разных режимах для работы с тензорами:

Обычный режим – выводит данные в исходном виде (как они есть).

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

Выполнение операций над данными

1)  Перейдите в окно калькулятора (можно перейти нажав на панели вверху кнопку Calc)

2)  Выберите нужную команду и затем дважды нажимая в списке данных (список справа) выберите данные-аргументы или (если требуется) введите числа в появившееся поле и нажмите ENTER или кнопку ОК. Т.Е. вводите запрашиваемые аргументы.

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

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

Усовершенствование программы:

Программа имеет универсальную основу в дальнейшем система, которая позволяет  легко расширить ее функциональность путем занесения новых операций над матрицами или векторами.

Алгоритм добавления операции:

1)  Объявление новой операции:

В файле CalcForm.h или Defines.h объявите константу с именем новой операции как это сделано до Вас. Например:

#define TEST_FUNCTION "ТЕСТ ОПЕРАЦИЙ" 

2)  В файле CalcForm.cpp в функции void OperList() вставьте в список команд вашу операцию

Например:

lb1->AddItem(TEST_FUNCTION,this);

3)  В файле CalcForm.cpp в функции void InitOperation () инициализируйте Вашу операцию путем добавления if;

Зная что в этой функции:

String OperName=имя выбранной пользователем операции

Int ARGS= количество матричных аргументов у операции(если нет, то 0).

Int DARGS= количество числовых аргументов у новой операции(если нет, то 0).

Затем инициализируйте вывод подсказок:

String ANames[MAXARGS]= подсказки пользователю для ввода(имена матриц-аргументов)

String DANames[MAXARGS]= подсказки пользователю для ввода(имена числовых аргументов)

Пример:

if(OperName==TEST_FUNCTION){

ARGS=3;

DARGS=3;

ANames[1]="Матрица 1: ";

ANames[2]=" Матрица 2: ";

ANames[3]=" Матрица 3: ";

DANames[1]="число 1: ";

DANames[2]=" число 2: ";

DANames[3]=" число 3: ";

}

Этот этап обеспечит выбор пользователем операции и далее с помощью системы пользователь сможет ввести нужные аргументы для выбранной операции

double DA[MAXARGS];        - аргументы типа double нумерация с 1

TfmMatrix *MFA[MAXARGS];   - передаваемые аргументы (формы данных с матрицами) нумерация с 1

TfmMatrix – форма, содержащая матрицу для ввода/вывода TfmMatrix->Matrix

Также на этой форме есть

String DataName;        // имя тензора/матрицы

int NameIndex;          // индекс имени тензора/матрицы

String FullDataName;    // полное имя тензора/матрицы (имя+индекс)

KMatrix *Matrix; // матрица данных

4)  В том же файле в функции void exeOperation(); пропишите команды, которые будут выполнены когда будут введены все аргументы вашей операции.

Помните, что err-код ошибки,  void NewMatrix(1,1,NewDataName); -создать новую форму данных с матрицей, где первые 2 индекса – размерность данных (1,1 потомучто всеравно маняется операциями) NewDataName – имя новой создаваемой формы данных в поле вверху программы (можно написать свое имя) ссылка на созданную форму таким образом хранится в MR