C#,数值计算,求解微分方程的吉尔(Gear)四阶方法与源代码

1 微分方程

微分方程,是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。
微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛,可以解决许多与导数有关的问题。物理中许多涉及变力的运动学、动力学问题,如空气的阻力为速度函数的落体运动等问题,很多可以用微分方程求解。此外,微分方程在化学、工程学、经济学和人口统计等领域都有应用。
数学领域对微分方程的研究着重在几个不同的面向,但大多数都是关心微分方程的解。只有少数简单的微分方程可以求得解析解。不过即使没有找到其解析解,仍然可以确认其解的部分性质。在无法求得解析解时,可以利用数值分析的方式,利用电脑来找到其数值解。 动力系统理论强调对于微分方程系统的量化分析,而许多数值方法可以计算微分方程的数值解,且有一定的准确度。

2 数值解法

作为数值分析的基础内容,常微分方程数值解法的研究已发展得相当成熟,理论上也颇为完善,各类有实用价值的算法已经建立,并已形成计算机软件。它处理问题的思路与方法常可用于偏微分方程的数值求解。主要研究以下三类定解问题的数值解法:初值问题、两点边值问题与特征值问题。初值问题的数值解法应用广泛,是常微分方程数值解法的主要内容。在这方面有突出贡献的学者当推达赫奎斯特(Dahlquist,G.)、巴特赫尔(Butcher,J.C.)及吉尔(Gear,C.W.)等人。两点边值问题及特征值问题的研究相对较为薄弱,其中凯勒尔(Keller,H.B.)的工作影响较大。

 Gear, C.William

3 源程序

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

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// 给定微分方程的一阶偏导方程
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public delegate double SDE_Equation(double x, double y);

    /// <summary>
    /// 求解微分方程的吉尔四阶方法
    /// C# program to implement Gill's method
    /// </summary>
    public static partial class Algorithm_Gallery
    {
        public static SDE_Equation dydx = null;

        /// <summary>
        /// 求解微分方程的吉尔四阶方法
        /// </summary>
        /// <param name="x0">起点x坐标</param>
        /// <param name="y0">起点y坐标</param>
        /// <param name="x">求值点x坐标</param>
        /// <param name="step">步长</param>
        /// <returns></returns>
        public static double SDE_Gill_Method(double x0, double y0, double x, double step)
        {
            int n = (int)((x - x0) / step);
            double y = y0;
            for (int i = 1; i <= n; i++)
            {
                double k1 = step * dydx(x0, y);
                double k2 = step * dydx(x0 + 0.5 * step, y + 0.5 * k1);
                double k3 = step * dydx(x0 + 0.5 * step, y + 0.5 * (-1 + Math.Sqrt(2)) * k1 + k2 * (1 - 0.5 * Math.Sqrt(2)));
                double k4 = step * dydx(x0 + step, y - (0.5 * Math.Sqrt(2)) * k2 + k3 * (1 + 0.5 * Math.Sqrt(2)));

                y = y + (1.0 / 6) * (k1 + (2 - Math.Sqrt(2)) * k2 + (2 + Math.Sqrt(2)) * k3 + k4);

                x0 = x0 + step;
            }

            return y;
        }
    }
}
 

使用该方法的参考代码(POWER BY 315SOFT.COM):

using Legalsoft.Truffer.Algorithm;

namespace Legalsoft.Drive
{
    public partial class Form1 : Form
    {
        public double func(double x, double y)
        {
            return x/2 + y*y;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Algorithm_Gallery.dydx = func;
            MessageBox.Show("result="+ Algorithm_Gallery.SDE_Gill_Method(0.0,0.0,0.5,30));
        }
    }
}

