亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? matrix.~pas

?? 以面向對象方法實現的數值算法類庫
?? ~PAS
?? 第 1 頁 / 共 2 頁
字號:
{-------------------------------------------------------------------------------
2004.07.02 定義矩陣類
  定義矩陣的基本運算
--------------------------------------------------------------------------------
2004.07.03
  定義矩陣之間的乘法:矩陣相乘
  矩陣相乘以后的結果:目前相乘后的結果是在相乘函數中動態創建的對象,但是存在內存
釋放的問題。如何解決?--可以人工釋放內存,調用Free方法--以前所作多相流數據處理程
序存在同樣的問題。即:兩個向量相乘或求互相關、自相關的時候。
-------------------------------------------------------------------------------}

unit Matrix;

interface

uses classes, MathTypes, DB, Series, Grids;

Type

  TMatrix = class
  protected
    {--------------------------------------------------------------------------}
    FData:          TFloatMatrix;              // 數據
    FRowCount:      integer;                   // 矩陣的大小 行數
    FColCount:      integer;                   // 矩陣的大小 列數
    {--------------------------------------------------------------------------}
    FFormat:        string;                    // 顯示格式
    FDisplayGrid:   TStringGrid;               // 顯示器
    FStartRow:      Integer;
    FStartCol:      Integer;
    {--------------------------------------------------------------------------}
    FSeries:        TCustomSeries;             // 曲線
    FXCol:          Integer;
    FYCol:          Integer;
    {--------------------------------------------------------------------------}
    FScope:         integer;                   // 取值范圍,用于填充隨機數
    FPause:         Boolean;                   // 消元過程暫停
    {--------------------------------------------------------------------------}
    FDataSet:       TDataSet;                  // 數據庫
    FStartField:    Integer;                   // 首字段ID
    FFieldCount:    Integer;                   // 字段數,如果為0,則根據列數從首字段依次讀入  
    {--------------------------------------------------------------------------}
  public
    { 構造與析構方法-----------------------------------------------------------}
    constructor Create;
    destructor  Destroy; override;
    { 數據賦值 ----------------------------------------------------------------}
    procedure   CopyFrom(Source: TMatrix);
    procedure   CopyFromArray(x: TFloatMatrix);
    { 數據維護 ----------------------------------------------------------------}
    procedure   Resize(RowCount, ColCount: integer);
    {--------------------------------------------------------------------------}
    procedure   LoadFromFile(FileName: string);
    procedure   SaveToFile(FileName: string);
    procedure   LoadFromDatabase(ADataSet: TDataSet; FieldID: integer = 0;
      nFieldCount: integer = 1; Start: integer = 0; nCount: integer = -1); overload;
    procedure   LoadFromDatabase; overload;
    {--------------------------------------------------------------------------}
    procedure   ShowInGrid;
    procedure   ShowAsSeries;
    {--------------------------------------------------------------------------}
    procedure   FillSample;
    procedure   FillAsUnit;
    {--------------------------------------------------------------------------}
    function    CombineCol(bMat: TMatrix): TMatrix;          // 合并兩個矩陣
    procedure   CombineMatrix(bMatrix, AResult: TMatrix);
    { 常見的數值方法 ----------------------------------------------------------}
    procedure   GassJordan_CompletePivot; overload;
    procedure   GassJordan_CompletePivot(bMatrix: TMatrix); overload;
    procedure   GaussJordan(bMatrix: TMatrix);
    procedure   MultiPlyMatrix(BMat, AResult: TMatrix);
    function    MultiPly(BMat: TMatrix): TMatrix;

  published
    property ColCount: integer read FColCount;
    property RowCount: integer read FRowCount;
    property Values: TFloatMatrix read FData write FData;
    property DisplayFormat: string read FFormat write FFormat;
    property SampleScope: Integer read FScope write FScope;

    property DisplayGrid: TStringGrid read FDisplayGrid write FDisplayGrid;
    property StartRow: Integer read FStartRow write FStartRow;
    property StartCol: Integer read FStartCol write FStartCol;

    property ASeries: TCustomSeries read FSeries write FSeries;
    property XCol: integer read FXCol write FXCol;
    property YCol: integer read FYCol write FYCol;

    property Pause: Boolean read FPause write FPause;

  end;


implementation

Uses SysUtils,Dialogs;

{ TMatrix }

procedure TMatrix.CopyFrom(Source: TMatrix);
Var
    i,j: Integer;
