IKExpressionV2.0简易表达式解析器使用说明

【java表达式引擎】四、高性能、轻量级的AviatorScript 高性能、轻量级的AviatorScript 阅读详情
 转自: http://linliangyi2007.iteye.com/blog/337069
IKExpressionV2.0简易表达式解析器使用说明


目录
  • 1. IK表达式介绍(IK Expression Introduction)
  • 2. 快速入门(Quick Start)
  • 3. 表达式公式规范(Expression Formula Specification)
  • 4. 高级特性(Advance)


注:V2.1.2已发布,请参考 http://linliangyi2007.iteye.com/blog/481407

1. IK表达式介绍(IK Expression Introduction)
IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。

IK ExpressionV2.0不依赖于任何第三方的java库。它做为一个简单的jar,可以集成于任意的Java应用中。这包括了JavaEE应用(基于应用服务器的), Java桌面应用以及Java WebStart方式的应用。

IK Expression最初诞生的原因是为了能增强工作流引擎,如jBPM等对流程配置的灵活度。使其能在流程运行期获得同配置期一样灵活地对执行逻辑条件进行变更。经过扩展后的IK Expression还可以适用于各种常规业务系统的动态条件配置,如需要图形化配置应用的场合,或是模拟Excel电子表格的公式运算的场景。

同EL和BeanScript不同,IK Expression的设计目标是面向最终用户的,因此它被设计成语法简单(像数学算式),通俗易懂(支持中文变量及函数名)但功能有限的解析引擎。如果你需要一个功能强大的表达式引擎,也许IK Expression并不是最好的选择。

1.1 概要(OverView)
IK Expression是一个采用逆波兰式算法结合指针栈优化的公式解析引擎,它由表达式编译、、表达式执行、变量容器、以及函数配置管理四部分构成。它具有以下特点:

  • 支持基础运算符+ - × / % 逻辑运算符! && || 三元运算符?:以及特有的#集合运算。支持括号优先级,对&&,||,?:有短路优化处理。
  • 支持函数执行,函数扩展,支持变量定义。
  • 完整Jar包大小90K,API简单易学,超轻量级,无第三方类库依赖。


IK Expression 组件结构图



1.2 升级变更(Changes Log)
Version2.0.2的变更:
  • 修订了自定义函数返回类型为void时,表达式校验会抛出异常的BUG。对于void返回类型,IK-Expression将当作null类型进行计算。


Version2.0.1的变更:
  • 添加了对表达式的折行书写的支持(即对表达式中出现CRLF的支持),方便于用户编写逻辑复杂的长表达式,增强表达式可阅读性。


Version2.0.0相对于V1.0的变更:
  • 增加了“?:“三元操作符。
  • 增强了“+“操作符,支持对null型,Date型,Boolean型的连接操作。
  • 增加了自定义函数扩展,支持配置方式扩展函数和API编码方式扩展函数。
  • 增加了函数别名映射功能,可配置中文函数别名。
  • 增加了函数参数和返回值对java Object类型的支持。
  • 优化“||”、“&&”、“?:“操作符,实现相应逻辑的短路处理。
  • 修订了Date类型的==比较逻辑。原有逻辑判定时间差小于1秒为相等,现在更正为精确到秒。
  • 修订了==比较逻辑对数值类型运算的bug,使其支持Integer,Float,Long,Double类型的混合比较,以及当这四种类型混合比较时,其中一个参数为null的情况。
  • 修改了V1.0中类Variable的方法createVariable的参数。
  • 废除了V1.0中的“:“操作符(使用“?:“三元操作符代替)
  • 废除了V1.0中类ExpressionEvaluator的compileExpression方法。



2. 快速入门(Quick Start)
2.1 下载(Downloadables Overview)

GoogleCode开源项目: http://code.google.com/p/ik-expression/
GoogleCode SVN下载: http://ik-expression.googlecode.com/svn/trunk/


2.2 安装部署
IK Expression 的安装部署十分简单,安装包包含:
  • 1. 使用说明文档(即本文档)
  • 2. IKExpression2.0.jar
  • 3. functionConfig.xml
其中,IKExpression2.0.jar部署于项目的lib目录中;functionConfig.xml(函数定义配置)文件放置在代码根目录(对于web项目,通常是WEB-INF/classes目录,同hibernate、log4j等配置文件相同)下即可。



2.3 API简易教程(API Tutorial)

代码样例HelloWorld

