Java中sin、log、tan等复杂数学运算怎么搞?

出处/乐字节

MXReflection,一个基于mXparser库功能的Java复杂计算框架。

还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦?

通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。

MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。

<dependency>

    <groupId>com.github.ismail-mekni</groupId>

    <artifactId>mxreflection</artifactId>

    <version>1.0.1</version>

</dependency>

dependencies {

    compile group: 'com.github.ismail-mekni', name: 'mxreflection', version: '1.0.1'

}

 那如何使用这个框架呢?

很简单,只需要两个java注释。

1、通过@Arg值,我们可以指定要在目标函数中使用的自定义参数名称。

2、@Expression注释值包含带有参数的函数表达式。

这个框架的使用其实不难,下面是两个计算案例,通过案例其实很容易理解该怎么使用此框架:

案例1:

package com.ismail.mxreflection.example;

import com.ismail.mxreflection.annotations.Arg;

import com.ismail.mxreflection.annotations.Expression;

import com.ismail.mxreflection.core.Calculator;

import com.ismail.mxreflection.factory.MXFactory;

import org.junit.Test;

public class Example1Test {

    class Example1 {

        @Arg("f1")

        String field1;

        @Arg("f2")

        int field2;

        @Expression("f1 * sin(f2) * log2(f1 + f2) + der(cos(f1), f1) * pi + int(tan(f2), f2, 0, e)")

        double field3;

    }

    @Test

public void example1Test() {

        Example1 example1 = new Example1();

        example1.field1 = "2.2";

        example1.field2 = 5;

        Calculator<Example1> calculator = MXFactory.createCalculator(Example1.class);

        calculator.calculate(example1);

        System.out.println("Field 3 result: " + example1.field3);

    }

}

Output:

Field 3 result: 2.8

Field 4 result: -2.2

Field 5 result: -2.8

Field 6 result: 0.6

Field 7 result: 3

Field 8 result: 8

MXReflection框架支持mXparser数学库中提供的数学集合如下:

Operators (+, -, *, /, #, !, ^)

Binary Relations (=, ==, =<, =>, <, >, <>, !=, ~=)

Boolean Operators (&, &&, /, ~&, ~&&, ~/, |, ||…)

Bitwise Operators (@~, @&, @^, @|, @<<, @>>)

Unary Functions (sin, cos, tan, tg, ctan, ctg, cot, sec,…)

Binary Functions (log, mod, C, Bern, Stirl1, Stirl2, …)

3-args Functions (if, chi, CHi, Chi, cHi, pUni, cUni, qUni, pNor, cNor, qNor)

Variadic Functions (iff, min, max, ConFrac, ConPol, gcd, …)

Iterated Operators (sum, prod, avg, vari, stdi, mini, maxi)

Calculus Operators (int, der, der-, der+, dern, diff, difb)

Math Constants (pi, e, [gam], [phi], [PN], [B*], [F’d], [F’a], …)

Physical Constants ([c], [G.], [g], [hP], [h-], [lP], [mP], [tP])

Astronomical Constants ([ly], [au], [pc], [kpc], [Earth-R-eq], …)

Random Variables ([Uni], [Int], [Int1], [Int2], [Int3], [Int4], …)

Metric prefixes ([%], [%%], [Y], [sept], [Z], [sext], [E], …)

Parser Symbols ((, ), ,, ;)

Units

在参数解析方面,MXReflection支持以数字内容作为参数的所有字段数据类型。您可以将所有Java类型与返回数值结果的toString实现一起使用。支持的结果字段java类型有:

Double

double

Long

long

String

BigInteger

但是要注意的是注意,对于long、long和BigInteger,MXReflection使用在注入前解析最终结果。建议确保表达式返回整数类型。

——此文章转载于乐字节

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,602评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,225评论 4 8
  • 步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和...
    dibadalu阅读 3,181评论 1 3
  • 回这一趟老家,心里多了两个疙瘩。第一是堂姐现在谈了一个有妇之夫,在她的语言中感觉,她不打算跟他有太长远的计划,这让...
    安九阅读 3,532评论 2 4