7

我是一名数学老师,想在网站中插入一些动态数学。我想要实现的是有一个按钮,学生可以按下该按钮来随机改变一个问题,以便它是相同类型的问题,但数字不同。例如,

分解 ax^2 + bx + c 形式的二次表达式,其中 a = 1,b 和 c 是 1 到 100 之间的正整数,并且根是实整数。

如果我使用 MathML 对数学进行编码(例如,如下面的标记),存储在数据库(例如 MySQL)中,我该如何设置,以便计算机以我的方式自动和随机地改变数学表达式如上所述?我不太了解服务器端脚本...我可以用 PHP 来实现吗?还是这更像是客户端 JavaScript 的工作?我只是在寻找一些建议来指导我选择学习路径。谢谢

<math xmlns='http://www.w3.org/1998/Math/MathML'>
 <mrow>
  <msup>
   <mi>x</mi>
   <mn>2</mn>
  </msup>
  <mo>+</mo>
  <mrow>
   <mn>7</mn>
   <mo>&#8290;</mo>
   <mi>x</mi>
  </mrow>
  <mo>+</mo>
  <mn>12</mn>
 </mrow>
</math>
4

7 回答 7

3

一种方法是将通用公式存储在您的数据库中,即您给出的示例ax^2 + bx + c。名为的数据库示例formulas

id_formulas  formula_problem      constants           type         formula_solution
1            ax^2 + bx + c = 0    a{split}b{split}c   polynomial   x = (-1*{b} + ({b}^2 - 4*{a}*{c}) ) / 2*{a} {split} x = (-1*{b} - ({b}^2 - 4*{a}*{c}) ) / 2*{a}
2            y = mx + b           b{split}m{split}y   graph        x = ({b} - {y}) / -1*{m}        
3            etc                  etc                 etc          etc

然后(伪代码):

  1. 应用程序从数据库中检索随机formula_problem数(任何类型或某种类型)
  2. app 将随机生成的数字分配给常数,即“b = 1, m = 2, y = .5”
  3. 应用程序用第 2 步中的数字交换常量formula_solution(里面{}很容易找到)
  4. 应用程序求解x并加密答案(在二次方的情况下,有 2 个答案,Split("{split}")放入数组中)
  5. 应用程序显示到网络浏览器并要求学生解决:“y = mx + b”和“b = 1, m = 2, y = .5”
  6. 应用程序还将加密的答案放在网页上的隐藏表单字段中
  7. 学生求解x,然后在文本框中输入答案,然后单击提交按钮
  8. 应用程序将学生的解决方案与解密的隐藏解决方案进行比较
  9. 应用程序显示到网络浏览器:“正确/不正确”以及正确答案

此 Web 应用程序可以用 Java/C#.NET/VB.NET/PHP/任何 Web 技术编写。数据库可以是 SQL Server/MySQL/PostgreSQL/XML/等。处理都可以在服务器端以上述语言之一完成,或者,一旦从数据库中检索到数据(公式),就可以在客户端 JavaScript 中完成处理。

这个问题是非常开放式的,因为开发人员可以采用许多方法,并且归结为偏好。不过我个人的看法是,在客户端 JavaScript 与服务器端 C# 或 PHP 中编写这些东西会更难。

如果您已经了解任何计算机语言,例如 C++,那么选择一种看起来相似的脚本技术并通过阅读书籍和在线教程/代码示例开始学习。

(对不起,我不是数学家)

于 2010-10-23T15:09:03.977 回答
1

好吧,您可以使用 javascript 和随机数来改变系数。查看以下网页,了解如何执行此操作:

JavaScript:随机脚本

于 2010-10-23T14:55:17.720 回答
1

我会尝试Google Mathematical (TeX) Formulas。会干净很多。

如果您了解javascript,您可以在服务器端进行,php 并不难。

数据库应该只存储表达式的值/类型(a,b,c),而不是在数据库中存储表示特定的东西。我会制作一个生成器来创建值 a、b、c 并将它们存储在数据库中。

于 2010-10-23T14:56:01.340 回答
1

这样的事情可能会有所帮助:

<html>

<?php

//if the button has been pressed
if(isset($_POST['click'])){
    //generate a random number from 1 - 5 and store it in $random
$random = rand(1,5);
    //query the database for the equation with the id of $random
$result = $mysql_query("select equation from questions where id=$random");
$row = mysql_fetch_row($result);
    //print the equation
echo $row[0];
}

?>

<form method="post" action="">
<input type="submit" name="click" value="go"/>
</form>  
</html>
于 2010-10-23T14:57:48.193 回答
1

您当然可以在服务器端的 PHP 中执行此操作。PHP 具有用于 XML 解析的内置库,在您的情况下应该很好。随机化 a、b 和 c 很容易,但要始终得到真正的答案,您必须使用其他算法来生成数字。既然你是一名数学老师,我认为你在找到这样的算法方面和任何人一样出色。

我认为你应该把工作分成不同的部分:

  • 从 MySQL 获取问题(这很容易)
  • 解析 MathML(也许您可以找到一个库来执行此操作?)
  • 生成随机数

最后一个是最难的,特别是如果你想要一个通用系统。计算机如何知道您正在寻找什么样的答案?也许您需要针对不同类型问题的特定算法,因为有时您确实需要一个复数,而有时您需要一个正弦波。每个问题可能需要代表您通过不同的方法来解决。

有(或多或少)用于求解例如多项式方程的通用算法。您可能确实知道您的职业中已经存在的一些方法。也许可以使用这样的算法?我想你会发现,大部分的辛苦工作实际上是这个项目所涉及的数学,而不是编码。

准备好通用系统可能是不可能的。

于 2010-10-23T14:58:00.750 回答
1

无论是在服务器端还是客户端都应该无关紧要。我通常更喜欢在客户端进行任何类型的处理,因为对于每个学生来说它应该是随机的,没有理由为此添加服务器的处理时间。

你如何从 MySQL 数据库中读取数据?您可以轻松地处理从该服务器端脚本返回的数据。至于如何实现它,我建议使用一个非常易于使用的 jQuery 插件:jQuery xmlObjectifier

然后流程是:加载Student Excersize页面并请求mathml xml对象,从mysql返回后动态加载xml,将其转换为js对象(json),然后对对象的数据执行随机化。完成后,将产品加载到学生页面上的容器中。

于 2010-10-23T15:09:09.323 回答
0

您可能需要考虑WebWorK,这是一个现在由 MAA 管理的作业管理系统。它是由数学家设计并为数学家设计的在线作业系统,非常受欢迎。当然,它的产品也比您要求的要多得多。

于 2010-10-24T20:41:20.257 回答