900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【译】Jep文档(4)——数据类型(Data Type)

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

时间:2019-02-25 04:04:39

相关推荐

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

数据类型

在标准模式中,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 valuea[1]// evaluates as 2a[3]// evaluates as 10a + [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, 4max([6,4,7,8])// minimum value, 8avg([6,4,7,8])// average value, 2.5vsum([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 elementObject 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 arrayObject[] 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.plex类才能过操作表达式中的复数值。

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

(1+2*i)^3e^(-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中。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。