我是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脚本并检索参数值呢?它适合我的目的吗?
答案 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]