C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码

1 微分方程

含有导数微分的方程称为微分方程,未知函数为一元函数的微分方程称为常微分方程。

微分方程的阶数

微分方程中导数或微分的最高阶数称为微分方程的阶数。

微分方程的解

使得微分方程成立的函数称为微分方程的解。

微分方程的特解

微分方程的不含任意常数的解称为微分方程的特解。

微分方程的通解

所含相互独立的任意常数的个数与微分方程的阶数相等的微分方程的解称为微分方程的通解。

 Isaac Newton

 Adams,John Couch

 Le Verrier

牛顿(Isaac Newton)通过使用微分方程研究天体力学和机械力学,从理论上得到行星运动规律;英国天文学家亚当斯(Adams,John Couch)和法国天文学家勒维烈(Le Verrier)使用微分方程,找到了海王星。解微分问题的基本思想类似于解代数方程,要把问题中已知函数和未知函数之间的关系找出来,进而得到包含未知函数的一个或几个方程,然后使用分析的方法去求得未知函数的表达式。

 Carl Runge

Martin Wilhelm Kutta

2 龙格-库塔法

数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。

3 源代码

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public delegate double SDE_Equation(double x, double y);public static partial class Algorithm_Gallery{public static SDE_Equation dydx = null;/// <summary>/// Finds value of y for a given x/// using step size h and 		/// initial value y0 at x0./// </summary>/// <param name="x0">初值</param>/// <param name="y0">初值</param>/// <param name="x">求值点</param>/// <param name="h">步长</param>/// <returns></returns>public static double Runge_Kutta_2th_Order(double x0, double y0, double x, double h){int n = (int)((x - x0) / h);double y = y0;for (int i = 1; i <= n; i++){double k1 = h * dydx(x0, y);double k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1);y = y + (1.0 / 6.0) * (k1 + 2 * k2);x0 = x0 + h;}return y;}}
}

4 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public delegate double SDE_Equation(double x, double y);

    public static partial class Algorithm_Gallery
    {
        public static SDE_Equation dydx = null;

        /// <summary>
        /// Finds value of y for a given x
        /// using step size h and         
        /// initial value y0 at x0.
        /// </summary>
        /// <param name="x0">初值</param>
        /// <param name="y0">初值</param>
        /// <param name="x">求值点</param>
        /// <param name="h">步长</param>
        /// <returns></returns>
        public static double Runge_Kutta_2th_Order(double x0, double y0, double x, double h)
        {
            int n = (int)((x - x0) / h);

            double y = y0;
            for (int i = 1; i <= n; i++)
            {
                double k1 = h * dydx(x0, y);
                double k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1);

                y = y + (1.0 / 6.0) * (k1 + 2 * k2);
                x0 = x0 + h;
            }

            return y;
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526163.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之生产消费者模型

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 我们在条件满足的时候&#xff0c;唤醒指定的线程&a…

深入理解 Webpack 热更新原理:提升开发效率的关键

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

从零开始:神经网络(1)——神经元和梯度下降

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 一. 神经网络 1. 神经网络的发展 先了解一下神经网络发展的历程。从单层神经网络&#xff08;感知器&#xff09;开…

selenium元素定位问题

具体网页信息如下&#xff1a; 定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。 定位方法&#xff1a; 方法一&#xff1a;通过文本定位 driver.find_element(By.XPATH, "//*[text()高分一号]").click() time.sleep(3) 如果是部分文字 #部分文字py…

安卓提示风险解决源码搭建教程

一&#xff0e;环境 1.安装Nginx 2.安装Tomcat8.5 3. 安装Mysql5.7 二&#xff0e;修改app已生成的文件下载地址 1.打开编辑config.properties 2.填写你的ip&#xff0c;端口不用修改 三&#xff0e;启动教程 启动命令&#xff1a;sh.start.sh 源码下载链接:https://p…

贪心算法(蓝桥杯 C++ 题目 代表 注解)

介绍&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望最终能够得到全局最好或最优的结果的算法。它通常用来解决一些最优化问题&#xff0c;如最小生…

JVM基本概念、命令、参数、GC日志总结

原文: 赵侠客 一、前言 NPE&#xff08;NullPointerException&#xff09;和OOM&#xff08;OutofMemoryError&#xff09;在JAVA程序员中扮演着重要的角色&#xff0c;它也是很多人始终摆脱不掉的梦魇&#xff0c;与NPE不同的是OOM一旦在生产环境中出现就意味着只靠代码已经无…

FPGA的配置状态字寄存器Status Register

目录 简介 状态字定义 Unknown Device/Many Unknow Devices 解决办法 一般原因 简介 Xilinx的FPGA有多种配置接口&#xff0c;如SPI&#xff0c;BPI&#xff0c;SeletMAP&#xff0c;Serial&#xff0c;JTAG等&#xff1b;如果从时钟发送者的角度分&#xff0c;还可以…

读书笔记之《理解和改变世界》:从信息知识智能的本质看AI

《理解和改变世界: 从信息到知识与智能》作者:是(法) 约瑟夫希发基思&#xff0c; 原作名: Understanding and Changing the World: From Information to Knowledge and Intelligence&#xff0c;2023年出版。 约瑟夫希发基思&#xff08;Joseph Sifakis&#xff09;&#xff…

Java高频面试之并发篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 并行和并发有什么区别&#xff1f; 并行是同时执行多个任务&#xff0c;而并发是多个任务在一段时间内交替执行。并行&#xff08;Parallel&#xff09;是指同时执行多个任务或操作&#xff0c;通过同时…

Java开发:对象间复制属性,方法归纳

在Java开发中&#xff0c;对象间复制属性是一项常见的任务&#xff0c;特别是在处理层&#xff08;如控制器层&#xff09;与服务层或数据传输对象&#xff08;DTOs&#xff09;之间的数据转换时。有多种方法可以实现User对象到UserDTO对象的属性复制&#xff0c;下面列举了几种…

浅析开源内存数据库Fastdb

介绍&#xff1a; Fastdb是免费开源内存数据库&#xff0c;其优秀的性能&#xff0c;和简洁的C代码&#xff0c;让我学习使用过程中收益颇多&#xff0c;但是国内中文相关研究的文章相当稀少&#xff0c;外文我查询相当不便。有兴趣的朋友可以通过以下网站访问&#xff1a;Mai…