0

我是 Mathematica 的新手,我似乎在 Mathematica 语法中遗漏了一些东西。

我复制了下面的两个代码。

对于此示例,Print[second] 必须返回 120,但它始终为 0。

任何建议表示赞赏。

C:

    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 符号名称,因此该表达式_yolcu = 5不会导致 Mathematica 将使用值调用的变量_yolcu放入5上下文符号表中。尝试交互执行语句,然后尝试_yolcu再次执行;Mathematica 将(或者更确切地说对我而言)返回_yolcunot 5

事实上_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 中迭代循环的性能令人沮丧。要编写好的 Mathemaitca 表达式,您需要考虑以实现相同目的的方式将函数应用于列表。有点像列表是一个展开的 Do 循环,迭代实际上是通过遍历这个列表来实现的。

于 2013-01-26T20:09:50.480 回答