我现在有一个算法涉及一个矩阵的输入和求逆,请问在delphi 里面有没有对矩阵进行操作的函数啊?
请大家帮帮忙哦。
急用。
不胜感激!

解决方案 »

  1.   

    Delphi 函数:Exp        函数         指数函数 
    ////////////////////
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids,math;type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        StringGrid3: TStringGrid;
        Edit1: TEdit;
        Label1: TLabel;
        Button1: TButton;
        Button2: TButton;
        Edit2: TEdit;
        Label2: TLabel;
        Edit3: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure Edit1Change(Sender: TObject);
        procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
        procedure Button2Click(Sender: TObject);
        procedure Edit3Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
      Arrayint=array of array of integer;
      PArrayint=^ArrayInt    ;
    var
      Form1: TForm1;
    implementation{$R *.dfm}
    procedure  getarray(var arry,prry:Arrayint; m,n,k:integer);//代数余子
    var
      i,j:integer;
    begin
      for j:=0 to n-1 do
      begin
        for i:=0 to m-1 do
        begin
          prry[j,i]:=arry[j,i];
        end;
      end;
      for j:=0 to n-1 do
      begin
        for i:=m+1 to k-1 do
        begin
          prry[j,i-1]:=arry[j,i];
        end;
      end;
      for j:=n+1 to k-1 do
      begin
        for i:=0 to m-1 do
        begin
          prry[j-1,i]:=arry[j,i];
        end;
      end;
      for j:=n+1 to k-1 do
      begin
        for i:=m+1 to k-1 do
        begin
          prry[j-1,i-1]:=arry[j,i];
        end;
      end;
    end;function func( _part:ArrayInt;n:integer):integer;//句镇求值
    var
      t:integer;
      str:Arrayint;
      i,j:integer;
      k:integer;
    begin
      setlength(str,n-1);
      k:=0;
      for i:=0 to n-2 do
      begin
        setlength(str[i],n-1);
      end;
      if(n>1) then
      begin
        for i:=0 to  n-1 do
        begin
          getarray(_part,str,i,0,n);
          t:=func(str,n-1);
          if (i mod 2 =0)
          then
            k:=k +t*_part[0,i]
          else
            k:=k-t*_part[0,i];
        end;
        result:=k;
      end
      else
        result:=_part[0,0];
    end;FUNCTION  DOphone(m,n:integer):string;
    var
      i,j:integer;
      k:integer;
      q:integer;
    begin
      if(m*n>0)
      then q:=1
      else if(m*n=0)
      then q:=0
      else q:=-1;
      m:=abs(m);
      n:=abs(n);
      if(m<n)
      then k:=m
      else k:=n;
      for i:=k downto 1 do
      begin
        if((m mod i=0) and (n mod i=0))
        then begin
          if(q=-1)
          then begin
            if(n<>i)
            then  result:='-'+inttostr(m div i)+'/'+inttostr(n div i)
            else result:='-'+inttostr(m div i);
          end
          else
            if(n<>i)
            then  result:=inttostr(m div i)+'/'+inttostr(n div i)
            else result:=inttostr(m div i);
          break;
        end;
      end;
      if(k=0)
      then result:='0';
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      passint:Arrayint;
      Tpassint:ArrayInt;
      i,j:integer;
      num:integer;
      K:integer;
    begin
      num:=strtoint(edit1.Text);
      setLength(passint,num);
      for i:=0 to num-1 do
      begin
        setlength(passint[i],num);
      end;
      setlength(Tpassint,num-1);
      for i:=0 to num-2 do
      begin
        setlength(Tpassint[i],num-1);
      end;
      for i:=0 to num-1 do
      begin
        for j:=0 to num-1 do
        begin
          if(stringgrid1.Cells[j+1,i+1]='')
          then begin
            passint[i,j]:=0;
          end
          else
            passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]);
        end;
      end;
      k:=func(passint,num);
      showmessage(inttostr(k));
      for i:=0 to num-1 do
      begin
        for j:=0 to num-1 do
        begin
          getarray(passint,Tpassint,i,j,num);
          if((i+j) mod 2 =0)
          then   stringgrid3.Cells[j+1,i+1]:=Dophone(func(Tpassint,num-1),k)
          else  stringgrid3.Cells[j+1,i+1] :=DoPhone((-1)*func(Tpassint,num-1),k);
        end;
      end;
    end;procedure TForm1.Edit1Change(Sender: TObject);
    var
      i:integer;
    begin
      try
        stringGrid1.ColCount:=strtoint(edit1.Text)+1;
        stringgrid1.RowCount:=strtoint(edit1.Text)+1;
        stringgrid3.ColCount:=strtoint(edit1.Text)+1;
        stringgrid3.RowCount:=strtoint(edit1.Text)+1;
        stringGrid1.Cells[0,0]:='j\i';
        for i:=1 to strtoint(edit1.Text) do
        begin
          stringgrid1.Cells[i,0]:=inttostr(i);
          stringgrid1.Cells[0,i]:=inttostr(i);
        end;
      except
        showmessage('input the number');
      end;
    end;procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:=
        stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]+Key;
      if(key='`')
      then stringgrid1.Cells[stringgrid1.Selection.Left,stringgrid1.Selection.Top]:='';
    end;
    function caulate(var shu:array of integer):integer;
    var
      i,j:integer;
    begin
      for i:=0 to high(shu) do
      begin
        if(shu[i]<>0)
        then break;
      end;
      result:=i;
    end;
    function myfunc(m,n:integer):integer;
    var
      k:integer;
      t:integer;
    begin
      if(m>n)
      then k:=m
      else k:=n;
      for t:=k to m*n do
      begin
        if((t mod m=0) and (t mod n=0))
        then begin
          break;
        end;
      end;
      result:=t;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      passint:Arrayint;
      Tpassint:ArrayInt;
      i,j:integer;
      num:integer;
      K:integer;
      colnum:integer;
      oNumber:array of integer;
      myrecord:array of integer;
      m,n,o:integer;
    begin
      num:=strtoint(edit1.Text);
      colnum:=strtoint(edit3.Text);
      setLength(passint,num);
      setlength(oNumber,num);
      setlength(myrecord,num);
      for i:=0 to num-1 do
      begin
        myrecord[i]:=i;
        setlength(passint[i],colnum);
      end;
    {  setlength(Tpassint,num-1);
      for i:=0 to num-2 do
      begin
        setlength(Tpassint[i],num-1);
      end;  }
      for i:=0 to num-1 do
      begin
        for j:=0 to colnum-1 do
        begin
          if(stringgrid1.Cells[j+1,i+1]='')
          then begin
            passint[i,j]:=0;
          end
          else
            passint[i,j]:=strtoint(stringgrid1.Cells[J+1,i+1]);
        end;
      end;  for i:=0 to num-1 do
      begin
        for j:=0 to num-2 do
        begin
          for m:=0 to num-1 do
          begin
            oNumber[m]:=caulate(passint[myrecord[m]]);
          end;
          if(oNumber[j]>onumber[j+1])
          then begin
            k:=myrecord[j];
            myrecord[j]:=myrecord[j+1];
            myrecord[j+1]:=k;
          end
          else if((oNumber[j]=oNumber[j+1])  and (oNumber[j]<>colnum-1))
          then begin
            k:=myfunc(passint[myrecord[j],oNumber[j]],passint[myrecord[j+1],oNumber[j+1]]);
            n:= k div passint[myrecord[j],oNumber[j]];
            o:= k div passint[myrecord[j+1],oNumber[j+1]];
            for m:=oNumber[j] to strtoint(edit3.Text)-1 do
            begin
              passint[myrecord[j],m]:=n*passint[myrecord[j],m];
              passint[myrecord[j+1],m]:=o*passint[myrecord[j+1],m];
            end;
            for n:=oNumber[j] to strtoint(edit3.text)-1 do
            begin
              passint[myrecord[j+1],n]:=passint[myrecord[j+1],n]-passint[myRecord[j],n];
            end;
          end;
        end;
      end;
      for m:=0 to num-1 do
      begin
        for n:=0 to colnum-1 do
        begin
          StringGrid3.Cells[n+1,m+1]:=inttostr(passint[myrecord[m],n]);
        end;
      end;
    end;procedure TForm1.Edit3Change(Sender: TObject);
    var
      i:integer;
    begin
     try
        stringGrid1.ColCount:=strtoint(edit3.Text)+1;
        stringgrid3.ColCount:=strtoint(edit3.Text)+1;
        stringGrid1.Cells[0,0]:='j\i';
        for i:=1 to strtoint(edit1.Text) do
        begin
          stringgrid1.Cells[0,i]:=inttostr(i);
        end;
        for i:=1 to strtoint(edit3.Text) do
        begin
          stringgrid1.Cells[i,0]:=inttostr(i);
        end;
        button1.Visible:=false;
      except
        showmessage('input the number');
      end;
    end;end.
      
    真是后悔了,,这么垃圾也拿出来,怕版主说我灌水.哈哈.
    多多原谅拉