Math 如何在网页中添加动态数学

Math 如何在网页中添加动态数学,math,mathml,database-driven,Math,Mathml,Database Driven,我是一名数学老师,想在网站上插入一些动态数学。我想实现的是,有一个按钮,学生可以按下,随机改变一个问题,使它是相同类型的问题,但不同的数字。比如说, 将形式为ax^2+bx+c的二次表达式乘以因子,其中a=1,b和c是介于1和100之间的正整数,因此根将是实整数 如果我使用MathML对存储在数据库(例如MySQL)中的数学(例如,下面的标记)进行编码,我如何设置,以便计算机以我上面描述的方式自动随机地改变数学表达式?我对服务器端脚本了解不多。。。我可以用PHP实现这一点吗?或者这更像是客户端J

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

将形式为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>

x
2.
+
7.
⁢
x
+
12

您可以使用javascript和随机数来改变系数。请查看以下web端,了解如何执行此操作的好课程:

我想试试这个。它会干净得多

如果您理解javascript,就可以在服务器端完成,php并不是那么难


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

类似的内容可能会有所帮助:

<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实现。PHP有用于XML解析的内置库,这在您的情况下应该很好。随机化a、b和c是很容易的,但要始终有一个真实的答案,你必须使用其他算法来生成数字。因为你是一名数学老师,我认为你在找到这样一个算法方面和任何人一样优秀

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

  • 从MySQL获取问题(这很容易)
  • 解析MathML(也许你可以找到一个库来做这个?)
  • 生成随机数
最后一个是最难的,特别是如果你想要一个通用的系统。计算机如何知道你在寻找什么样的答案?也许你需要针对不同类型问题的特定算法,因为有时你需要一个复数,有时你需要一个正弦波。每个问题都可能需要以不同的方式代表您解决

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


准备好通用系统可能不可行。

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

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
然后(伪代码):

  • 应用程序从数据库(任何类型或特定类型)检索随机
    公式\u问题
  • 应用程序将随机生成的数字分配给常数,即“b=1,m=2,y=0.5”
  • 应用程序使用步骤2中的数字交换
    formula_解决方案中的常量(在
    {}
    中,很容易找到)
  • 应用程序求解x并加密答案(对于二次型,有两个答案,
    Split({Split}”)
    到数组中)
  • 应用程序显示在网络浏览器上,并要求学生解答:“y=mx+b”和“b=1,m=2,y=0.5”
  • 该应用程序还将加密答案放在网页上的隐藏表单字段中
  • 学生求解x,然后在文本框中键入答案,然后单击提交按钮
  • 应用程序将学生的解决方案与解密的隐藏解决方案进行比较
  • 应用程序向web浏览器显示:“正确/不正确”以及正确答案
  • 这个web应用程序可以用Java/C#.NET/VB.NET/PHP/任何web技术编写。数据库可以是SQL Server/MySQL/PostgreSQL/XML/等。所有处理都可以在服务器端用上述语言之一完成,或者,一旦从数据库检索到数据(公式),就可以在客户端JavaScript中完成处理

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

    <>如果你已经知道任何计算机语言,即C++,那么选择一个看起来相似的脚本技术,通过阅读书籍和在线教程/代码例子开始学习。
    (很抱歉,我不是一个数学爱好者)

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

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


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

    你可能想考虑,现在由MAA管理的作业管理系统。它是由数学家为数学家设计的在线家庭作业系统,非常流行。当然,它也比你要求的产品多得多。

    我不知道找到整数根到底有多难