maxima-如何从php执行一些maxima脚本?

时间:2013-06-21 02:34:31

标签: php maxima

我是CAS和maxima的新手。我想知道执行以下操作是否可行:

1)我有一个参数列表,例如a, b, c

2)在PHP中,我将一些最大值脚本存储为字符串,涉及a, b, c,例如:

do {
  a=random(20);
  b=random(20);
  c=random(20);
}while (!(a > b) || !(b > c))

使a, b, c随机化为期望值并满足要求。

3)在PHP中检索a, b, c的值。

目的是为学生创建具有合理参数的随机问题。那么如何执行maxima脚本并检索参数值呢?它适合我的目的吗?

4 个答案:

答案 0 :(得分:1)

您可以将文件中的命令字符串传递给Maxima,命令行Maxima支持。

如果您的操作系统是setvbuf(fd, NULL, _IONBF, 0);

在PHP中:

Linux/Unix/MacOS

exec('maxima -q -b file');

如果您的操作系统是system('maxima -q -b file');

Win

在Maxima中,您可以使用$maximaDir = 'D:/Program Files/Maxima-5.30.0'; // If your maxima is installed in elsewhere, please modified this location exec($maximaDir.'/bin/maxima.bat -q -b "result.txt"'); 将结果存入文件,然后在PHP中将文件作为字符串读取,您可以根据需要对字符串进行任何其他操作。

答案 1 :(得分:0)

我真的不知道你的代码是如何工作的,但是如果你把maxima保存为php扩展它可以工作。将这行代码放在php文件的开头

      <?php
       require_once("extension/Maxima.php");

       ?>

对于echo示例

              echo $A ;

答案 2 :(得分:0)

<?php

require_once($_SERVER['PM_BASE_CONFIG_PATH']);

class maxima_core {
  private $executable_command;
  protected $dbg_bool;
  protected $dbg_info;
  public function __construct($dbg=FALSE){
    $this->executable_command=constant('PM_MAXIMA_EXEC_CMD');
    $this->dbg_bool=$dbg;
    $this->dbg_info="";
  }
  protected function exec($query){// to include package that is loaded by init_command
    $descriptor = array(
      0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
      1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
      2 => array("file", "/tmp/error-log.txt", "a")//constant('PM_SERVER_LOG_DIR')."/maxima/error.log", "a") // stderr is a file to write to
    );
    $cwd=constant('PM_ACTIVITY_PLUGIN_URL')."/engine_solver";
    $MAXIMA_DIR = constant('PM_ACTIVITY_PLUGIN_DIR');
    $env=array();
    $init_command="display2d:false$" . "PM_ACTIVITY_PLUGIN_URL: \"" . $MAXIMA_DIR . "\"$";
    //'load("/home/gabriel/github/moodledata/stack/maximalocal.mac");';
    $exec_cmd=$this->executable_command." --quiet";
    // --userdir='".constant('PM_ACTIVITY_PLUGIN_DIR')."/engine_solver/maxima_userdir'";
    // change
    $result=NULL;
    $process=proc_open($exec_cmd,$descriptor,$pipes,$cwd,$env);
    if(is_resource($process)){
      if (!fwrite($pipes[0], $init_command)) {
        echo "<br />Could not write to the CAS process!<br />\n";
      } else {
        fwrite($pipes[0], $query);
        fwrite($pipes[0], "quit();");
        fclose($pipes[0]);
        $result=stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        proc_close($process);
      }
    }
    return $result;
  }
  public function dbg_info(){
    return $this->dbg_info;
  }
}
?>

答案 3 :(得分:0)

如果目标是使用Maxima创建由Web服务器呈现的作业问题,我认为已经有项目可以做到这一点。我认为其中一个名为LON-CAPA - 网络搜索应该找到它。在Maxima网站的相关项目页面上可能会提到一些其他项目。 [1]

[1] http://maxima.sf.net/relatedprojects.html