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

double*  operator [](int i);

// прочие функции

int ExportMatrix(const char *FileName);    // Сохранить матрицу в текстовый файл

int ImportMatrix(const char *FileName);    // Загрузить матрицу из текстового файла

int SaveMatrix  (const char *FileName);    // сохранить матрицу в двоичный файл

int LoadMatrix  (const char *FileName);    // загрузить из двоичного файла

void CpMat(KMatrix *M2);                   // копировать значения в М2

void Assign(KMatrix *M2);                  // присвоить значения матрицы М2

int CheckSymmetry(); // проверка на симметричность матрицы 0-не симметрична 1-симметрична 2-треугольная(ниже главн диагонали нули) 3-не квадратная

void mirror();                             // зеркально отобразить данные относительно главной диагонали(вниз)

void Mult(double D);                       // домножить все элементы матрицы на число

// тензорные функции

int ToOneIndex();     // преобразование тензора к одноиндексной форме(если возможно)

int ToMatrix3x3();    // преобразование тензора к матричной форме 3x3(если возможно)

};

#endif };

Файл "KTensKalk.h" (Операции с данными)

#ifndef _KTensKalk_h

#define _KTensKalk_h

#include <math.h>

#include "KMatrix.h"

// матричные операции

int MULLMat(KMatrix *MR,KMatrix *M1,KMatrix *M2);       // умножение матриц(векторов)

int SUBMat (KMatrix *MR,KMatrix *M1,KMatrix *M2);       // вычитание матриц(векторов)

int ADDMat (KMatrix *MR,KMatrix *M1,KMatrix *M2);       // сложение матриц(векторов)

int cosVec3(KMatrix *MR,KMatrix *M1);                   // Расчет вектора направляющих косинусов по произвольному вектору

int cosMat3(KMatrix *MR,KMatrix *M1);                   // расчет матрицы направляющих косинусов

int rotVec3(KMatrix *VY,KMatrix *VX,KMatrix *VX0,KMatrix *MA);// Преобразование вектора к новой системе координат

int alpha  (KMatrix *MR,KMatrix *M1,KMatrix *M2);       // Формирование матрицы поворота от одной ортогональной системы координат к другой

double NormMatr(KMatrix *MR);                           // норма матрицы(модуль вектора)

double scalVec3(KMatrix *M1,KMatrix *M2,int &err);      // скалярое произведение векторов

int vectVec3(KMatrix *MR,KMatrix *M1,KMatrix *M2);      // векторное умножение векторов

int checkOrt3(KMatrix *MR,int &err);                    // проверка ортогональностиъ

double detMat3(KMatrix *MR,int &err);                   // определитель матрицы

// тензорные операции

int T2toTLa(KMatrix *T2, KMatrix *Vcos,double& scal);   // скалярное значение величины, описываемой тенз 2 ранга

int rotT2 (KMatrix *T2old, KMatrix *MA,KMatrix *T2new); // Преобразованиe тензора второго ранга к новой системе координат

// формирование тензоров и констант

void C_Si(double T,double &C11,double &C12,double &C44); // Процедура формирования констант упругой жесткости кремния

void S_Si(double T,double &S11,double &S12,double &S44); // Процедура формирования констант упругой податливости кремния

int TenzorSx(double T,KMatrix *A,KMatrix *S);           // Процедура формирования тензора констант податливости в матричной форме в произвольной системе координат

int VTtoT2(double T,KMatrix *Vcos,KMatrix *T2);             // Формирование тензора одноосного воздействия в произвольной системе координат

#endif

Файл "MatrixForm.h" (основныеэлементы)

private: // User declarations

// служебные данные

int FmTyp;  // тип формы /0 - не определено/1-тензор/2-матрица/

TfmMatrix** ThisPointer; // внешний указатель на эту форму

TStringGrid *sg1;        // лист для вывода

void ClearSG();          // очистить SG

public:                  // User declarations

// функции инициализации формы

__fastcall TfmMatrix(TComponent* Owner,

TfmMatrix *&_ThisPointer,int _FmTyp,bool* _deleted);         // конструктор для тензора

__fastcall TfmMatrix(TComponent* Owner, TfmMatrix *&_ThisPointer,