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=%f, y=%f\n',0,1);
for i=1:1/h
x=(i-1)*h;
K=f(x,y);
y=y+h*K;
fprintf('欧拉法:x=%f, y=%f\n',x+h,y);
end
fprintf('\n');
%改进的欧拉法
y=1;
fprintf('改进的欧拉法:x=%f, y=%f\n',0,1);
for i=1:1/h
x=(i-1)*h;
K1=f(x,y);
K2=f(x+h,y+h*K1);
y=y+(h/2)*(K1+K2);
fprintf('改进的欧拉法:x=%f, y=%f\n',x+h,y);
end
fprintf('\n');
%龙格库塔方法
y=1;
fprintf('龙格库塔法:x=%f, y=%f\n',0,1);
for i=1:1/h
x=(i-1)*h;
K1=f(x,y);
K2=f(x+h/2,y+(h/2)*K1);
K3=f(x+h/2,y+(h/2)*K2);
K4=f(x+h,y+h*K3);
y=y+(h/6)*(K1+2*K2+2*K3+K4);
fprintf('龙格库塔法:x=%f, y=%f\n',x+h,y);
end
结果:
>> R_K(0.2)
欧拉法:x=0.000000, y=1.000000
欧拉法:x=0.200000, y=0.800000
欧拉法:x=0.400000, y=0.614400
欧拉法:x=0.600000, y=0.461321
欧拉法:x=0.800000, y=0.343519
欧拉法:x=1.000000, y=0.255934 改进的欧拉法:x=0.000000, y=1.000000
改进的欧拉法:x=0.200000, y=0.807200
改进的欧拉法:x=0.400000, y=0.636118
改进的欧拉法:x=0.600000, y=0.495044
改进的欧拉法:x=0.800000, y=0.383419
改进的欧拉法:x=1.000000, y=0.296974 龙格库塔法:x=0.000000, y=1.000000
龙格库塔法:x=0.200000, y=0.804636
龙格库塔法:x=0.400000, y=0.631465
龙格库塔法:x=0.600000, y=0.489198
龙格库塔法:x=0.800000, y=0.377225
龙格库塔法:x=1.000000, y=0.291009
>> R_K(0.4)
欧拉法:x=0.000000, y=1.000000
欧拉法:x=0.400000, y=0.600000
欧拉法:x=0.800000, y=0.302400 改进的欧拉法:x=0.000000, y=1.000000
改进的欧拉法:x=0.400000, y=0.651200
改进的欧拉法:x=0.800000, y=0.405782 龙格库塔法:x=0.000000, y=1.000000
龙格库塔法:x=0.400000, y=0.631625
龙格库塔法:x=0.800000, y=0.377556
>> R_K(1)
欧拉法:x=0.000000, y=1.000000
欧拉法:x=1.000000, y=0.000000 改进的欧拉法:x=0.000000, y=1.000000
改进的欧拉法:x=1.000000, y=0.500000 龙格库塔法:x=0.000000, y=1.000000
龙格库塔法:x=1.000000, y=0.303395
注意:在步长h为0.4时,要将for i=1:1/h改为for i=1:0.8/h。
MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法的更多相关文章
- MATLAB常微分方程的数值解法
MATLAB常微分方程的数值解法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 一.实验目的 科学技术中常常要求解常微分方程的定解问题,所谓数值解法就是 ...
- [算法] [常微分方程] [欧拉法 改进欧拉法 经典R-K算法]
#include<iostream> #include<cmath> #include<cstdio> #include<iomanip> using ...
- Matlab,Visio等生成的图片的字体嵌入问题解决方法
确保所有字体嵌入,是生成高质量学术论文的必要条件.但是在Windows下,总会遇到Matlab或Visio生成字体没有嵌入的问题,当然这个问题的解决办法有很多(例如,对于Visio可以这样做:直接拷贝 ...
- 人工智能改进传统云ERP的10种方法
http://blog.itpub.net/31542119/viewspace-2168809/ 随着数字化转型的进程加快,企业开始重新评估ERP的作用.传统ERP经过多年僵硬化定制过于追求生产的一 ...
- 用matlab脚本语言写M文件函数时用三种方法简单实现实现DFT(离散傅里叶变换)
%用二重循环实现DFT: function xk=dt_0(xn); %define a function N=length(xn); %caculate the length of the vari ...
- 改进cocos2dx中lua读ccb的方法
cocos2dx自带的CCBProxy真弱,还好提供了一个CCBReaderLoader.lua,但是也不好用, 于是修改了一下CCBReaderLoader,下面直接贴代码了. function N ...
- matlab练习程序(龙格库塔法)
非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以 ...
- MATLAB数学实验总结
L1 MATLAB 基础知识 P6 表1-3 数据显示格式 format rat format long P20 表2-5 常用的矩阵函数 zeros(m,n) %零阵 eye(n) %单位阵 one ...
- Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用
15.1 工业乙醇生产与计算机仿真 乙醇作为可再生清洁能源不仅可以代替四乙基铅作为汽油的防爆剂,还可以制造汽油醇.这一巨大的潜在需求促使人们去寻找提高乙醇工业生产率的途径,使人们着手于发酵工程的研究. ...
随机推荐
- MySQL系列详解二:MySQL语句操作-技术流ken
简介 本篇博客将详细讲解mysql的一些常用sql语句操作,例如创建数据库,删除数据库,创建表,修改表,删除表,以及简单查询案例. 关于mysql数据中的SQL的大小写问题 1.不区分大小写 1. s ...
- 使用.Net Core 2.1开发Captcha图片验证码服务
更新后续篇:Captcha服务(后续1) 使用.Net Core 2.1开发Captcha验证码服务 开发工具:Visual Studio 2017 15.7.3 开发平台:64位 Windows 1 ...
- [转]Angular: Hide Navbar Menu from Login page
本文转自:https://loiane.com/2017/08/angular-hide-navbar-login-page/ In this article we will learn two ap ...
- 高德地图Javascript API设置域名白名单
在涉及到GPS地图相关应用的开发过程中,我们需要在高德开放平台注册相应的账号,并设置好相应应用来获取调用的Key值,该Key值直接放入到网站前端页面,针对任何人来说都可看到,因此我们防止他人盗用你的K ...
- Tree View控件(添加,移除,设置图标)
添加 父节点,并为父节点添加子节点 private void button1_Click(object sender, EventArgs e) { TreeNode tn1 = treeView1. ...
- 46.Linux-创建rc红外遥控平台设备,实现重复功能(2)
上章链接:46.Linux-分析rc红外遥控平台驱动框架,修改内核的NEC解码函数BUG(1) 在上章分析了红外platform_driver后,已经修改bug后,接下来我们自己创建一个红外platf ...
- 解决org.hibernate.exception.SQLGrammarException:could not insert
今天在使用hibernate搭建项目时碰到了这个错误,找了好半天没能发现错误的原因, 上网求助了一下 发现出现这个bug的原因是因为数据表使用了数据库的关键字(保留字) 然后检查了一下,发现字段名称都 ...
- App测试流程及测试点(个人整理版)
1 APP测试基本流程 1.1流程图 1.2测试周期测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向主 ...
- STL中的Set用法(详+转)
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...
- 2,使用javascript
1, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...