龙格库塔方法在实际生活中的应用(数值计算Java)
- 提出实际问题
应用于刑事侦查中死亡时间的鉴定,最近一直在看一些经典的悬疑片,里面都会有警察来判断死者的死亡时间,就特别好奇是什么原理,去了解了一下,判断死亡时间是根据牛顿冷却定律推算出来的,那么我就打算用数值分析的方法来实现一下。
- 基本思想或原理
牛顿冷却定律运用了常微分方程的知识,牛顿冷却定律在实际生活中可以解决好多实际问题。牛顿冷却定律的内容是:物体在空气中冷却的速度与物体温度和空气温度之差成正比。
人体体温受大脑中枢神经调节,人死亡后体温调节的功能消失,尸体的温度受外界环境温度的影响。那么我们已知尸体温度变化率服从牛顿冷却定律,即尸体温度的变化率与他周围的温度差成正比。
若物体在房间里,与物体相比,房间非常大,那么我们假设房间的温度为常温,即20摄氏度。物体对房间的温度改变忽略不计。那就可以直接将牛顿冷却定律应用于刑事侦查中死亡时间的鉴定。
当谋杀发生后,尸体温度从原来的36.5摄氏度按照牛顿冷却定律开始下降。周围空气温度始终保持20摄氏度不变,三小时后,尸体温度变为33.5摄氏度。如果尸体被发现时的温度为30摄氏度,假设现在的时间是下午的五点整,那么我们就可以大概知道谋杀是什么时候发生的。由题我们可以得出相应公式:
由分离变量得:
代入初始条件,可以求得C=16.5,所以得到初值问题的解为:
因为三个小时后尸体的温度为33.5摄氏度,那么我们可以求出
- 运行环境
Idea/Java编程语言
- 程序代码
import java.util.ArrayList;
import java.util.List;
/*** @author Sun* @version 2021.2* @date 2022/5/21 10:42*/
public class Runge_Kutta {public static void main(String[] args) {List<List<Double>> result = getEstimates(0.0,36.5,0.2,40);List<Double> xi = result.get(0);List<Double> yi = result.get(1);List<Double> reals = result.get(2);List<Double> miscount = result.get(3);for (int i = 0; i < xi.size(); i++ ) {System.out.println("x"+i+"="+xi.get(i)+"\t"+"y"+i+"="+yi.get(i)+"\t"+"real="+reals.get(i)+"\t"+"mis="+miscount.get(i));}}public static List<List<Double>> getEstimates(double x0,double y0,double h,int N) {List<List<Double>> result = new ArrayList<>();List<Double> xi = new ArrayList<>();List<Double> yi = new ArrayList<>();List<Double> reals = new ArrayList<>();//精确值List<Double> miscount = new ArrayList<>();//误差 real(n)-y(n)double x1,y1,yp,yc,real,mis,K1,K2,K3,K4;for (int i = 0 ; i < N ; i++ ) {x1 = x0 + h;K1 = f(x0,y0);K2 = f(x0+h/2,y0+h*K1/2);K3 = f(x0+h/2,y0+h*K2/2);K4 = f(x1,y0+h*K3);y1 = y0 + h*(K1 + 2*K2 + 2*K3 + K4)/6;real = getReal(x0);mis = Math.abs(real - y1);xi.add(x1);yi.add(y1);reals.add(real);miscount.add(mis);x0 = x1;y0 = y1;}result.add(xi);result.add(yi);result.add(reals);result.add(miscount);return result;}private static double getReal(double x) {//精确值 报告中温度函数公式return 20+(16.5*Math.pow(2.718281,-0.06689*x));}private static double f(double x0, double y0) {//拟合出的数值解 y‘return -1*0.06689*(y0-20);}
}
- 运行过程和运行结果
- 实际问题结果
和使用高数里面的常微分方程得到的结果相同,当H=30代入温度函数中, t=7.4小时,那么我们可以判断谋杀发生的大概时间下午五点前的7.4个小时,也就是早上9时36分。
龙格库塔方法在实际生活中的应用(数值计算Java)相关推荐
- matlab:使用4阶龙格库塔方法求解常微分方程组
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...
- matlab 数值计算课 二阶微分方程-龙格库塔方法 ODE45
详见mathworks 龙格库塔方法 写成矩阵(状态方程)的形式更简洁一点(其实这两种方法结果是一样的,如果C是[1,0,0]的话,就很明显了) 例如:求系统在0-5s内的单位阶跃相应,已知传递函数: ...
- matlab:使用四阶龙格库塔方法求解微分方程组
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...
- 【Hydro】龙格-库塔方法的公式推导
一.龙格-库塔方法的公式推导 摘自<数值计算方法(MATLAB版)> 二.龙格-库塔方法在水库调洪演算的应用 一般库水面坡降很小,忽略动库容影响,近似看成静水面,水库蓄水量V只随坝前水位Z ...
- 如何用龙格库塔 方法求解 范德波振子的运动
如何用龙格库塔 方法求解 范德波振子的运动 坑,没有想好. 这是一个非常好的线索: Generalized Forced Van Der Pol Oscillator Phase Plot - fun ...
- 计算方法实验(三):四阶龙格-库塔方法
四阶Runge-Kutta数学原理 给定常微分方程初值问题 {dydx=f(x,y),a≤x≤by(a)=αh=b−aN\left\{ \begin{matrix} \frac{\text{dy}}{ ...
- 组合数学在计算机科学编码中的应用,组合数学的历史、方法及在生活中的应用...
组合数学的历史.方法及在生活中的应用摘要:组合数学从数千年前开始萌芽,经历了著名的幻方问题和杨辉三角,直到莱布尼茨正式提出这一科学门类.组合数学也称为组合分析或者组合学. 简单地说, 组合数学是&qu ...
- 用四阶龙格-库塔方法求微分方程组
最近一段时间再忙期末考试,小学期课程设计的东西,没怎么更新博客.... 更新一个用四阶龙格库塔方法求解脉冲微分方程,题目来源是一篇论文<Impulsive control of projecti ...
- matlab:使用4阶龙格库塔方法求微分方程组的值
参考书目:<数值分析(matlab版)> 作者:周璐 翻译 %调用龙格库塔方法求解微分方程组,P399,9.7 微分方程组 function [t,z] = my_rk4b(f, t0, ...
- 龙格-库塔方法学习笔记
1.龙格-库塔法简介 龙格-库塔法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程. 由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂. 在各种 ...
最新文章
- iPhone曝严重漏洞,用户接听FaceTime前或被“监听”!
- 结果方程模型(SEM)的理论和基本实现过程
- java字典序列化_Java对象序列化,Serialize Java Data Object,音标,读音,翻译,英文例句,英语词典...
- 4月13日学习笔记——jQuery动画
- 【arduino】arduino代码运行时间测试函数,代码性能运行时间测试方法
- android自定义图片文本,Android 实现文字与图片的混排
- secureCRT配置ssh -x
- Uncaught SyntaxError: Invalid shorthand property initializer
- linux下创建文件没有权限,分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决...
- .net调用c++方法时如何释放c++中分配的内存_C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)...
- 前端学习(1877)vue之电商管理系统电商系统之头部布局
- c++程序设计中多态与虚函数知识点
- 计算机视觉论文-2021-06-21
- 基于Spring Security的认证授权_连接数据库认证_Spring Security OAuth2.0认证授权---springcloud工作笔记128
- 利用 Google Chart API 生成二维码大小不一致
- 三元运算符最终结果的数据类型
- 为什么手机显示系统服务器异常退出游戏,为什么现在进入游戏会提示服务期异常...
- 2进制转16进制c语言库函数,单片机 avr c语言 二进制 十进制 十六进制 快速转换...
- 产品生命周期管理展望
- 记录你生活的点滴,体会分享的快乐