Java代码 
  1. /**  
  2.  * Hello World Example  
  3.  * @param args  
  4.  */  
  5. public static void main(String[] args){   
  6.     if(args.length == 0){   
  7.         args = new String[1];   
  8.         args[0] = "IK Expression";   
  9.     }   
  10.     //定义表达式   
  11.     String expression = "\"Hello World \" + 用户名";   
  12.     //给表达式中的变量 "用户名" 付上下文的值   
  13.     List<Variable> variables = new ArrayList<Variable>();   
  14.     variables.add(Variable.createVariable("用户名", args[0]));   
  15.     //执行表达式   
  16.     Object result = ExpressionEvaluator.evaluate(expression, variables);   
  17.     System.out.println("Result = " + result);          
  18. }   
/**
 * Hello World Example
 * @param args
 */
public static void main(String[] args){
	if(args.length == 0){
		args = new String[1];
		args[0] = "IK Expression";
	}
	//定义表达式
	String expression = "\"Hello World \" + 用户名";
	//给表达式中的变量 "用户名" 付上下文的值
	List<Variable> variables = new ArrayList<Variable>();
	variables.add(Variable.createVariable("用户名", args[0]));
	//执行表达式
	Object result = ExpressionEvaluator.evaluate(expression, variables);
	System.out.println("Result = " + result);		
} 

执行结果: Hello World IK Expression

API说明
*类org.wltea.expression.ExpressionEvaluator

方法1:
public static Object evaluate(String expression, Collection<Variable> variables)
说明:
传入表达式和表达式上下文的变量,执行表达式返回结果
参数1 :String expression, 要传入执行的表达式
参数2 :Collection<Variable> variables 表达式上下文的变量集合(详细请看类org.wltea.expression.datameta.Variable的说明)。
返回值:表达式执行结果,可能是以下类型的java对象中的一种:
Int、Long、Float、Double、Boolean、String、Date、List、Object。


方法2:
public static Object evaluate(String expression)
说明:
对方法1的重载,执行简单的没有变量的表达式。请参考方法1说明.

*类org.wltea.expression.datameta.Variable
       该类是用来表示表达式的上下文变量的,上面的例子中用到了别名为 “用户名”的上下文变量,这是也是表达式最有用的地方。例如,在jBPM的流程定义中,我们需要定义一个报销审批流程中,用来决定流程分支走向的表达式:   
Java代码
(申请金额 > 10000)?“总经理审批”:“部门经理审批”  
(申请金额 > 10000)?“总经理审批”:“部门经理审批”

这里需要定义一个别名为 “申请金额“变量。变量通过evaluate(String expression, Collection<Variable> variables)方法中的variables参数传入表达式中。而Variable类型变量的构造十分的简单,它是标准的POJO。


方法1:
public static Variable createVariable(String varName , Object varValue)
说明:
根据参数别名和参数值,构造 Variable 实例
参数1 :String varName, 参数的别名,可以是中文别名
参数2 :Object varValue,参数的值 , 可以是下类型的java对象中的一种:
Int、Long、Float、Double、Boolean、String、Date、List、Object。
返回值:org.wltea.expression.datameta.Variable类的实例

方法2:(直接使用构造函数)
public Variable(String varName , DataType varDataType , Object varValue)
说明:
根据指定的参数类型、参数别名和参数值,构造 Variable 实例
参数1 :String varName, 参数的别名,可以是中文别名
参数2 :DataType varDataType, 变量类型,它是
org.wltea.expression.datameta. BaseDataMeta.DataType枚举类型,包括的枚举值有:
  • //NULL类型 DATATYPE_NULL ,
  • //字符窜 DATATYPE_STRING ,
  • //布尔类 DATATYPE_BOOLEAN ,
  • //整型数 DATATYPE_INT ,
  • //长整型数 DATATYPE_LONG ,
  • //浮点数 DATATYPE_FLOAT ,
  • //双精度浮点 DATATYPE_DOUBLE ,
  • //日期时间 DATATYPE_DATE ,
  • //集合对象 DATATYPE_LIST,
  • //通用对象类型         DATATYPE_OBJECT,

参数3 :Object varValue,参数的值 , 可以是下类型的java对象中的一种:
Int、Long、Float、Double、Boolean、String、Date、List、Object。
返回值:org.wltea.expression.datameta.Variable类的实例



