【译】Jep文档(4)——数据类型(Data Type)

翻译 2018年04月17日 17:31:20

数据类型


在标准模式中,Jep支持许多不同的数据类型,包括数字、字符串、向量(数组)和复数。数字在默认情况下由double类型表示。当然,也可以像自定义类型描述的那样,改变内置表示。

字符串(String)

可以通过使用双引号可以引入字符串,并且可以用“+”操作符将两个字符串串联起来,用关系运算符==或!=比较两个字符串。一个涉及到字符串类型的简单表达式”foo” + “bar” == “foobar”,用Jep运算后结果为true。

addVariable(String name, Object value)方法来添加一个字符串变量。如果表达式的结果是一个字符串,就可以通过调用evaluate()方法来获取它。


向量(Vectors)

向量是一个值列表,值之间用逗号隔开,并且用方括号将所有值括起来。您可以使用方括号来访问向量的元素。例如,用v[2]来获取向量v的第二个元素。

下面列出了一些涉及向量的示例表达式:

a = [2, 3, 10]      // create a variable with a vector value
a[1]                // evaluates as 2
a[3]                // evaluates as 10

a + [1, 2, 3]       // addition, evaluates as [3, 5, 13]
a - [1, 2, 3]       // subtraction, evaluates as [1, 1, 7]
[3, 4, 5]*2         // multiplication by a scalar,
                    // evaluates as [6, 8, 10]
[1,2] * [1,2]       // interpreted as a column vector times a row
                     // vector. Evaluates as [[1.0, 2.0], [2.0, 4.0]]
[4, 6, 8]/2         // division by a scalar, evaluates as [2, 3, 4]
[1,2,3].[1,2,3]     // dot product, evaluates as 14
[1,2,3]^^[1,2,3]    // cross product, evaluates as [0, 0, 0]
min([6,4,7,8])      // minimum value, 4
max([6,4,7,8])      // minimum value, 8
avg([6,4,7,8])      // average value, 2.5
vsum([6,4,7,8])     // sum of elements, 25

在后台,向量值表示成列表,特别是Vector<Object>。使用addVariable(String name, Object value)方法来添加向量(vector)变量。值参数应该是Vector类型。如果表达式的结果是一个向量,可以通过调用evaluate()方法来获得。

向量值变量的使用方法如下:

// Add the variable y with value [1.2,3.4]
jep.addVariable("y", new Vector<Object>(Arrays.asList(new Double[]{1.2,3.4})));
// Use the y[2] syntax to get a specific element
Object res = jep.evaluate(jep.parse("y[2]"));
assertEquals(3.4,res);
// calculate the vector expression y*2 
Object res2 = jep.evaluate(jep.parse("y*2"));
// The returned type will be Vector<Object>
assertTrue(res2 instanceof Vector<?>);
Vector<Object> vec = (Vector<Object>) res2;
// Convert to an array
Object[] array = vec.toArray();
assertArrayEquals(new Object[]{2.4,6.8},array);

这对于矩阵的支持是非常有限的。矩阵可以指定为嵌套的向量,如:[[1.0, 2.0], [2.0, 4.0]]。向量相乘可以得到矩阵,但矩阵乘以向量挥着矩阵相乘不能得到合理的结果。min,max,avg和vsum函数像向量一样工作,把所有的元素都折叠成一个一维数组。


复数

Jep在大多数操作和函数中支持复数。虚部 i 是标准变量表中的一部分,在使用StandardComponents时,被加入到解释器中。还包括了一组复函数,re(c),im(c),cmond(c),conj(c),complex(x, y)和polar(r, hteta)。查看Functions了解更多。需要导入com.singularsys.jep.standard.Complex类才能过操作表达式中的复数值。

通过使用虚数常数 i ,就可以在表达式中处理复数了。一些简单的复数表达式列举如下:

(1+2*i)^3
e^(-i)
re((1+2*i)^2 - (3+3*i)^2)

要从表达式中获取一个复数值,不许使用evaluate()方法,该方法会求解表达式并将结果作为复数对象返回。但是,你需要手动地将返回地的对象转换城复数类型。

在求解表达式之前可以使用addVariable(String name, double re, double im)来完成向解释器中添加复变量或常数。这个方法有三个参数:变量名(String),实部(double)和虚部(double)。