4 源代码

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{/// <summary>/// 给定微分方程的一阶偏导方程/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public delegate double SDE_Equation(double x, double y);/// <summary>/// 求解微分方程的吉尔四阶方法/// C# program to implement Gill's method/// </summary>public static partial class Algorithm_Gallery{public static SDE_Equation dydx = null;/// <summary>/// 求解微分方程的吉尔四阶方法/// </summary>/// <param name="x0">起点x坐标</param>/// <param name="y0">起点y坐标</param>/// <param name="x">求值点x坐标</param>/// <param name="step">步长</param>/// <returns></returns>public static double SDE_Gill_Method(double x0, double y0, double x, double step){int n = (int)((x - x0) / step);double y = y0;for (int i = 1; i <= n; i++){double k1 = step * dydx(x0, y);double k2 = step * dydx(x0 + 0.5 * step, y + 0.5 * k1);double k3 = step * dydx(x0 + 0.5 * step, y + 0.5 * (-1 + Math.Sqrt(2)) * k1 + k2 * (1 - 0.5 * Math.Sqrt(2)));double k4 = step * dydx(x0 + step, y - (0.5 * Math.Sqrt(2)) * k2 + k3 * (1 + 0.5 * Math.Sqrt(2)));y = y + (1.0 / 6) * (k1 + (2 - Math.Sqrt(2)) * k2 + (2 + Math.Sqrt(2)) * k3 + k4);x0 = x0 + step;}return y;}}
}

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

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

相关文章

RTCA DO-178C 机载系统和设备认证中的软件注意事项-软件配置管理流程(七)

7.0 软件配置管理流程 SOFTWARE CONFIGURATION MANAGEMENT PROCESS 本节讨论软件配置管理 (SCM) 过程的目标和活动。 SCM 流程按照软件计划流程&#xff08;参见 4&#xff09;和软件配置管理计划&#xff08;参见 11.4&#xff09;的定义进行应用。 SCM 过程的输出记录在软件…

【探索AI】Sora - 探索AI视频模型的无限可能

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨…

【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection

sqli-labs-master 21-37 Advanced-Injection 第一关到第二十关请见专栏 文章目录 sqli-labs-master 21-37 Advanced-Injection第二十一关-Cookie注入第二十二关-Cookie注入第二十三关-注释符过滤的报错注入第二十四关-二次注入第二十五关-过滤OR、AND双写绕过第二十五a关-过滤…

老卫带你学---leetcode刷题(190. 颠倒二进制位)

190. 颠倒二进制位 问题 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指定为有符号整数类型&#xff0c;并且不应…

《Flask入门教程》学习笔记

《Flask入门教程》官网&#xff1a;https://tutorial.helloflask.com/ 目录 第一章&#xff1a;准备工作第二章&#xff1a;Hello, Flask!第三章&#xff1a;模板第四章&#xff1a;静态文件第五章&#xff1a;数据库第六章&#xff1a;模板优化第七章&#xff1a;表单第八章&a…

【嵌入式——QT】日期与定时器

日期 QTime&#xff1a;时间数据类型&#xff0c;仅表示时间&#xff0c;如 16:16:16&#xff1b;QDate&#xff1a;日期数据类型&#xff0c;仅表示日期&#xff0c;如2024-1-22&#xff1b;QDateTime&#xff1a;日期时间数据类型&#xff0c;表示日期和时间&#xff0c;如2…

多个版本的Python如何不冲突?

转载文章&#xff0c;防止忘记或删除 转载于&#xff1a;电脑中存在多个版本的Python如何不冲突&#xff1f; - 知乎 (zhihu.com) 如何安装多版本的Python并与之共存&#xff1f; 如果你的工作涉及到Python多版本之间开发或测试&#xff0c;那么请收藏本文&#xff0c; 如果你…

【python】Python Turtle绘制流星雨动画效果【附源码】

在这篇技术博客中&#xff0c;我们将学习如何使用 Python 的 Turtle 模块绘制一个流星雨的动画效果。通过简单的代码实现&#xff0c;我们可以在画布上展现出流星闪耀的场景&#xff0c;为视觉带来一丝神秘与美感。 一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入…

每日一题——LeetCode1544.整理字符串

