我发现现在市面上的很多移动端数学软件用起来不顺手,所以自己写了一个Android端的数学工具。目前它的功能包括:计算器,解线性规划问题,画函数,插值法,画方程。
注:这个数学工具是我的一个课程设计,这篇文章是它的使用文档。
进入方法:打开应用后点击“计算器”按钮。 该应用的计算器功能可以计算绝大多数的表达式,基本的加减乘除,取模,与或非,大于小于等于,幂,括号,初等函数,等都可以使用。
+ 双目时求两数相加,单目时保持原数不变,例如:
输入:123+4
输出:127.0
输入:+33
输出:33.0
- 双目时求两数相减,单目时符号取反,例如:
输入:7-3
输出:4.0
输入:-5
输出:-5.0
* 求两数相乘,例如:
输入:3*4
输出:12.0
/ 求两数相除,例如:
输入:5/2
输出:2.5
% 取模,例如:
输入:5%2
输出:1.0
& 与,例如:
输入:1&1
输出:1.0
输入:1&0
输出:0.0
输入:3&5
输出:1.0
输入:0&1000
输出:0.0
| 或,例如:
输入:1|0
输出:1.0
输入:0|0
输出:0.0
> 是否大于,例如:
输入:1>2
输出:0.0
输入:4>1
输出:1.0
输入:0>0
输出:0.0
< 是否小于,例如:
输入:1<2
输出:1.0
equ 是否等于,例如:
输入:0equ0
输出:1.0
输入:1equ4
输出:0.0
equ0 非,例如:
输入:1 equ0
输出:0.0
输入:0 equ0
输出:1.0
输入:(1>2) equ0
输出:1.0
^ 求幂,例如:
输入:3^3
输出:27.0
输入:2^0.5
输出:1.4142135623730951
输入:2^(1/2)
输出:1.4142135623730951
注:a^b表示$a^b$
A 求全排列,例如:
输入:3A3
输出:6.0
输入:10A1
输出:10.0
输入:10A2
输出:90.0
注:aAb表示$A_a^b$
C 求组合数,例如:
输入:3C2
输出:3.0
输入:10C2
输出:45.0
注:aCb表示$C_a^b$
() 括号,例如:
输入:(1+2)*3
输出:9.0
sin() 求正弦,例如:
输入:sin(2)
输出:0.9092974268256817
输入:sin2
输出:0.9092974268256817
三角函数还支持:cos(), tan(), arcsin(), arccos(), arctan(),用法均与sin()相同。 exp() 求指数,例如:
输入:exp(1)
输出:2.7182818284590455
输入:exp1
输出:2.7182818284590455
ln() 求自然对数,例如:
输入:ln(1)
输出:0.0
输入:ln(2)
输出:0.6931471805599453
log 求对数,例如:
输入:(2)log(2)
输出:1.0
输入:(3)log(5)
输出:1.4649735207179273
输入:3log5
输出:1.4649735207179273
注:a log b表示$log_ab$
abs() 取绝对值,例如:
输入:abs(-5)
输出:5.0
输入:abs(4.6)
输出:4.6
gcd 求两数最大公约数,例如:
输入:3gcd6
输出:3.0
输入:3gcd5
输出:1.0
输入:(10)gcd(5)
输出:5.0
注:a gcd b表示$gcd(a, b)$
fac() 求阶乘,例如:
输入:fac(3)
输出:6.0
输入:fac3
输出:6.0
max 取大值,例如:
输入:1max2
输出:2.0
输入:1max3max2
输出:3.0
输入:7max5max2
输出:7.0
注: a max b表示$max(a, b)$ a max b max c表示$max(a, b, c)$
min 取小值,用法与max相同。 fix() 向下取整,例如:
输入:fix(1.5)
输出:1.0
输入:fix(-2.7)
输出:-3.0
注:该应用计算器功能支持上述的所有符号和函数的任何方式混合使用。
符号/函数 | 优先级 | 结合性 |
---|---|---|
() | 0 | - |
sin | 1 | 右结合 |
cos | 1 | 右结合 |
tan | 1 | 右结合 |
ln | 1 | 右结合 |
exp | 1 | 右结合 |
arcsin | 1 | 右结合 |
arccos | 1 | 右结合 |
arctan | 1 | 右结合 |
fac | 1 | 右结合 |
log | 1 | 右结合 |
abs | 1 | 右结合 |
fix | 1 | 右结合 |
^ | 2 | 左结合 |
A | 2 | 左结合 |
C | 2 | 左结合 |
gcd | 2 | 左结合 |
* | 3 | 左结合 |
/ | 3 | 左结合 |
% | 3 | 左结合 |
+ | 4 | 左结合 |
- | 4 | 左结合 |
max | 5 | 左结合 |
min | 5 | 左结合 |
< | 6 | 左结合 |
> | 6 | 左结合 |
equ | 6 | 左结合 |
& | 7 | 左结合 |
| | 7 | 左结合 |
注:优先级数值越小的越优先计算。 结合性存在的意义是:当一个数字左右两边的运算符的优先级相同时,位于左边的运算符是左结合的就先计算左边的,否则就先计算右边的。
进入方法:进入计算器后,点击“线性规划”按钮。 在上面的编辑框输入问题,下面的编辑框会输出答案。 该应用可以解决绝大多数线性规划问题,可以自定义目标函数(包括min或max也可以选择),可以自定义约束条件(包括约束符号>, <, >=, <=或=都可以),默认是各个变量的取值默认是取非负数,如果需要取负数,则可以人为的把该变量的所有系数取负,然后得到的结果就是该变量的相反数;如果不确定正负,可以把该变量设为两个变量相减。
例如需要x1<=0,可以取x1'=-x1,然后用-x1'代替x1,最后得到结果时,x1=-x1'
例如需要x1无约束,可以令x1=x1'-x1'',然后用x1'-x1''代替x1,最后得到结果时,x1=x1'-x1''
输入格式为:
<目标类型>: <目标系数1>, <目标系数2>, ..., <目标系数n>;
<变量1系数1>, <变量2系数1>, ..., <变量n系数1> <约束符号1> <常数1>;
<变量1系数2>, <变量2系数2>, ..., <变量n系数2> <约束符号2> <常数2>;
...;
<变量1系数m>, <变量2系数m>, ..., <变量n系数m> <约束符号m> <常数m>;
说明:
<目标类型>可以为:max或min,表示求最大值和求最小值,<目标系数i>为第i个变量在目标函数里的系数
后面的都是约束条件各个变量的系数,<约束符号i>可以为>, <, >=, <=或=,表示第i个约束条件的约束符号
例如要计算:
max z = 2*x1 + x2
s.t.
3*x1 + 5*x2 <= 15
6*x1 + 2*x2 <= 24
x1, x2 >= 0
则输入:
max: 2, 1;
3, 5 <= 15;
6, 2 <= 24;
输出:
原变量:
3.75
0.75
松弛变量:
0.0
0.0
此时目标函数有极大值:8.25
注:在各个填写数值的地方也可以填写一个表达式,该应用会先用计算器功能计算出数值再代入求解。
往往在实际问题里要求的不是连续的线性规划问题,而是离散的整数规划问题。该软件在线性规划功能里可以计算整数规划,只需要在线性规划最后加上有整数限制的变量就可以了。
输入格式为:
线性规划问题的输入
int: <第1个有整数限制的变量下标>, <第2个有整数限制的变量下标>, ..., <第k个有整数限制的变量下标>;
例如要计算:
max z = 3*x1 + 2*x2
s.t.
2*x1 + 3*x2 <= 14
x1 + 0.5*x2 <= 4.5
x1, x2 >= 0
x2 为整数
则输入:
max: 3, 2;
2, 3 <= 14;
1, 0.5 <= 4.5;
int: 2;
输出:
原变量:
3.5
2.0
松弛变量:
1.0
0.0
0.0
此时目标函数有极大值:14.5
进入方法:打开应用后点击“函数”按钮。
该应用可以画绝大多数一元函数,计算器的所有符号和函数在画函数功能里都支持。可以用单指移动图像,可以用双指缩放图像。
在输入框输入了函数以后,点击“画”按钮即可在上方图片框画出函数。
输入:y=sin(x)
输出:在上方图片框画出y=sin(x)的函数图像
输入:sin(x)
输出:在上方图片框画出y=sin(x)的函数图像
输入:x=sin(y)
输出:在上方图片框画出x=sin(y)的函数图像
可以用分号分隔各个函数,即可以同时画多个函数。
输入:
y=sin(x);
x=y^2+1
输出:在上方图片框同时画出y=sin(x)和x=y^2+1的函数图像
可以用逗号表示画出该函数图像时所要满足的条件,该条件非0时画,该条件为0时不画。
输入:y=sin(x), x>0
输出:画出y=sin(x)在x>0时的函数图像
输入:y=x^2, -2<x & x<3
输出:画出y=x^2在-2<x<3时的函数图像
输入:x=cos(y), abs(y)<1
输出:画出x=cos(y)在y的绝对值小于1时的函数图像
输入:y=tan(x), x>1 | x<0
输出:画出y=tan(x)在x>1或x<0时的函数图像
亦可以用XXX, 0;来写注释,例如:
输入:
y=sin(x);
画出y=sin(x)的函数图像, 0;
x=y^2
输出:画出y=sin(x)和x=y^2的函数图像
但是要注意,注释里不能出现英文的逗号。
该应用画函数功能中支持使用宏替换功能,可以把常出现的内容放到一个符号里。
输入:
f=sin(x)#
y=f^2+f+1
输出:画出y=(sin(x))^2+(sin(x))+1函数图像
输入:
f=sin(x);
g=cos(x)
#
y=f+g
输出:画出y=(sin(x))+(cos(x))函数图像
输入:
st=abs(x*n%1)<w;
n=10;
w=0.5
#
注:st为虚线条件,n控制虚线疏密,n越大越密集,w控制虚化程度,w取值范围是(0, 1),w越接近0越虚, 0;
y=sin(x), st
输出:画出y=sin(x)虚线
注:除了函数以外,其他的功能也都可以使用宏替换。
进入方法:进入画函数功能后点击“插值法”按钮。 该应用可以实现用手点击屏幕空白处添加点,点击点删除该点,然后实时画出插值函数并在下方编辑框输出该函数的解析式。 如果想在插入点时事先有一个对照函数,可以先在画函数功能里画一个函数,然后再进入插值法功能。
进入插值法界面后,第一步,先点击“开始”按钮,即可启动算法。算法启动后,下方会有一个“标记”勾选框。勾选标记后,点击图片框空白处可以添加点,点击图片框中红色的点可以删除该点;在不勾选标记时,可以单指移动,双指缩放。
注:在生成表达式后,如果人为地把表达式的 "y=" 改成 "x=" 继续添加(删除)点或移动(缩放)图像,表达式和图像将变成
$x=a_0+a_1y^1+a_2y^2+...+a_{n-1}y^{n-1}$ 的形式,其中n为点数。
进入方法:打开应用后点击“方程”按钮。 该应用支持使用计算器功能的所有符号和函数画二元方程。
输入:
17*x^2-16*abs(x)*y+17*y^2+150/abs(5*x+sin(5*y))=15^2
输出:一个图像为心碎的方程,画出该图像可能需要一点时间,要注意缩放才能看到全貌