begin
    inherited;
    if Source is TMatrix then begin
      Resize((Source as TMatrix).RowCount,(Source as TMatrix).ColCount);
      for i:=0 to FRowCount-1 do
        for j:=0 to FColCount-1 do
          FData[i][j] := (Source as TMatrix).FData[i][j];
    end;
end;

procedure TMatrix.CopyFromArray(x: TFloatMatrix);
Var
    i,j,M,N: Integer;
begin
    M := Length(x);
    N := Length(x[0]);
    Resize(M, N);
    for i:=0 to FRowCount-1 do
      for j:=0 to FColCount-1 do
        FData[i][j] := x[i][j];
end;

function TMatrix.CombineCol(bMat: TMatrix): TMatrix;
Var
    M,N,i,j: integer;
begin
    M := FRowCount;
    if M<>bMat.RowCount then begin
      Raise
        EMathError.CreateFmt('行數不相等(%d,%d)=0',[M, bMat.FRowCount]);
    end;
    N := FColCount + bMat.ColCount;
    Result := TMatrix.Create;
    Result.Resize(M,N);
    for i:=0 to M-1 do
      for j:=0 to N-1 do
        if j<FColCount then Result.FData[i][j] := FData[i][j]
        else                Result.FData[i][j] := bMat.FData[i][j-FColCount];
end;

constructor TMatrix.Create;
begin
    inherited Create;
    {--------------------------------------------------------------------------}
    FData := Nil;
    FColCount := 0;
    FRowCount := 0;
    {--------------------------------------------------------------------------}
    FFormat := '%10.4f';
    FDisplayGrid := Nil;
    FStartRow := 1;
    FStartCol := 1;
    {--------------------------------------------------------------------------}
    FSeries := Nil;
    FXCol := 0;
    FYCol := 1;
    {--------------------------------------------------------------------------}
    FPause := False;
    FScope := 100;
    {--------------------------------------------------------------------------}
    FDataSet := Nil;
    FStartField := 0;
    FFieldCount := 0;
end;

destructor TMatrix.Destroy;
Var
    i: Integer;
begin
    for i:=0 to FRowCount-1 do FData[i] := Nil;
    FData := Nil;
    inherited;
end;

procedure TMatrix.FillAsUnit;
Var
    i,j: integer;
begin
    for i:=0 to FRowCount-1 do
      for j:=0 to FColCount-1 do
        if i=j then FData[i][j] := 1
        else        FData[i][j] := 0;
end;

procedure TMatrix.FillSample;
Var
    i,j: integer;
begin
    Randomize;
    for i:=0 to FRowCount-1 do
      for j:=0 to FColCount-1 do
        FData[i][j] := Random(FScope);
end;

{  高斯-若當全主元消去法,針對單一矩陣------------------------------------------}
procedure TMatrix.GassJordan_CompletePivot(bMatrix: TMatrix);
Var
    i,j,ii,jj,iP,jP: Integer;
    Big, aPiv, invp, tmp: double;
    iDone: array of Boolean;
    jDone: array of Boolean;
begin
    SetLength(iDone, FColCount);
    SetLength(jDone, FColCount);
    for i:=0 to FColCount-1 do iDone[i] := False;
    for i:=0 to FColCount-1 do jDone[i] := False;
    for i:=0 to FRowCount-1 do begin
      // 選主元--從(0,0)==>(m,m),跳過已經消元的列
      Big := 0;
      iP := 0;
      jP := 0;
      for ii:=0 to FRowCount-1 do begin
        if not iDone[ii] then begin
          for jj:=0 to FRowCount-1 do begin
            if not jDone[jj]then begin
              if Big < abs(FData[ii][jj]) then begin
                // 標記主元
                iP := ii; jP := jj; Big := Abs(FData[ii][jj]);
              end;
            end;
          end;
        end;
      end;
      // 奇異性判斷
      if Big=0 then begin
        Raise
          EMathError.CreateFmt('奇異矩陣(%d,%d)=0',[iP, jP]);
      end;
      iDone[iP] := True;
      jDone[jP] := True;
      aPiv := FData[iP][jP];    // 主元
      // 將主元所在行除以主元,將主元歸一
      for jj:=0 to FColCount-1 do begin
        if jj<>jP then FData[iP][jj] := FData[iP][jj] / aPiv
        else           FData[iP][jj] := 1;
      end;
      // 消元--將主元所在列的其他元素消成0;消元的過程共M行
      for ii:=0 to FRowCount-1 do begin
        if ii<>iP then begin  // 非主元所在行才需要進行消元
          if FData[ii][jP]<>0 then begin  // 與主元同列的元素不為0,需要消元
            invp := FData[ii][jP];
            for jj:=0 to FColCount-1 do begin
              if jj<>jP then FData[ii][jj] := FData[ii][jj] - FData[iP][jj] * invP
              else           FData[ii][jj] := 0;
            end;
          end;
        end;
      end;// 消元過程結束
      if FPause then begin
        ShowInGrid;
        ShowMessage(Format('%d,%d',[iP,jP]));
      end;
    end;
    // 整理,將結果按順序排列好
    iP := 0;
    for j:=0 to FRowCount-1 do begin
      // 查找該列的主元
      for i:=0 to FRowCount do begin
        if FData[i][j]=1 then begin
          iP := i;
          break;
        end;
      end;
      // 交換
      if iP<>j then begin
        for jj:=0 to FColCount-1 do begin
          tmp := FData[j][jj];
          FData[j][jj] := FData[iP][jj];
          FData[iP][jj] := tmp;
        end;
      end;
    end;
