java 微分方程求解_Java中的微分方程

时间序列微分方程可以通过取dt =小数,并使用几个numerical integration techniques中的一个来数值模拟。 Euler's method或Runge-Kutta。欧拉的方法可能是原始的,但它适用于某些方程式,并且它很简单,你可以尝试一下。例如。:

S'(t) = - l(t) * S(t)

I'(t) = l(t) * S(t) - g(t) * I(t)

R'(t) = g(t) * I(t)

int N = 100;

double[] S = new double[N+1];

double[] I = new double[N+1];

double[] R = new double[N+1];

S[0] = /* initial value */

I[0] = /* initial value */

R[0] = /* initial value */

double dt = total_time / N;

for (int i = 0; i < 100; ++i)

{

double t = i*dt;

double l = /* compute l here */

double g = /* compute g here */

/* calculate derivatives */

double dSdt = - I[i] * S[i];

double dIdt = I[i] * S[i] - g * I[i];

double dRdt = g * I[i];

/* now integrate using Euler */

S[i+1] = S[i] + dSdt * dt;

I[i+1] = I[i] + dIdt * dt;

R[i+1] = R[i] + dRdt * dt;

}困难的部分是弄清楚要使用多少步骤。您应该阅读我链接到的其中一篇文章。更复杂的微分方程求解器使用可变步长,以适应每个步骤的精度/稳定性。

我实际上建议使用像R或Mathematica或MATLAB或Octave这样的数字软件,因为它们包括ODE求解器,你不需要自己解决所有问题。但是如果你需要在大型Java应用程序中执行此操作,至少首先使用数学软件进行尝试,然后了解步长是什么以及解算器的工作原理。

祝你好运!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值