2013-06-21 81 views
0

我是新來的CAS和maxima。我想知道是否可以做到以下幾點:maxima-我怎樣才能從PHP執行一些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

我真的不知道你的代碼是如何工作的,但是如果你將最大值保存爲一個php擴展,它可以工作。請將這行代碼的PHP的啓動文件

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

     ?> 

對於回聲例如

   echo $A ; 
+0

我不熟悉maxima語法,所以代碼只是我想要實現的一個例子......如果我將maxima作爲php擴展添加,如何從maxima腳本中檢索輸出? – Boyang

+0

嘗試將最大化腳本中的變量'de'作爲變量,然後回顯變量以查看它出來的天氣。或者只是在循環後添加maxima腳本中的代碼 –

+0

它是如此工作? –

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; 
    } 
} 
?> 
0

如果目標是用千里馬創造,它們通過網絡提交作業問題服務器,我認爲有這樣的項目。我認爲其中一個名爲LON-CAPA - 網絡搜索應該可以找到它。在Maxima網站的相關項目頁面上可能會提到其他一些項目。 [1]

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

+0

我也知道一個叫做STACK3,它在moodle框架下。 Thx的信息。 – Boyang

1

可以傳遞的命令串中的文件,以最大值,由命令行最大值支撐。

,如果你的操作系統是Linux/Unix/MacOS

在PHP:

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

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

,如果你的操作系統是Win

$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"'); 

在千里馬,您可以使用stringout();在文件中獲得結果,然後在PHP中將該文件作爲字符串讀取,您可以根據需要對該字符串執行任何其他操作。