龙格库塔求解常微分方程

fun.m添加微分方程,通过RK递推下一时刻的函数值

主函数如下:

n=90;

x=zeros(1,n+1);
y=zeros(1,n+1);
x(1)=0;
y(1) =1;   %初值
h=0.1;

for i =1:n

    x(i+1) = x(i) + h;

    y(i+1) = RK(@fun,x(i),y(i),h);

end

plot(x,y,‘-o‘)

fun.m如下:y‘ = 2*(1-y/20)*y -x;

function dy= fun(x,y)

dy  = 2*(1-y/20)*y -x;

 

RK.m如下:

function y = RK(F_xy,x,y,h)

k_1 = F_xy(x,y);

k_2 = F_xy(x+0.5*h,y+0.5*h*k_1);

k_3 = F_xy((x+0.5*h),(y+0.5*h*k_2));

k_4 = F_xy((x+h),(y+k_3*h));

y = y + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h;

  

结果如下:

  

原文地址:https://www.cnblogs.com/skylover/p/10160892.html

时间: 2024-07-31 12:10:36

龙格库塔求解常微分方程的相关文章

MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法

MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔方法 5.例题 用欧拉法,改进的欧拉法及4阶经典Runge-Kutta方法在不同步长下计算初值问题.步长分别为0.2,0.4,1.0. matlab程序: function z=f(x,y) z=-y*(1+x*y); function R_K(h) %欧拉法 y=1; fprintf('欧拉法:x

Matlab基础学习-----------Matlab求解常微分方程边值问题的方法

算法代码 solinit =bvpinit(linspace(0,4,5),[1 0]); % linspace(0,4,5)为初始网格,[1,0]为初始估计值 sol=bvp4c(@twoode,@twobc,solinit); % twoode与twobc分别为微分方程与边界条件的函数,solinit为结构 x=linspace(0,4); %确定x范围 y=deval(sol,x); %确定y范围 plot(x,y(1,:)); %画出y-x的图形 %定义twoode函数(下述代码另存为工

计算方法(四)带初值的常微分方程解法

实现了一些常见的带初值的常微分方程的算法. /// <summary> /// 欧拉迭代公式,求出区间(x0,x]中每隔步长h的精度为e的近似值 /// </summary> /// <param name="fun">fun为x的函数即 dy/dx=fun(x,y)</param> /// <param name="N">将区间分为N段</param> /// <param name=&

MATLAB常微分方程的数值解法

一.实验目的 科学技术中常常要求解常微分方程的定解问题,所谓数值解法就是求未知函数在一系列离散点处的近似值. 二.实验原理 三.实验程序 1. 尤拉公式程序 四.实验内容 选一可求解的常微分方程的定解问题,分别用以上1, 4两种方法求出未知函数在 节点处的近似值,并对所求结果与分析解的(数值或图形)结果进行比较. 五.解答(按如下顺序提交电子版) 1.(程序) 求解初值问题 取n=10 源程序: euler23.m: function [A1,A2,B1,B2,C1,C2]=euler23(a,

欧拉法求解微分方程

by Conmajia 2014 原文是我在2014年写的,用C# 完成,这里改成JavaScript了,特基础.当然最方便的还是用数学库,或者Matlab.Mathematics这些数学软件(如果你只求值的话),或者可以换成C.Java.Go.Erlang任何其他的语言实现.欧拉(Euler)和中心差分逼近,是最朴素的想法,可惜代数精度太低了,而龙格库塔的稳定性又是个问题.总之只能用来计算普通的东西,高大上问题一般还是使用广义$\alpha$,Wilson-$\Theta$之类的,利用系数调节

数值分析课程设计

数值分析学习心得: 插值法:拉格朗日插值,埃米特插值 函数逼近:最小二乘法 求积分的算法:牛顿-科斯特公式,龙贝格求积公式,高斯求积公式 求线性方程组的迭代法:jacobi迭代法,高斯-赛德尔迭代法 求非线性方程的算法:牛顿法 求常微分方程初值问题的算法:欧拉法,龙格-库塔法 数值分析课程设计  浙江大学 陈越 第1章 数值分析课程实践概要1.1 课程实践的意义1.2 实验的基本要求第2章 MATLAB简介2.1 MATLAB概述2.2 常用基本指令2.3 数值技术第3章 案例详解1:误差的影响

matlab练习程序(龙格库塔法)

非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以上函数f(x,y)计算工作量大大增加而精度提高较慢. 下面以龙格库塔法解洛伦兹方程为例: matlab代码如下: main.m: clear all; close all; clc; %系统龙格库塔法 [t,h] = ode45(@test_fun,[0 40],[12 4 0]); plot3(h

关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记(2)

接上一篇: http://www.cnblogs.com/letben/p/5446074.html#3538201 捆绑调整 (好开心有同学一起来看看这些问题,要不然就是我自己的话,我应该也不会看的吧,所以某种程度上说,他也帮了我呢...吼吼吼) 关于捆绑调整,由于摄影设备本身的焦距.光圈等等问题,是容易导致图片集的结果不一致的.[但是原文里面提到的相机参数又包括什么呢? TODO ]那么问题就来了,如果要进行拼接,第一幅图拼接第二幅的时候,会遵从一个标准(比如,以第一幅为标准的亮度,或者是第

计算方法简介

简介: 计算方法又称“数值分析”.是为各种数学问题的数值解答研究提供最有效的算法. 笔记: 1误差与原则 (1)误差种类:模型误差.观测误差.截断误差和舍入误差. (2)法则: (a)加减运算:近似数加减时,把其中小数位数较多的数四舍五入,使其比小数位数最少的数多一位小数,计算保留的小数位数与原近似数最小数位数最少者相同. (b)乘除运算:近似数乘除时,各因子保留位数应比小数位数最少的数多一位小数,计算保留的小数位数与原近似数最小数位数最少者位数至多少一位. (c)乘方与开方运算:近似数乘方与开