用java写分段函数_使用Java将分段函数转换为CSV文件

这似乎有用 - 有点。无论如何,这可能是一个好的开始。

public class CSVFun {

// Where to start the scan of the function.

static final double Start = 0.0;

// End of scan.

static final double End = 10000.0;

// Fine enough to detect a change in the function.

static final double BigStep = 0.1;

// Finest resolution.

static final double SmallStep = 0.000000001;

// Work out some csv for a function.

private static void csv(F f) {

System.out.println("Function: " + f);

// Start at 0.

double t = Start;

double ft = f.f(t);

System.out.println(t + "," + ft);

while (t < End) {

// Walk to the end.

double step = BigStep;

// Find a break point.

while (t < End && f.f(t) == ft) {

t += step;

}

if (t < End) {

// Back one.

t -= step;

// Zoom in on the transition point.

while (step > SmallStep) {

// Go smaller.

step /= 10;

// Walk forward.

while (t < End && f.f(t) == ft) {

t += step;

}

// Back one.

t -= step;

}

// Before

System.out.println(t + "," + ft);

// One more forward.

t += step;

}

// Print.

if (f.f(t) != ft) {

ft = f.f(t);

System.out.println(t + "," + ft);

}

}

}

// Tests the process with the sample functions below.

public static void main(String[] args) {

try {

for (F f : F.values()) {

csv(f);

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

// The sample functions - Encoded in Java

enum F {

A {

@Override

double f(double t) {

if (t < 60) {

return (0.1);

}

if (t > 66.0115) {

return (0.1);

}

return 1;

}

},

B {

@Override

double f(double t) {

if (t > 0.5) {

return 2;

}

return 3;

}

},

C {

@Override

double f(double t) {

if (t >= 0.5) {

return 2;

}

return 3;

}

},

D {

@Override

double f(double t) {

if (t < 0.5) {

return 2;

}

return 3;

}

},

E {

@Override

double f(double t) {

if (t <= 0.5) {

return 2;

}

return 3;

}

},

F {

@Override

double f(double t) {

if ((t >= 3600) & (t <= 3660)) {

return 25;

}

return 0;

}

},;

abstract double f(double t);

}

}输出:

Function: A

0.0,0.1

59.999999999000565,0.1

60.00000000000056,1.0

66.01149999900045,1.0

66.01150000000045,0.1

Function: B

0.0,3.0

0.49999999999999994,3.0

0.500000001,2.0

Function: C

0.0,3.0

0.49999999999999983,3.0

0.5000000009999999,2.0

Function: D

0.0,2.0

0.49999999999999983,2.0

0.5000000009999999,3.0

Function: E

0.0,2.0

0.49999999999999994,2.0

0.500000001,3.0

Function: F

0.0,0.0

3599.9999999998213,0.0

3600.0000000008213,25.0

3659.999999999771,25.0

3660.000000000771,0.0我觉得这很接近。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值