end;

{  高斯-若當全主元消去法,針對雙矩陣-------------------------------------------}
procedure TMatrix.GassJordan_CompletePivot(bMatrix: TMatrix);
Var
    i,j,ii,jj,iP,jP: Integer;
    Big, aPiv, invp, tmp: double;
    iDone: array of Boolean;
    jDone: array of Boolean;
begin
    SetLength(iDone, FColCount);
    SetLength(jDone, FColCount);
    for i:=0 to FColCount-1 do iDone[i] := False;
    for i:=0 to FColCount-1 do jDone[i] := False;
    for i:=0 to FRowCount-1 do begin
      // 選主元--從(0,0)==>(m,m),跳過已經消元的列
      Big := 0;
      iP := 0;
      jP := 0;
      for ii:=0 to FRowCount-1 do begin
        if not iDone[ii] then begin
          for jj:=0 to FRowCount-1 do begin
            if not jDone[jj]then begin
              if Big < abs(FData[ii][jj]) then begin
                // 標記主元
                iP := ii; jP := jj; Big := Abs(FData[ii][jj]);
              end;
            end;
          end;
        end;
      end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三电影在线| 91啪亚洲精品| 日韩国产一二三区| 亚洲曰韩产成在线| 午夜精品免费在线观看| 亚洲国产一区二区三区| 亚洲成a人片在线观看中文| 一区二区三区四区在线播放 | 日韩你懂的在线观看| 欧美日本一区二区在线观看| 欧美三电影在线| 欧美一卡二卡在线观看| 日韩视频免费观看高清完整版| 9191久久久久久久久久久| 欧美一区二区三区成人| 日韩欧美一级二级三级| 精品1区2区在线观看| 国产亚洲一二三区| 亚洲女厕所小便bbb| 午夜精品一区二区三区免费视频 | 久久综合九色综合97_久久久| 欧美精品一区二区三区四区 | 制服丝袜亚洲色图| 日韩欧美电影在线| 中文一区二区完整视频在线观看| 亚洲天天做日日做天天谢日日欢 | 亚洲香肠在线观看| 日韩成人免费电影| 国产成人综合网| 色先锋aa成人| 精品国产乱子伦一区| 国产欧美日韩三级| 亚洲成人免费视| 国产一区二区三区精品视频| 色久综合一二码| 日韩美女在线视频| 一二三四社区欧美黄| 精品系列免费在线观看| 91免费看片在线观看| 欧美成人精品高清在线播放| 亚洲欧美激情视频在线观看一区二区三区 | 9人人澡人人爽人人精品| 精品视频资源站| 中文字幕乱码日本亚洲一区二区 | 亚洲视频狠狠干| 欧美aaa在线| 日本久久精品电影| 国产精品久久久久久亚洲伦| 免费不卡在线观看| 欧美午夜不卡在线观看免费| 国产精品乱子久久久久| 日本va欧美va瓶| 欧美三级视频在线观看| 国产精品色哟哟网站| 久久成人免费网| 91精品婷婷国产综合久久竹菊| 亚洲国产精品精华液2区45| 日本成人在线看| 欧洲av在线精品| 亚洲精品久久久久久国产精华液| 精品综合久久久久久8888| 欧美在线一区二区三区| 中文字幕日韩精品一区| 国产精品一区二区果冻传媒| 欧美一区二区三区播放老司机| 一区二区三区日韩| 91在线一区二区三区| 国产精品视频看| 成人精品在线视频观看| 久久婷婷综合激情| 久久99久久99| 亚洲精品在线免费播放| 日本成人在线电影网| 3751色影院一区二区三区| 日韩理论在线观看| 97se亚洲国产综合在线| 亚洲乱码国产乱码精品精小说| 成人黄色网址在线观看| 国产精品久久久久久久久果冻传媒| 成人免费视频视频在线观看免费| 久久久久久久综合日本| 国产一区二区看久久| 国产午夜精品在线观看| k8久久久一区二区三区| 亚洲桃色在线一区| 欧美日韩国产色站一区二区三区| 亚洲一区二区中文在线| 在线成人av网站| 精品夜夜嗨av一区二区三区| 国产片一区二区| 色婷婷激情综合| 日本欧美加勒比视频| 精品久久久三级丝袜| 成人激情免费视频| 亚洲中国最大av网站| 5566中文字幕一区二区电影| 精品一区二区三区免费播放| 日本一区二区三区四区| 欧美艳星brazzers| 麻豆国产精品视频| 国产精品国产馆在线真实露脸 | 精品美女在线播放| 高清beeg欧美| 一区二区三区四区激情| 日韩一区二区精品在线观看| 国产精品18久久久久久vr| 亚洲欧美日韩国产成人精品影院| 6080yy午夜一二三区久久| 国产大片一区二区| 亚洲综合偷拍欧美一区色| 精品日韩欧美在线| 成人黄色a**站在线观看| 午夜精品福利一区二区蜜股av| 欧美xfplay| 欧美三区免费完整视频在线观看| 极品尤物av久久免费看| 亚洲蜜臀av乱码久久精品蜜桃| 日韩一区二区三区四区| 99久久99精品久久久久久 | 亚洲卡通欧美制服中文| 91精品国产色综合久久ai换脸| 国产成人h网站| 天天综合网 天天综合色| 中文字幕一区二区三区乱码在线| 欧美精品视频www在线观看| 丁香桃色午夜亚洲一区二区三区| 日日夜夜精品免费视频| 国产精品国产三级国产| 久久综合网色—综合色88| 69p69国产精品| 91免费国产在线| 高清不卡在线观看| 激情文学综合丁香| 三级一区在线视频先锋| 亚洲精品乱码久久久久久| 国产精品美女久久久久久久久 | 亚洲午夜久久久久久久久电影院| 久久久久综合网| 91精品国产色综合久久| 欧美在线观看视频一区二区| 国产91富婆露脸刺激对白| 久久不见久久见免费视频7| 亚洲成人精品一区二区| 亚洲靠逼com| 亚洲精品久久嫩草网站秘色| 国产精品福利一区二区三区| 国产亚洲精品免费| 久久久亚洲精华液精华液精华液| 欧美一区二区三区日韩| 欧美日韩精品一区二区三区蜜桃 | 欧洲一区二区av| 色猫猫国产区一区二在线视频| 成人午夜av电影| 成人免费毛片app| 成人精品在线视频观看| 99精品欧美一区二区蜜桃免费| 成人永久看片免费视频天堂| 国产成人丝袜美腿| 顶级嫩模精品视频在线看| 国产不卡免费视频| kk眼镜猥琐国模调教系列一区二区| 成人99免费视频| 91女人视频在线观看| 色狠狠综合天天综合综合| 欧美揉bbbbb揉bbbbb| 日韩一级完整毛片| 久久九九99视频| 国产精品麻豆网站| 一区二区三区中文字幕电影| 亚洲一区二区三区四区五区黄| 亚洲成人一区在线| 久久精品国产亚洲高清剧情介绍 | 自拍偷在线精品自拍偷无码专区| 日韩毛片视频在线看| 午夜天堂影视香蕉久久| 青青草一区二区三区| 国产精品一区二区果冻传媒| 99久久久久久| 91精品国产综合久久小美女| 精品对白一区国产伦| 国产精品久久看| 日产欧产美韩系列久久99| 国产夫妻精品视频| 色播五月激情综合网| 欧美电影免费提供在线观看| 欧美国产日韩亚洲一区| 亚洲午夜国产一区99re久久| 久久国产福利国产秒拍| 99精品久久免费看蜜臀剧情介绍| 欧美综合天天夜夜久久| 精品99一区二区| 一区二区三区精品| 久久66热re国产| 欧美性一区二区| 欧美激情一区二区在线| 五月天亚洲精品| 99久久久久久99| 国产亚洲欧美色| 奇米色777欧美一区二区| 99久久精品国产一区二区三区|