TSL语言基础 > 矩阵计算 > 矩阵运算

基础算符对矩阵计算的支持    

  •   TSL的基础算符+,-,*,/,\,%,mod,div,^,~,.=,.>,.<,.<>,.>=,.<=,.!,.&,.|,.^,.||,.&&,.!!,like,++,--都支持矩阵(数组)的计算,可以支持简单类型和矩阵进行计算,也支持矩阵和矩阵一起进行计算。
      用二元运算符支持矩阵对矩阵,矩阵对常量,常量对矩阵,加法为例:
      array(1,2,3)+array(2,3,4)为array(3,5,7)
      1+array(1,2)和array(1,2)+1为array(2,3)

      和其他的支持矩阵计算的语言不同,TSL的基础的算符对矩阵计算依旧是原来基础算符的含义,例如矩阵和矩阵用*来计算,是每个相应单元格之间相乘。

      基础算符的运算既支持二维数组(矩阵),也支持一维数组或者其他维度的数组。
      默认情况下,也支持对非完全矩阵的计算,即当对应位置不存在时或为nil时,当0处理。
      例如:Array(“A”:100,”B”:200,”C”:300)+array(“A”:1,”C”:3,”D”:4)
      可以计算的结果为Array(“A”:101,”B”:200,”C”:303,”D”:4)。
    若希望该种计算时进行报错或提示,可通过系统参数设置FAQ:Q:CalcCTRLWord系统参数设置:控制nil参与计算以及浮点除0的警告或者出错

    例子1:矩阵和简单类型的计算。
    A:=array(1,2,3);
    A:=A+1;//该写法也可以写成 A+=1;
    // 结果A是array(2,3,4)也就是每个单元格都加1。   

    A:=Ones(10,10);//初始化一个全1的10*10矩阵。
    A:=A*3;
    // 结果A是一个10*10的全3矩阵。


    例子2:矩阵和矩阵的计算
        A:=array(1,2,3);
        B:=array(2,3,4);
        A:=A*B; //也可以写成A*=B;
    //结果A是array(2,6,12)
        A:=Eye(10,10);
        B:=Ones(10,10);
        A:=A+B;
    //结果A是对角线为全2其他为全1的矩阵。


    例子3:非完全矩阵的计算-矩阵与矩阵的大小不一致时的计算
       A:=array("A":1,"B":1,"C":1);
       B:=array("A":2,"C":2);
       return A+B;
    //结果A为:array("A":3,"B":1,"C":3)

      目前,矩阵和矩阵以及矩阵和简单类型的计算支持所有常用的基础算符有+,-,*,/,\,mod,div,^,~等简单算符。
    支持不同维度的矩阵计算,对应如:
    运算符运算运算对象结果类型
    +实数+数组
    数组+数组
    一维数组+二维数组
    实数与数组每个单元格值相加
    两个数组对应单元格的值相加
    一维数组与二维数组每列对应单元格值相加
    -同加法同加法
    *同加法同加法
    /右除同加法同加法
    \左除同加法同加法
    %,mod取余同加法同加法
    div除取整同加法同加法
    ^乘方同加法同加法
    ~求对数同加法同加法
    .=等于同加法同加法
    .>大于同加法同加法
    .<小于同加法同加法
    .<>不等于同加法同加法
    .>=大于等于同加法同加法
    .<=小于等于同加法同加法
    .&位与同加法同加法
    .|位或同加法同加法
    .!位非.!数组数组每个单元格值求位非
    .^位异或同加法同加法
    shl位左移同加法同加法
    rol位循环左移同加法同加法
    shr位右移同加法同加法
    ror位循环右移同加法同加法
    .&&逻辑与同加法同加法
    .||逻辑或同加法同加法
    .!!逻辑非.!!数组数组每个单元格值求是否为真
    like模式匹配判断同加法同加法
    ++加1数组++/++数组数组每个单元格值+1
    --减1数组--/--数组数组每个单元格值-1

    范例:
    范例1
     //实数与数组相加
      num:=5;
      arr:=array(1,2,3,4,5);
      return num+arr; 
     //返回:array(6,7,8,9,10)

    范例2
     //数组与数组相加
      arr1:=array(1,2,3,4,5);
      arr2:=array(6,7,8,9,10);
      return arr1+arr2; 
     //返回:array(7,9,11,13,15)

    范例3
     //一维数组与二维数组相加
      arr1:=array(1,2,3,4,5);
      arr2:=ones(5,array("a","b","c"));;
      return arr1+arr2;

     //结果:
     
    范例4
     //数组自增1
      arr:=array(1,2,3,4,5);
      return ++arr;
     //返回:array(2,3,4,5,6)