【问题标题】:how to add dynamic math to webpage如何将动态数学添加到网页
【发布时间】:2011-04-29 14:33:02
【问题描述】:

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

分解 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>

【问题讨论】:

  • 我不知道找到二次方程的整数根有多难,但对我来说,这听起来不像是 javascript 工作。我认为最简单的解决方案是创建一个包含预定义练习的数据库,并将它们随机展示给您的学生。

标签: math mathml database-driven


【解决方案1】:

一种方法是将通用公式存储在您的数据库中,即您提供的示例 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. 应用程序将随机生成的数字分配给常数,即“b = 1, m = 2, y = .5”
  3. 应用程序将formula_solution 中的常量与第 2 步中的数字交换(在{} 中很容易找到)
  4. app求解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++,那么请选择一种看起来相似的脚本技术,然后通过阅读书籍和在线教程/代码示例开始学习。

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

【讨论】:

  • 我的感觉是一致的做法是在服务器上插入通用公式,并在客户端通过 JavaScript 插入特定数据。谢谢。
  • 我不明白你为什么要在这里用 JavaScript 做任何事情。您也可以使用服务器端脚本插入特定数据。我认为你应该坚持使用一种语言,否则你会陷入让 Js 和 PHP 相互交谈的麻烦,这对我来说似乎没有必要。
  • 有人评论说服务器端脚本过多需要更多时间,但也许差别不大(至少不足以超过您指出的缺点)。谢谢
  • Bill,无论是服务器端还是客户端,都需要相同的时间,但是在一些高流量系统中,服务器 CPU 可能是有限的资源,因此您希望将工作卸载到客户端的 PC (即 JavaScript)如果可能(即没有安全风险)。对于这个程序,处理时间会非常小,所以不用担心。
  • @JohnB 很高兴知道,谢谢。并感谢您在帖子中提供的更多详细信息。
【解决方案2】:

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

JavaScript: Random Scripts

【讨论】:

    【解决方案3】:

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

    如果你懂javascript,你可以在服务器端做,php并不难。

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

    【讨论】:

    • 所以你不鼓励使用 MathML?浏览器支持最近似乎在改进(尤其是 Firefox,IE 有一个“MathType”插件。
    【解决方案4】:

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

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

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

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

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

    做好准备,通用系统可能无法实现。

    【讨论】:

    • 嗯,Firefox 似乎对 MathML 解析内置了相当不错的支持,而 IE 有一个插件。我承认我不知道它们有多可靠,但这些演示似乎令人印象深刻。
    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

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

      <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>
      

      【讨论】:

      • 我对 PHP 的了解还不够,但我会记住这一点!谢谢。
      • 这里没什么大不了的,如果您有浏览器可读并存储在数据库中的方程式,您可以生成一个随机数 (5=#ofequations) 并拉取并打印该行。下面的代码只是一个将触发顶部代码的按钮。为了便于阅读,我将添加 cmets。
      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 2011-03-08
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多