0

私は Mathematica を初めて使いましたが、Mathematica の構文に何か欠けているようです。

以下の両方のコードをコピーしました。

この例では、Print[second] は 120 を返さなければなりませんが、常に 0 です。

アドバイスをいただければ幸いです。

子:

    int row = 4;
    int column = 10;
    int passenger = 5;
    int luggage = 20;
    int arrival = 15;
    int walking = 5;

    int second = 0;
    int waitingtime = 0;
    int _yolcu = 0;

        for (int i = 0; i <row; i++)
        {
          waitingtime = 0;
          if (_yolcu == passenger)
              break;
          for (int j = 0; j < column; j++)
          { 
              if (_yolcu == passenger)
                  break;
              _yolcu++;
              if (i == 0 && j == 0){
                  second = second + luggage;
                  continue;
                      }

              else
                      {
                  waitingtime = 0;
                  waitingtime =second-(j * walking + arrival * (_yolcu - 1));
                  if (waitingtime>= 0)
                  {
                      second = second + walking + luggage;
                  }
                  else        
                      second = second -  waitingtime+luggage;
              }

          }
      }

マテマティカ:

        row = 4;
        column = 10;
        passenger = 5;
        luggage = 20;
        arrival = 15;
        walking = 5;

        second = 0;
        waitingtime = 0;
        _yolcu = 0;

        For[i = 0, i < row, i++, waitingtime = 0;
         If[_yolcu == passenger, Break[],
          For[j = 0, j < column, j++,
           If[_yolcu == passenger, Break[], _yolcu++;
            If[i == 0 && j == 0, second = second + luggage, 
             waitingtime = second - (j*walking + arrival*(_yolcu - 1));
             If[waitingtime >= 0, second = second + walking + luggage, 
              second = second - waitingtime + luggage]]]]]]

        Print[second]
4

2 に答える 2

2

これ

_yolcu

は有効な Mathematica シンボル名ではないため,式によって Mathematica が値で_yolcu = 5呼び出された変数をコンテキストシンボルテーブルに入れることはありません.ステートメントを対話的に実行してから、もう一度実行してみてください。Mathematica はnotを返します(というか、むしろそうします) 。_yolcu5_yolcu_yolcu5

実際_yolcuにはと一致するパターンHead yolcuです。一般に、アンダースコアで始まる式はすべてパターンです。下線は Mathematica シンボルの名前では無効です.のような式_yolcu++は の値をインクリメントしません_yolcu。ステートメントを実行するとエラーが発生する以外は、実際には何をするのかわかりません。おそらく、あなたのコードが実際にヒットすることはありません。

Mathematica のパターンをまだ理解していない場合は、ドキュメントを確認することをお勧めします。

そして、私が書いている間、あなたが行ったことは、C コードを Mathematica に翻訳するのとは微妙に異なって見えます。まるで C コードを 'C-written-in-Mathematica` に翻訳したように見えます。C言語をリバースエンジニアリングして問題の仕様を作成し、その問題に対する Mathematica のソリューションをコーディングするのに時間を費やしたほうがよいと思います。これはあなたの基本的な間違いだと思います。アンダースコアに関する混乱は、Mathematica の構文に慣れていないだけです。

于 2013-01-23T11:12:26.550 に答える
0

うまくいってよかったのですが、HPMark の最後の段落を参照すると、Mathematica の反復ループのパフォーマンスは最悪です。優れた Mathematca 式を書くには、同じことを達成する方法でリストに関数を適用するという観点から考える必要があります。リストのようなものは展開された Do ループであり、反復は実際にはこのリストをトラバースすることによって達成されます。

于 2013-01-26T20:09:50.480 に答える