jlawrence / eos
解析和求解数学方程,无需使用 'eval()'。
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: 4.*
README
安装
使用 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();
开发
测试
通过首先使用以下命令从存储库根目录安装 phpunit 来运行单元测试:
composer update
然后使用以下命令运行测试:
phpunit
在为添加功能的包创建类时,请确保调用 Parser::solveIF()
而不是 Parser::solve()
,以便类保留用户使用的完整原始方程。