方法一 字符串转数组删除元素 将字符串转为数组&#xff0c;遍历数组&#xff0c;如果碰到同一字母大写小写连续出现就原地删除这两个元素&#xff0c;最后把数组转回字符串并返回 var makeGood function(s) {let arrs.split()for(let i0;i<s.length-1;i){if(arr[i]!arr[…

【程序员的金三银四求职宝典】《春风拂面,代码在手:程序员的金三银四求职指南》

《春风拂面&#xff0c;代码在手&#xff1a;程序员的金三银四求职指南》 随着春风的轻拂&#xff0c;大地复苏&#xff0c;万物更新。在这个生机勃勃的季节&#xff0c;不仅自然界在迎接新生&#xff0c;对于广大的程序员朋友们而言&#xff0c;这也是一个全新的开始——金三…

关于HTML标签应用教程

简介 HTML&#xff08;HyperText Markup Language&#xff09;是用于创建网页结构的标记语言。在本教程中&#xff0c;我们将介绍一些常用的HTML标签&#xff0c;以及它们的用法和示例。 1. HTML基础结构 <!DOCTYPE html> <html> <head><title>页面…

windows U盘不能识别

windows U盘不能识别 1、问题描述2、问题分析解决3、把U盘插到windows电脑上试试能不能识别 1、问题描述 windwos u盘不能识别 u盘被拿到mac电脑上做了启动盘之后&#xff0c;就不能被windows识别了。题主很奇怪里面被mac电脑的同学放了什么&#xff0c;因此想到把优盘挂载到L…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

代码随想录day23:回溯part3,继续组合问题

文章目录 day23&#xff1a;回溯part3&#xff0c;继续组合问题39.组合总和40.组合总和 II131.分割回文串 day23&#xff1a;回溯part3&#xff0c;继续组合问题 39.组合总和 class Solution {List<List<Integer>> ans new ArrayList<>();List<Integer…

05|Mysql锁分类

1. 锁分类 1.1根据性能 乐观锁 ● 版本号 ● 读多场景 ● 第二次循环需要读取到最新的数据统计 示例 while{ // 1.调用方法获取当前版本号 getCurrentBalanceAndVersion(accountId); // 2.Java运算newBalance Balance 500; updateAccountBalance(account…

【习题——菱形的打印】

一、打印下面的图形&#xff08;菱形&#xff09; 我们可以先来看一个简单点的菱形&#xff1a; 输入描述&#xff1a; 输入一个char类型字符 输出描述&#xff1a; 输出一个用这个字符填充的对角线长5个字符&#xff0c;倾斜放置的菱形&#xff1a; 1、思路&#xff1a; 我…

后端基础:Http请求实现

还在前公司的时候, 公司同事问过我一个问题, 他是搞硬件的, 我是搞软件, 在他眼里我似乎应该对http整个传输协议应该是门清的, 没想到我这个门外汉没有经历过以前的黑暗森林年代, 在高度封装的时代我对具体的细节其实并不大清楚, 虽然知道整体流程脉络, 但是到了最终聊…

黑马c++ STL部分 笔记(3) deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低&#xff08;每次头插&#xff0c;后面的元素就往后移&#xff09; deque相对而言&#xff0c;对头部的插入删除速…

【论文综述+多模态】腾讯发布的多模态大语言模型(MM-LLM)综述(2024.02)

论文链接&#xff1a;24.02.MM-LLMs: Recent Advances in MultiModal Large Language | 国内-链接 实时网站&#xff1a;https://mm-llms.github.io 参考说明1-readpaper:https://mp.weixin.qq.com/s/ESUVe1aTYFLVJ10S9c1dBg 一、什么是MM-LLM ? 多模态大语言模型&#xff…

我写了个ImageWindow应用

文章目录 0 引言1 应用简介2 主要功能和特点2.1 多图像同/异步像素级对比2.2 支持多达30种图像格式2.3 高效率的图像处理性能 3 简明使用教程3.1 软件下载安装与更新3.1.1 软件下载与安装3.1.2 软件更新 3.2 多视窗添加并自动最优排列3.3 多样化图像导入方式3.4 自动切换显示模…