3. 表达式公式规范(Expression Formula Specification)
3.1 数据类型(Types, Values, and Variables)
a) 数字型 :
i. 整形 integer   : -2321 , 34234
ii. 长整型 long    :3245235235L
iii. 单精度浮点 float : 342.555F
iv. 双精度浮点 double: 234234.3423
b) 字符型:“a-zA-Z012456789”
c) 布尔型:true、false
d) 日期时间型:[2008-08-08] 或 [2009-01-01 12:33:14]
e) 扩展类型:List对象集合 (该类型不支持表达式字面定义,由操作符或函数运算结果生成)
f) 通用对象:Object类型 (该类型不支持表达式字面定义,由操作符或函数运算结果生成)

3.2 运算符(Operators)



3.3 分割符(Separators)
  • a) 括号 "("  ")" —— 标识优先级
  • b) 逗号   "," —— 分隔函数的参数
  • c) 方括号 "["  "]" —— 标识日期型常量
  • d) 双引号 """ —— 标识字符型常量
  • e) 美元号   "$" —— 函数标识前缀
  • f) 转义符   "\" —— 字符串转义,支持\\ , \”, \r , \n , \t


3.4 内部函数(Inner Functions)
内置函数是目前解析器已经实现的一些非常简单、实用的函数


3.5 语法约束(Lexical Structure)
  • 变量命名遵循java变量命名规范(如,不能以数字打头,不能用系统操作符打头等)。
  • 函数声明以“$”符号打头,自定义函数命名遵循java方法命名规范。
  • 日期型常量使用“[]”符号界定,格式为 [yyyy-MM-dd 24h-mm-ss],不支持毫秒。
  • 用户自定义函数别名不能重复。(详细请参阅本文4.1章节)
  • 用户自定义函数的参数和返回值类型限定于3.1章节描述的数据类型。(详细请参阅本文4.1章节)


3.6 公式样例(Formula Example)
1. +、- 、* 、/ 、%(取模) 常规的算术运算,支持括号优先级 :
如:常见的OA中用于年休假工资计算公式
3000 / 21.5 *(12 - 转正月份)/ 2 
其中,“转正月份”可以是上下文变量

2. 不同数据类型的字符串连接 :
“ABC”+(123+10) 运算结果 “ABC133”
“ABC”+ 123 + 10 运算结果“ABC12310”
“[2009-08-08] + false + 123 + \"a String\" + null”
运算结果 “2009-08-08 00:00:00false123a String” ( PS:忽略 null型变量)

3. > >= < <= == !=逻辑比较运算,返回布尔值 :
  • 3-1.数值大小比较 : 1234>223 运算结果 true
  • 3-2.字符大小比较 : “1234”>“223” 运算结果 fasle
  • 3-3.日期大小比较 : [2008-12-23] >= [2008-08-08] —— true
  • 3-4.同null的 == 与 != 比较 : 申请人!=null  (其中,“申请人”为执行上下文的变量)


4. 逻辑与、逻辑或、逻辑非运算:
true  &&  $DAYEQUALS([2008-01-01] , [2008-11-01]) ——false
true  ||  $DAYEQUALS([2008-01-01] , [2008-11-01]) —— true
true  && !$DAYEQUALS([2008-01-01] , [2008-11-01]) —— true

5. 结果连接运算“#”:
1000/10  #  [2008-12-23]>$SYSDATE()  # “ABC”+123
运算结果 包含 100 , false , “ABC123”三种不同类型对象的List

6. 函数与操作符混合、嵌套调用,如:
Java代码
$DAYEQUALS(   
  1.     $CALCDATE(   
  2.         $SYSDATE() , 0 , 0 ,    
  3.         (8+11-5*(6/3)) * (2- 59 % 7) ,   
  4.         0 ,0,0 ),   
  5.     [2009-10-01]   
  6. )    
$DAYEQUALS(
 	$CALCDATE(
 	 	$SYSDATE() , 0 , 0 , 
 	 	(8+11-5*(6/3)) * (2- 59 % 7) ,
 	 	0 ,0,0 ),
 	[2009-10-01]
)  

运算结果 false

4. 高级特性(Advance)
4.1 函数定制(Functions Customize)
      IK-Expression最吸引人的特性莫过于它允许你以非常简单的方式扩展你的自定义函数。IK-Expression带有一个xml配置文件functionConfig.xml。在使用IK-Expression时,该配置文件应放置于class的根目录中(如同spring和hibernate等的配置文件一样)。配置文件内部格式如下:
functionConfig.xml
Xml代码
<?xml version="1.0" encoding="UTF-8"?>  
  1. <function-configuration>  
  2.     <!-- 系统函数默认配置 -->  
  3.     <bean class="org.wltea.expression.function.SystemFunctions">  
  4.         <function name="CONTAINS" method="contains">  
  5.             <parameter-type>java.lang.String</parameter-type>  
  6.             <parameter-type>java.lang.String</parameter-type>  
  7.         </function>  
  8.         <function name="STARTSWITH" method="startsWith">  
  9.             <parameter-type>java.lang.String</parameter-type>  
  10.             <parameter-type>java.lang.String</parameter-type>  
  11.         </function>  
  12.         <function name="ENDSWITH" method="endsWith">  
  13.             <parameter-type>java.lang.String</parameter-type>  
  14.             <parameter-type>java.lang.String</parameter-type>  
  15.         </function>  
  16.         <function name="CALCDATE" method="calcDate">  
  17.             <parameter-type>java.util.Date</parameter-type>  
  18.             <parameter-type>int</parameter-type>  
  19.             <parameter-type>int</parameter-type>  
  20.             <parameter-type>int</parameter-type>  
  21.             <parameter-type>int</parameter-type>  
  22.             <parameter-type>int</parameter-type>  
  23.             <parameter-type>int</parameter-type>  
  24.         </function>  
  25.         <function name="SYSDATE" method="sysDate" />  
  26.         <function name="DAYEQUALS" method="dayEquals">  
  27.             <parameter-type>java.util.Date</parameter-type>  
  28.             <parameter-type>java.util.Date</parameter-type>  
  29.         </function>  
  30.     </bean>  
  31.        
  32.     <!-- 用户函数配置  ,请在这里定制您自己的函数-->  
  33.   
  34. </function-configuration>  

配置文件中默认配置了系统内部函数定义( 在没有绝对必要的原因下,不建议修改系统默认函数配置)。在默认配置的下方,用户可以定义自己的函数,格式如下:
用户自定义函数配置
Xml代码
<bean class="org.wltea.expression.test.TestFunctions">  
  1. <constructor-args>  
  2.     <constructor-arg type="java.lang.Integer">123</constructor-arg>  
  3.     <constructor-arg type="java.lang.String">aa</constructor-arg>  
  4. </constructor-args>  
  5. <function name="问好" method="sayHello">  
  6.     <parameter-type>java.lang.String</parameter-type>  
  7. </function>  
  8. </bean>  


这里自定义了一个名称为“ 问好”的函数,它有一个 String类型的参数。该函数映射对应于 org.wltea.expression.test.TestFunctions类的 sayHello方法,而类 org.wltea.expression.test.TestFunctions具有一个构造函数,构造函数带有 Integer型和 String型的参数。配置中给出了构造函数的初始化参数“ 123”和“aa”。通过上述定义,用户就可以在表达式中使用该函数,如:
   $问好(当前用户) , 其中“当前用户”为表达式的上下文变量。
上述例子直观的展示了用户函数自定义的过程。下面,我们将系统的了解一下IK-Expression的函数扩展定义规则和约束:

1. 在IK-Expression中,函数直接对应于java的一个类的一个明确的方法。如:$CONTAINS对应org.wltea.expression.function.SystemFunctions类的contains方法;

2. 所有的函数定义前,必须先定义对应的java类。如果该类使用带参数的构造函数,则必须提供明确的构造参数,如:
Xml代码
<bean class="org.wltea.expression.test.TestFunctions">  
  1.     <constructor-args>  
  2.         <constructor-arg type="java.lang.Integer">123</constructor-arg>  
  3.         <constructor-arg type="java.lang.String">aa</constructor-arg>  
  4.     </constructor-args>  
  5.     <function name="问好" method="sayHello">  
  6.      <parameter-type>java.lang.String</parameter-type>  
  7.     </function>  
  8. </bean>  


3. java类的加载和实例化在初始化阶段一次性完成。目前IK-Expression仅支持单例形式的加载,即对一个java类仅实例化一次。

4. 定义函数时,必须明确定义函数对应java方法,以及java方法的参数类型和顺序
,如:
Xml代码
<function name="CONTAINS" method="contains">  
  1.     <parameter-type>java.lang.String</parameter-type>  
  2.     <parameter-type>java.lang.String</parameter-type>  
  3. </function>  

你可以使用不同的函数名(英文的和中文的),对应相同的java方法,但对java中的方法重载必须使用不同的函数名对应(即,IK-Expression不支持函数名重载)
5. 函数的参数和返回值只能是IK-Expression支持的数据类型(请参考3.1数据类型 章节).
6. 为了增加灵活性,IK-Expression给出了一个通过编码方式添加自定义函数的static方法。

函数扩展API说明
*类org.wltea.expression.function.FunctionLoader

方法1:
public static void addFunction(String functionName, Object instance, Method method)
参数1 :
String functionName, 要定义的函数名称(中英文皆可)。
参数2 :Object instance 函数要映射的java 类的实例。
参数3 :Method method 函数要映射的java 类的方法对象。
全文终)


下载地址:http://code.google.com/p/ik-expression/downloads/list


深度实现 - EL表达式解析引擎 + 可配置通用组件:性能强、可处理各类表达式内置多种函数、对象且可扩展 - Tmm-EL 本引擎为Java版本(后面考虑做其他语言版本),主要功能有: 常用表达式解析:数学表达式(加减乘除模)、位表达式(与或非异或、左移、右移)、逻辑表达式、赋值表达式 类注册器(注册后可以表达式中添加常用对象方法,如StringUtil,如别名为SU,表达式中可用SU.isEmpty....),类注册器可扩展 函数注册器(与类注册器相似,注册函数):解析器内置常用函数库,如len/size/floor/substring等,函数可扩展 常用类型转换:使用双冒号进行转换,如a::int,即将a强制转换为int类型 阅读详情

相关推荐

【IKExpression】IKExpressionV2.0简易表达式解析器

https://www.iteye.com/blog/linliangyi2007-337069

九师兄 855

IKExpression简易表达式解析器详细讲解

1. IK表达式介绍(IK Expression Introduction) IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0不依赖于任何第三方的java库。它做为一个简单的jar,可以集成于任意的Java应用中。这包括了JavaEE应用(基于应用服务器的), Java桌面应用以及Java WebStart方式的应用。 IK

qq_36250202的博客 4970

IK Expression(表达式引擎)

IK Expression 是一个开源的(OpenSource),可扩展的(Extensible), 基于java 语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行 工具包。它是一个采用逆波兰式算法结合指针栈优化的公式解析引擎,由表达式编译、表达式执行、变量容器、以及函数配置管理四部分构成。 在实际项目应用中,我们可以将业务规则公式化,然后用IK表达式来解析,这样不管以后业务规则怎么变,我们只需要配置或修改相应的公式而已,真正做到了以不变应万变。

【表达式引擎】简单高效的轻量级Java表达式引擎:Aviator

在见识过以上两种使用方式后,Aviator还支持以自定义函数的形式来执行表达式// 将自定义函数注册到Aviator中 AviatorEvaluator . addFunction(new CustomFunction());// 执行 Long result =(Long) AviatorEvaluator . execute("customFunc(50,20)");// 输出结果 System . out . println(result);} }

Bummon的学习随笔 6628

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了基于YOLOv11的YOLOFuse多模态融合技术,重点探讨了RGB与红外线(IR)协同检测的实现原理与实战应用。文章详细介绍了双流架构与数据级、特征级、决策级三种融合策略,并通过实战案例展示了其在低光照、复杂环境下显著提升检测精度与鲁棒性的优势,为全天候安防、自动驾驶等场景提供了有效的技术解决方案。

weixin_29041195的博客 649

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1473

分享开源表达式解析器IK-Expression2.0

[size=xx-large][b][align=center]IKExpressionV2.0简易表达式解析器使用说明[/align][/b][/size] [size=large][b]目录[/b][/size] [list] [*][size=large]1. IK表达式介绍(IK Expression Introduction)[/size] [*][size=large]2....

linliangyi2006的专栏 979

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1443

IKexpression简介

oIKExpressionV2.0简易表达式解析器 使用说明 目录 1. IK表达式介绍(IKExpression Introduction)... 2 2. 快速入门(QuickStart)... 5 3. 表达式公式规范(ExpressionFormula Specification)... 8 4. 高级特性(Advance)... 15   1.

田维常 1万+

RK3588部署YOLO模型 包含模型量化+npu轻量化+ubuntu+RGA图像加速和多线程模型加速 包源码

本专栏为深度学习部署全栈学习体系,包含68篇由浅入深的教程,专为零基础学习者设计。内容涵盖TensorRT与RK3588平台部署技术,包含Jetson系列和RK系列硬件部署实战,采用"理论+源码+实战"三位一体的教学模式。学习路径从基础环境搭建到模型优化、容器化部署、多硬件平台适配,最终掌握工业级AI部署能力。特色包括C++基础教学、Docker容器化、INT8量化、多线程优化等核心技术,并附带YOLOv5、人脸检测、车牌识别等多个实战项目源码。适合算法工程师转部署方向、嵌入式开发者及对

FJN110的博客 3730

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

【JAVA】Java实现逻辑表达式解析与运算

java实现逻辑表达式的解析${STUDENT_NAME =张三 && (AGE > 18 || GRADE

DAIJAIAZHEN的博客 1694

YOLO26模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了YOLO26模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 239

java逻辑表达式解析框架_java – 寻找项目建议.解析逻辑表达式

如果您被允许使用像ANTLR这样的解析器生成器工具,那么您可以从这里开始.简单逻辑语言的语法可能如下所示:grammar Logic;parse: expression EOF;expression: implication;implication: or ('->' or)*;or: and ('||' and)*;and: not ('&&' not)*;not...

weixin_36480510的博客 1151

pnpm 卸载教程:彻底移除 pnpm 及全局缓存的方法

卸载 pnpm = 全局包 → CLI → 环境变量 → store 缓存只要按这个顺序来,基本不会留下任何坑。如果你后面还打算重新安装 pnpm / 切换 npm、yarn / 多包管理器共存,这些细节反而更重要,环境一旦干净,后续问题会少很多。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 923

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

IK表达式使用心得(IKExpression)

前提:我用的jar包是:ik-expression-2.1.2.jar,一定要注意版本不同的jar,对应的xml的名称也不一样!!!! 1.创建xml:名称为:IKExpression.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <function-configuration> <!-- 系统函数默认配...

软茶室 6791

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 开源 表达式解析 类库

java表达式解析 开源类库

weixin_42231601的博客 1440

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IKExpressionV2.1.2快速入门

1、前言 网上关于IKExpression的资料也有不少,不过基本都是V2.0的,内容基本一致,该文章不会写过多的理论性的东东,主要以示例来介绍IKExpression如何使用!也当时本人学习的笔记,方便今后翻阅。 2、如何使用 2.1  语法 变量名遵循Java规范函数声明以$打头【$SYSDATE()】日期常量以“[]”符号界定,不支持毫秒【[2016-05-22 16:40:

cherry 的专栏 6266

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java字符串应用之表达式解析器

一、表达式的组成    1、数字    2、运算符:+ - / * ^ % =    3、圆括号    4、变量二、运算符优先级    由高到低分别为:+-(正负号)、^、*/%、+-、=    优先级相等的运算符按照从左到右的顺序计算三、关键技术点    1、确定运算的优先级,从高到低分别为:原子元素表达式,包括数字和变量;括号表达式;一元表达式,取数的负数;指数表达式;乘、除、取模表达式;加、

上善若水 6529

表达式解析器 IKExpression

IK Expression 开源,可扩展基于java的表达式解析器。并且不依赖与其他jar,仅作为单独的jar提供功能。 使用场景: 场景1:当接受到字符串 "(a > 2 || b 2"时,作为规则,传递过来一组map数据,a = 3 , b = 3 , c = 3需要验证表达式的boolean值。  import java.util.ArrayList; import java

那一年的雪花飘落,梅花开枝头。 4636

JAVA逻辑运算符精文详解----&、|、!、&&、||、……

System.out.println("请输入第一个数字:");System.out.println("请输入第二个数字:");System.out.println("请输入第一个数字:");System.out.println("请输入第二个数字:");System.out.println("请输入第一个数字:");System.out.println("请输入第二个数字:");System.out.println("请输入第一个数字:");

2301_77565910的博客 4846

Java 表达式引擎

我们在业务系统中引入规则引擎似乎就能解决这个问题,规则引擎的一个好处就是可以使业务规则和业务代码分离,从而降低维护难度。几种常见表达式引擎: AviatorScript 、MVEL 、OGNL 、SpEL 、QLExpress 、JEXL 、JUEL。IK Expression 是一个开源的(OpenSource),可扩展的(Extensible),基于 java 语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。

ejinxian的专栏 1204

Java进击框架:Spring-表达式(三)

本章节主要介绍,Spring的表达式。

码农的艺术 2019
上一篇: struts2核心工作流程与原理
下一篇: 采访IK Analyzer 中文分词器开源项目作者林良益(十三)
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值