龙哥库塔法or欧拉法求解微分方程matlab实现
举例:分别用欧拉法和龙哥库塔法求解下面的微分方程
我们知道的欧拉法(Euler)"思想是用先前的差商近似代替倒数",直白一些的编程说法即:f(i+1)=f(i)+h*f(x,y)其中h是设定的迭代步长,若精度要求不高,一般可取0.01。在定义区间内迭代求解即可。
龙哥库塔法一般用于高精度的求解,即高阶精度的改进欧拉法,常用的是四阶龙哥库塔,编程语言如下:
y(i+1)=y(i)+h*(k1+2*K2+2*k3+k4)/6;
k1=f(xi,yi)
k2=f(xi+h/2,yi+h*k1/2);
k3=f(xi+h/2,yi+h*k2/2);
k4=f(xi+h,yi+h*k3);
设置终止条件迭代求解。
matlab实现程序如下:
%% 龙哥库塔or欧拉法求解微分方程
t=0:0.01:3; %自变量范围
f = [];
g = [];
f(1) = 0.1; %f初值
g(1) = 1; %g初值
h=0.001;
for i=1:length(t)
%% 欧拉法
% f(i+1) =f(i)+h*(exp(f(i)*sin(t(i)))+g(i));
% g(i+1) =g(i)+h*(exp(g(i)*cos(t(i)))+f(i));
%% 龙哥库塔
kf1 = exp(f(i)*sin(t(i)))+g(i);%g(i)相当于常值
kf2 = exp((f(i)+kf1*h/2)*sin(t(i)+h/2))+g(i);
kf3 = exp((f(i)+kf2*h/2)*sin(t(i)+h/2))+g(i);
kf4 = exp((f(i)+kf3*h)*sin(t(i)+h))+g(i);
f(i+1) = f(i) + h*(kf1+2*kf2+2*kf3+kf4)/6;
kg1 = exp(f(i)*cos(t(i)))+f(i);%f(i)相当于常值
kg2 = exp((f(i)+kg1*h/2)*cos(t(i)+h/2))+f(i);
kg3 = exp((f(i)+kg2*h/2)*cos(t(i)+h/2))+f(i);
kg4 = exp((f(i)+kg3*h)*cos(t(i)+h))+f(i);
g(i+1) = g(i) + h*(kg1+2*kg2+2*kg3+kg4)/6;
end
figure(1)
plot(t,f(1:length(t)),t,g(1:length(t)));
legend('f函数','g函数')
龙哥库塔法or欧拉法求解微分方程matlab实现的更多相关文章
- Matlab学习——求解微分方程(组)
介绍: 1.在 Matlab 中,用大写字母 D 表示导数,Dy 表示 y 关于自变量的一阶导数,D2y 表示 y 关于自变量的二阶导数,依此类推.函数 dsolve 用来解决常微分方程(组)的求解问 ...
- 用Matlab求解微分方程
用Matlab求解微分方程 解微分方程有两种解,一种是解析解,一种是数值解,这两种分别对应不同的解法 解析解 利用dsolve函数进行求解 syms x; s = dsolve('eq1,eq2,.. ...
- ode45求解微分方程(MATLAB)
首先介绍一下ode45的格式: [t,y] = ode45(odefun,tspan,y0) [t,y] = ode45(odefun,tspan,y0,options) [t,y,te,ye,ie] ...
- 数学——Euler方法求解微分方程详解(python3)
算法的数学描述图解 实例 用Euler算法求解初值问题 \[ \frac{dy}{dx}=y+\frac{2x}{y^2}\] 初始条件\(y(0)=1\),自变量的取值范围\(x \in [0, 2 ...
- 杨恒说李的算法好-我问你听谁说的-龙哥说的(java中常见的List就2个)(list放入的是原子元素)
1.List中常用的 方法集合: 函数原型 ******************************************* ********************************** ...
- 求解热传导方程matlab
这是非稳态一维热传导的方法,也叫古典显格式. 如果是做数学建模,就别用了,这种方法计算量比较大,算的很慢,而且收敛不好. 但是如果实在没办法也能凑合用. 该改的地方我都用???代替了. 给个详细解释h ...
- 欧拉法求解常微分方程(c++)
#include<iostream> #include<iomanip> using namespace std; int main() { double x, y, h; ...
- 后退欧拉法求解常微分方程(c++)
#include<iostream> #include<iomanip> using namespace std; int main() { double x,y,yn,h,t ...
- 欧拉法求解常微分方程(c++)【转载】
摘自<c++和面向对象数值计算>,代码简洁明快,采用类进行封装实现代码,增强代码的重用性,通过继承可实现代码的重用,采用函数指针,通用性增强,在函数改变时只需要单独改变函数部分的代码,无需 ...
随机推荐
- 开发Blog整理
开发Blog记录 清理收藏夹 太多了,来不及看了. http://blog.sina.com.cn/s/blog_67d95f40010113ec.htmlhttp://segmentfault.co ...
- [转载]tslib1.4与Qt4.8.6的交叉编译与移植
原文:http://www.cnblogs.com/Jasonsblog/p/3757985.html http://blog.csdn.net/sno_guo/article/details/168 ...
- Gulp的使用教程
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- oracle异常:ORA-01422: exact fetch returns more than requested
ORA-01422: exact fetch returns more than requested 神奇的错误,困扰了我一个下午. 问题描述:明明只有一行记录,结果是报了多条记录的错误.令我百思不得 ...
- html5之canvas画图基础
HTML5+CSS3的好处是,你可以编写一个页面分别用于不同的平台,只需要设置不同的css样式就可以了,现在基本主流浏览器都支持全新的HTML5和CSS3,因为它的跨平台开发.因为是原生代码所以它的页 ...
- 用HTML做的简单的个人简历
<html> <head> <title>table表格</title> <style type="text/css"> ...
- Retrofit源码研究
2016-05-06 15:35:27 最近抽空研究了一下Retrofit源码,包括API使用.源码结构.使用到的设计模式.SDK的架构设计.作者设计/实现思路等,会形成一系列文章. 以前Retrof ...
- NOIP2016之反面教材提供
NOIP 2016信息竞赛总结 竞赛历程总结: 算下来一共学了11个月的信息竞赛,从最初进来的时候大概会一点最最基础的语法,上课什么也听不懂,然后一直追进度,我想在这个阶段中我的问题主要是自己知道自己 ...
- Python 面向对象[Day 06]
面向对象编程(Object-Oriented Programming) 概述 面向过程:根据业务逻辑从上至下写代码,实现所需功能. 函数式:将某些功能代码封装至函数中,在需要时调用函数,函数式代码 ...