解析和求解数学方程,无需使用 'eval()'。

v3.2.2 2016-03-02 22:35 UTC

README

Build Status Latest Stable Version Latest Unstable Version Total Downloads License Code Climate Test Coverage

安装

使用 Composer 安装 EOS

添加依赖

"require": {
    "jlawrence/eos": "3.*"
}

运行 composer update 即可。

方程操作系统

jlawrence\eos\

此类使得在您自己的应用程序中使用和解析/求解方程变得非常简单。**注意** 这些类中的所有函数都是静态的。还请注意,如果遇到错误,这些类将抛出异常,请阅读 Math.php 文件的开头部分以了解抛出的异常的定义。异常包括错误描述的消息,并在 Parser 中通常还包括使用的完整方程。

解析器

此类有一个重要的功能,即 Parser::solve(),它执行所有的工作,因此我们将从这里开始,并以示例结束。

use jlawrence\eos\Parser;
solve($infix, $variables)

要使用此函数

$value = Parser::solve($eq, $vars);
$infix

是一个具有变量支持的常规方程。

示例方程

2(4x)
5+((1+2)*4)+3
5+4(1+2)+3
10*sin(x)
10*cos(x)

解析器有很好的隐含乘法。

$variables

变量相对简单易懂。如果它包含一个标量(即非数组值),则方程中的**每个**变量都将被替换为该数字。如果它包含一个数组,则将进行按变量替换 - 注意,该数组**必须**采用 'variable' => value 的格式
例如

array(
    'x' => 2,
    'y' => 3
);

给定方程

5x^y

如果以此方式调用

Parser::solveIF('5x^y', 2);

它将等于 '20',因为每个变量都被替换为 2。然而,如果以此方式调用

Parser::solveIF('5x^y', array(
                            'x' => 2,
                            'y' => 3));

您将得到 '40' 的结果,因为它相当于 5*2^3,正如预期的那样。

jlawrence\eos\Graph

使用方法

use jlawrence\eos\Graph;

这是一个有趣的类,可以创建图表。图像默认为 640x480,要初始化不同的大小,请使用

Graph::init($width, $height);

$width$height 是用于图像大小的值。

graph($eq, $xLow, $xHigh, [$xStep, $xyGrid, $yGuess, ...])

此方法将为方程($eq)生成图表,并解析其最小和最大 x 范围。所有变量解释如下

  • $eq 要使用的标准方程。**必须**包含变量。(例如 x
  • $xLow 计算的起点 - 图表的左侧。
  • $xHigh 变量的最后一个计算点 - 图表的右侧。
  • $xStep 变量的步进点。设置为 null/false 以使用图表类中的智能步进功能。
  • $xyGrid = false 在图表上显示 x/y 网格线。默认为 false。每条网格线都设置为整数,最多 30 条线,因此它将计算步进。当显示网格时,线条将标注在图像的顶部和左侧。
  • $yGuess = true 估计 y-bounds 的下限和上限(图像的底部和顶部)。这将设置下限为 $yLow 发现的最低 y 值,并将上限设置为 $yHigh 发现的最大 y 值。
  • $yLow = null y 的下限。如果 $yGuess 为 true,则如果发现 y 的较低值,将重置。
  • $yHigh = null y 的上限。如果 $yGuess 为 true,则如果发现 y 的较高值,将重置。

如果您不想轴上标有它们的数字,您可以通过以下方式关闭默认行为:

Graph::$labelAxis = false;

待办事项

  • 允许用户为图形的所有方面定义颜色。

要设置一个具有 21x21 窗口(即 -10到10)的图形,用于方程 sin(x),并以 PNG 格式输出,可以使用以下方式:

Graph::graph('sin(x)', -10, 10, 0.01, true, false, -10, 10);
Graph::outPNG();

它看起来会是这样:
Sin(x)

开发

测试

通过首先使用以下命令从存储库根目录安装 phpunit 来运行单元测试:

composer update

然后使用以下命令运行测试:

phpunit

在为添加功能的包创建类时,请确保调用 Parser::solveIF() 而不是 Parser::solve(),以便类保留用户使用的完整原始方程。