自定义类型

在多数情况下,只需要使用到Jep提供的少数几种类型(Double,Complex,Vector,String)。但假设你想要求解一个设及其他类型的表达式,你可能想让变量拥有自定义类型或用自定义类型创建数字。

你可以通过addVariable(String name, Object value)方法创建自定义类型的变量。

您可以通过设置数字工厂来确认数字是通过特殊类型创建的。例如,bigdecimal组建能够创建比double类型更精确的数字。简单实现NumberFactory接口及其createNumber(String)方法,并且调用setComponent(JepComponent)来加载你的数字工厂类到Jep中。

表达式在求解时,值会与函数包中的类一起操作,这包括操作(如AddSubtract)和函数(如SineCosine)。在不修改源代码的情况下,只有默认的类型是用这些类来处理的。所以,为了能够处理自定义的类型,需要修改这些类,或者按照自定义功能部分中描述的那样制作自己的函数类。请查看 custom functions section获取更多信息。


Jep 解析字符串数学公式

由于项目需要从服务器端传来一个计算公式,客户端根据公式计算得到值,故而学习了一下Jep。 如果是一般公式,使用Jep很容易实现计算得到结果。 String str = "6+7+8-9"; J...
  • liu149339750
  • liu149339750
  • 2013-04-10 16:05:16
  • 2418

Jep解析字符串数学公式

如果是一般公式,使用Jep很容易实现计算得到结果。 [java] view plain copy print? String str = "6+7+8-9";  Je...
  • CHS007chs
  • CHS007chs
  • 2016-06-21 17:16:06
  • 964

原生数据类型(Primitive Data Type)

原生数据类型(Primitive Data Type) int 32位 byte -128~127 short 16位 long 64位 char character ” boolean true ...
  • willchun
  • willchun
  • 2016-10-18 22:12:38
  • 407

MySQL_数据库数据类型(data type)介绍

转载链接:http://www.360sdn.com/mysql/2013/0511/78.html MySQL_数据库数据类型(data type)介绍 mysql数据库的数据类型(data ...
  • dmtnewtons
  • dmtnewtons
  • 2015-04-01 16:34:46
  • 3063

java 数据类型(data type)

一,变量命名规则 变量名由 字母,数字,下划线,美元符号($),人名币符号(¥)组成,并且不能用数字开头;二,数据类型 1,基本数据类型 byte, short,char, ...
  • wwp231
  • wwp231
  • 2016-09-04 04:47:50
  • 394

(二)数据类型(data type)

数据类型(data type)数据类型分为基本数据类型和引用数据类型。1、基本数据类型8种基本数据类型。各个基本类型之间是平等的,不存在大小和父子类的关系。它们之间的大小只是从存储数据所占用的空间来比...
  • xu514180081
  • xu514180081
  • 2017-12-09 21:32:25
  • 131

trigger(type,[data])使用

概述: 在每一个匹配的元素上触发某类事件。 这个函数也会导致浏览器同名的默认行为的执行。比如,如果用trigger()触发一个'submit',则同样会导致浏览器提交表单。如果要阻止这种默...
  • l277679541
  • l277679541
  • 2014-08-27 16:30:19
  • 374

关于powerdesigner中的data types说明

这一堆的数据类型看着真是头大,弄个表格对照一下。 Numeric data types Standard datatype DBMS-specific physical data t...
  • judyfun
  • judyfun
  • 2016-12-18 23:15:41
  • 2756

Verilog数据类型(Data Types)

Verilog数据类型(Data Types) Verilog有两组主要的数据类型:网络数据类型(Net Data Type)和寄存器数据类型(Register Data Type)。其他的...
  • QQ604666459
  • QQ604666459
  • 2017-02-27 12:42:33
  • 200

MySQL Boolean Data Type

Written by maclochlainn February 26th, 2010 at 2:32 am Somebody posted a quick question about ...
  • wakin002
  • wakin002
  • 2013-01-29 15:53:13
  • 476
收藏助手
不良信息举报
您举报文章:【译】Jep文档(4)——数据类型(Data Type)
举报原因:
原因补充:

(最多只允许输入30个字)