Runge-Kutta法解微分方程

连续问题,微分方程或偏微分方程一定能表示。比如疾病传染、新闻传播等。

离散问题,可以用差分方程或者类似于差分的算法。

方程

$y’=cos t$

代码

123456789
clear,clc;

f = @(t,y) cos(t);			tspan = [0,2*pi];			% 时间t范围y0 = 2;					   % y的初值,用来处理积分得到的C[t,y] = ode23(f,tspan,y0);	 % 注意调用格式plot(t,y);xlabel('t');ylabel('y');

@表示句柄,当把一个函数作为参数传给另外一个函数,这时候必须要用句柄。这里是把函数f传给函数ode23

结果

高阶微分方程求解

方程

$begin{equation}
left{
begin{array}{r1}
y’’=-sin y+sin 5t\
y(0)=1\
y’(0)=0\
end{array}
right.
end{equation}$

可以将该高阶微分方程转化为两个一阶的微分方程:$begin{equation}
left{
begin{array}{r1}
y_1=y\
y_2=y’\
y’_1=y_2\
y’_2=-sin y_1+sin 5t\
y_1(0)=1\
y_2(0)=0\
end{array}
right.
end{equation}$

代码

12345678910
clear,clc;

f = @(t, y) [ y(2); -sin( y(1) ) + sin( 5*t ) ]; % 两个参数分别是y1和y2的导数tspan = [ 0, 20 ]; % 时间t范围y0 = [ 1; 0 ]; % 初值,分别对应y1,y2的初值[t, y] = ode23(f, tspan, y0); % 注意调用格式plot(t,y);xlabel('t');ylabel('y');legend('y1','y2');

结果

?

作者:@臭咸鱼

本文为作者原创,转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!

原文:大专栏  Runge-Kutta法解微分方程

原文地址:https://www.cnblogs.com/chinatrump/p/11612063.html

时间: 2024-10-11 10:44:48

Runge-Kutta法解微分方程的相关文章

[NBUT 1224 Happiness Hotel 佩尔方程最小正整数解]连分数法解Pell方程

题意:求方程x2-Dy2=1的最小正整数解 思路:用连分数法解佩尔方程,关键是找出√d的连分数表示的循环节.具体过程参见:http://m.blog.csdn.net/blog/wh2124335/8871535 当d为完全平方数时无解 将√d表示成连分数的形式,例如: 当d不为完全平方数时,√d为无理数,那么√d总可以表示成: 记 当n为偶数时,x0=p,y0=q:当n为奇数时,x0=2p2+1,y0=2pq 求d在1000以内佩尔方程的最小正整数解的c++打表程序(正常跑比较慢,这个题需要离

回溯法解背包问题分析

先亮出题目: 一,背包问题 及 回溯法解其问题的伪代码 二,赋值后的具体实例 三,如何看懂伪代码 (1)真正了解回溯法的核心思想 我总结的回溯法解题步骤: <1>先找出第一个解 <2>回溯 (2)回溯法核心思想 + 伪代码 + 图9-5 树结构来分析 四,伪代码代入值解析 核心:先找到第一个解,再回溯. cw=0;//背包当前重量 初始值 cp=0;//背包当前价值 初始值 k=1;//第一个物品 n=8;//共8个物品 W=110 第一步:得出第1个可行解: (1)k=1 k=1

用二次规划法解带约束的线性回归

对于解带约束(线性约束)的线性回归通常的办法是,将约束直接表示在线性回归中,也就是减少一个变量(即回归到线性约束本身的自由变量数目).然而今天由于要解一个问题发现了另一种思路的解法,是比变换变量更为通用的办法,就是用二次规划法解带约束的线性回归. 二次规划法有如下一般形式: 各个部分为: 特别地如果约束条件为等号,则可以用拉格朗日乘子法直接求解.如果Q是不定矩阵,甚至有一个特征值是负数的,问题就是NP难问题.. 解决一个带约束的线性回归问题,形如: 需要求解最小化: 这个式子展开来写成矩阵形式就

八皇后问题-回溯法解

八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. int g_number = 0;? //多少种摆放方法?void EightQueen(){? ?const int queens = 8;? //棋盘大小?? ?int ColumnIndex[queens];? //列索引?//遍历行? ?for(int i = 0; i < queens; ++ i)?? ? ? ?ColumnIndex[i] = i;

解微分方程+ode求解器

该命令中可以用D表示微分符号,其中D2表示二阶微分,D3表示三阶微分,以此类推. 求精确解 1.微分方程 r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var'). 解释如下:eqni表示第i个微分方程,condi表示第i个初始条件,var表示微分方程中的自变量,默认为t. >> dsolve('Dy=3*x^2','y(0)=2','x') ans =  x^3 + 2 2.微分方程组 >> [x,y]=dsolve('Dx=y'

暴力回溯法 解八皇后

国际象棋 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. public class _8Queen { //回溯法,暴力解8皇后 private static int ways = 0; //返回解法个数 public static int f8queen() { int[][] board = new int

【ACM小白成长撸】--贪婪法解硬币找零问题

question:假设有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱.按照贪婪法的思想,需要不断地使用面值最大的硬币.如果找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推. 1 /*程序的版权和版本声明部分: 2 **从<C++程序设计思想与方法>(作者:翁惠玉)P61转载 3 */ 4 #include <iostream> 5 6 using namespace std; 7 8 #define ONEFEN 1 9 #defin

暴力法解凸包

给定平面上一系列的点,用暴力法求解它们的凸包,此算法比普通的暴力法要优化,用新找到的极点去寻找下一个极点.此算法不能用于任何两个点在一直线上的情况. 输入 ConvexHull.txt 7,810,1714,1415,2316,1217,322,1724,426,18 C代码 1 /*brute force solution to convex hull problem */ 2 /*only limited to there is no point on the same line with

回溯法解数独题

近段时间用到回溯算法的地方比较多,对算法的理解也有深入.今天偶然发现一张照片,是高中时未做完的一道数独题.当时用的是"候选余数法",之后由于太麻烦,就没有做完.不过当时截图保存了,今天突然看到.那时候刚学完C语言,对汉诺塔递归都不是太理解,所以就一直拖到现在. 用C++做的,代码如下 #include<iostream> usingnamespace std;   intsudoku[9][9]={0};   //判断填在空白位置的数字在行.列上是否符合要求 boolJud