2009-06-17 35 views
0

私はC++でwritedされたLUを荒らしました。私はPHPに同じコードを追加する必要があります。私はそれをウィークにしましたが、PHPで私は異なる結果を持っています。メインCで計算されている++:C++からPHPへの変換

for (int i=0;i<m;i++) 
    { 
     for (int j=0;j<m;j++) 
     { 
      cout << tab1[i][j]<<"\t";  
     } 
     cout <<endl; 
    } 

     for (int i=0;i<m;i++) 
    { 
     for (int j=0;j<m;j++) 
     { 

      if (i==j) 
       { 
         tab2[i][j]=1; 
         tab3[i][j]=0; 
         } 
       else 
       { 
         tab3[i][j]=0; 
         tab2[i][j]=0; 
         } 

     } 
    } 
     //glowne dzielenie tego co mamy do rozlozenia 
    for (int i=0;i<m;i++) 
    { 

     for (int j=0;j<m;j++) 
     { 
      for (int k=0;k<m;k++) 
      { 
       pom+=tab2[i][k]*tab3[k][j]; 
       pomoc+=tab2[j][k]*tab3[k][i];  
      }  
      if (i<=j) 
      tab3[i][j]=tab1[i][j]-pom; 

      if (j>=i) 
      tab2[j][i]=(tab1[j][i]-pomoc)/tab3[i][i]; 

      pom=0; 
      pomoc=0; 
     }  
    } 

とPHPでそれが見えます:

$w= sizeof($this->input['macierz_1']); 
     $pom=0;   $pomoc=0; 

          for ($i=1;$i<=$w;$i++) 
       { 
       for ($j=1;$j<=$w;$j++) 
        { 

         if ($i==$j) 
         { 
           $tab2[$i][$j]=1; 
           $tab3[$i][$j]=0; 
           } 
        else 
         { 
           $tab3[$i][$j]=0; 
           $tab2[$i][$j]=0; 
           } 

        } 
       } 

     //glowne dzielenie tego co mamy do rozlozenia 
     for ($i=1;$i<=$w;$i++) 
      { 
      for ($j=1;$j<=$w;$j++) 
       { 
        for ($k=1;$k<=$w;$k++) 
         { 
         $pom+=$tab2[$i][$k]*$tab3[$k][$j]; 
         $pomoc+=$tab2[$j][$k]*$tab3[$k][$i]; 


         }  
        if ($i<=$j) 
         $tab3[$i][$j]=($this->input['macierz_1'][$i][$j])-$pom; 


        if ($j>=$i) 

        $tab2[$j][$i]=(($this->input['macierz_1'][$i][$j])-$pomoc)/$tab3[$i][$i]; 


        $pom=0; 
        $pomoc=0; 

       }  
      } 
      echo '<b>Macierz wynikowa L:<br> </b>'; 
     $this->formularz($w,$w,'macierz_L',$tab2); 
       echo '<b>Macierz wynikowa U: <br> </b>'; 
     $this->formularz($w,$w,'macierz_U',$tab3); 
       } 

を私は1ない0 PHPのフォームでARRYを開始し、すべてにその[OK]をalgorymことを知っています。誰かが私がmastakeをつかんだか、それともwikiのPHPでalgorytm LUを教えてくれますか?

+0

あなたはきれいにインデントを使用して、コードの明瞭度を改善してくださいことはできますか?それはそれを読む人に役立ちます。 –

+0

人々がこれに答えようとしている場合、彼はLU分解をしようとしているように見えます:http://en.wikipedia.org/wiki/LU_decomposition Rafal、整数または浮動行列で作業しているかどうか確認できますか?失敗した入力例をいくつか教えてもらえますか? – Stobor

答えて

1
  1. LUとは何ですか?
  2. 間違いを正確にはどういう意味ですか?ランタイムエラー、予期しない出力、プログラムが終了しない?

一見して、あなたのPHPコードは私のために正しく見えます。

あなたはもう少し明確にする必要があります。そうでなければ、人々はあなたを助けるのに苦労しています。

0
  1. LU恋人と上層の崩壊を伴う数字のmetodです。それは配列のためのGauus消去に精通しています。
  2. 私はエラー・プログラムを実行していませんが、結果は何でなければなりません。彼らは異なります
0

この例は役に立ちますか? http://au.php.net/manual/en/function.array.php#49054

マイケル・ドットbommarito gmailのドットコムで

15-JAN-2005 3:14

誰がLU分解機能を書いていくつかの助けを探していただけの場合には、ここでは簡単な例です。 。

N.B.すべての配列は0ではなく、インデックス1で始まるものとみなされます。変更するのは難しくありませんが、array(...)だけでなく、array(1 => ...)を指定してください。

さらに、この関数は、行列の可変要素のみを考慮するように最適化されています。 $ Lは下三角行列であるため、対角線または上三角の要素を計算する必要はありません。同様に$ Uである。

また、この関数は、入力行列が非特異であることを確認するためのチェックも行いません。

/* 
* LU Decomposition 
* @param $A initial matrix (1...m x 1...n) 
* @param $L lower triangular matrix, passed by reference 
* @param $U upper triangular matrix, passed by reference 
*/ 
function LUDecompose($A, &$L, &$U) 
{ 
    $m = sizeof($A); 
    $n = sizeof($A[1]); 

    for ($i = 1; $i <= $m; $i++) { 
     $U[$i][$i] = $A[$i][$i]; 

     for ($j = $i + 1; $j <= $m; $j++) { 
      $L[$j][$i] = $A[$j][$i]/$U[$i][$i]; 
      $U[$i][$j] = $A[$i][$j]; 
     } 
     for ($j = $i + 1; $j <= $m; $j++) { 
      for ($k = $i + 1; $k <= $m; $k++) { 
       $A[$j][$k] = $A[$j][$k] - ($L[$j][$i] * $U[$i][$k]); 
      } 
     } 
    } 

    return; 
}