MATLAB常微分方程的数值解法
MATLAB常微分方程的数值解法
作者:凯鲁嘎吉 - 博客园
http://www.cnblogs.com/kailugaji/
一、实验目的
科学技术中常常要求解常微分方程的定解问题,所谓数值解法就是求未知函数在一系列离散点处的近似值。
二、实验原理

三、实验程序
1. 尤拉公式程序

四、实验内容
选一可求解的常微分方程的定解问题,分别用以上1, 4两种方法求出未知函数在
节点处的近似值,并对所求结果与分析解的(数值或图形)结果进行比较。
五、解答
1. 程序
求解初值问题
取n=10
源程序:
euler23.m:
function [A1,A2,B1,B2,C1,C2]=euler23(a,b,n,y0)
%欧拉法解一阶常微分方程
%初始条件y0
h = (b-a)/n; %步长h
%区域的左边界a
%区域的右边界b
x = a:h:b;
m=length(x); %前向欧拉法
y = y0;
for i=2:m
y(i)=y(i-1)+h*oula(x(i-1),y(i-1));
A1(i)=x(i);
A2(i)=y(i);
end
plot(x,y,'r-');
hold on; %改进欧拉法
y = y0;
for i=2:m
y(i)=y(i-1)+h/2*( oula(x(i-1),y(i-1))+oula(x(i),y(i-1))+h*(oula(x(i-1),x(i-1))));
B1(i)=x(i);
B2(i)=y(i);
end
plot(x,y,'m-');
hold on; %欧拉两步公式
y=y0;
y(2)=y(1)+h*oula(x(1),y(1));
for i=2:m-1
y(i+1)=y(i-1)+2*h*oula(x(i),y(i));
C1(i)=x(i);
C2(i)=y(i);
end
plot(x,y,'b-');
hold on; %精确解用作图
xx = x;
f = dsolve('Dy=-3*y+8*x-7','y(0)=1','x');%求出解析解
y = subs(f,xx); %将xx代入解析解,得到解析解对应的数值 plot(xx,y,'k--');
legend('前向欧拉法','改进欧拉法','欧拉两步法','解析解'); oula.m:
function f=oula(x,y)
f=-3*y+8*x-7;
2. 运算结果
A1,A2为前向欧拉法在节点处的近似值,B1,B2为改进的欧拉法在节点处的近似值,C1,C2为欧拉公式法在节点处的近似值。
>> [A1,A2,B1,B2,C1,C2]=euler23(0,1,10,1)
A1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
A2 =
0 0 -0.6200 -0.9740 -1.1418 -1.1793 -1.1255 -1.0078 -0.8455 -0.6518 -0.4363
B1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
B2 =
0 0.0050 -0.6090 -0.9563 -1.1169 -1.1468 -1.0853 -0.9597 -0.7893 -0.5875 -0.3638
C1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000
C2 =
0 0 -0.2400 -0.9360 -0.5984 -1.3370 -0.3962 -1.5392 0.2473 -1.8076
>> [A1,A2,B1,B2,C1,C2]=euler23(0,1,10,1)
A1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
A2 =
0 0 -0.6200 -0.9740 -1.1418 -1.1793 -1.1255 -1.0078 -0.8455 -0.6518 -0.4363
B1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
B2 =
0 0.0050 -0.6090 -0.9563 -1.1169 -1.1468 -1.0853 -0.9597 -0.7893 -0.5875 -0.3638
C1 =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000
C2 =
0 0 -0.2400 -0.9360 -0.5984 -1.3370 -0.3962 -1.5392 0.2473 -1.8076

3. 拓展(方法改进、体会等)
从以上图形可以看出,在n=10时,改进的欧拉法精度更高,而欧拉两步法所求结果震荡不收敛,越接近1,震荡幅度越大,于是取n=100,时,结果如下所示:

当n=1000时,结果如下图:

当n=100时,三种方法与解析解非常接近,当n=1000时,几乎四者位于一条线中,从实验结果看出,n越大时,结果越精确。
MATLAB常微分方程的数值解法的更多相关文章
- Euler-Maruyama discretization("欧拉-丸山"数值解法)
欧拉法的来源 在数学和计算机科学中,欧拉方法(Euler method)命名自它的发明者莱昂哈德·欧拉,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解.它是一种解决常微分方程数值积分 ...
- V-rep学习笔记:机器人逆运动学数值解法(The Jacobian Transpose Method)
机器人运动学逆解的问题经常出现在动画仿真和工业机器人的轨迹规划中:We want to know how the upper joints of the hierarchy would rotate ...
- MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分方程数值解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.一阶常微分方程初值问题 2.欧拉法 3.改进的欧拉法 4.四阶龙格库塔 ...
- 偏微分方程数值解法的MATLAB源码
原文出处http://wenku.baidu.com/view/df412e115f0e7cd184253653.html 因为不太喜欢百度文库的格式,所以写到个人博客里面方便使用 <ifram ...
- Matlab-7:偏微分方程数值解法-李荣华-有限元解导数边界值的常微分(Galerkin方法)
p47.(实习题-李荣华)用线性元求下列边值问题的数值解 tic; % this method is transform from Galerkin method %also call it as f ...
- V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)
When performing inverse kinematics (IK) on a complicated bone chain, it can become too complex for a ...
- V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)
The damped least squares method is also called the Levenberg-Marquardt method. Levenberg-Marquardt算法 ...
- V-rep学习笔记:机器人逆运动学数值解法(The Pseudo Inverse Method)
There are two ways of using the Jacobian matrix to solve kinematics. One is to use the transpose of ...
- matlab练习程序(龙格库塔法)
非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以 ...
随机推荐
- SpringMVC源码阅读:过滤器
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- [AGC 018 E] Sightseeing plan
STO ZKY ORZ Description 给定一张网格图和三个矩形,每次只能向上或向右走.你需要从矩形 \(A\) 中的一个点 \(S\) 出发,到达矩形 \(B\) 中的一个点 \(P\) , ...
- HAProxy(二):HAProxy的ACL规则实现智能负载均衡详解与示例
一.HAProxy的ACL的功能 ACL(Access Control List)访问控制列表,HAProxy中的ACL的匹配条件和控制条件有许多种,功能很强大,可以通过源地址.源端口.目标地址.目标 ...
- 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区
Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...
- forfiles
关键命令就这一条了:forfiles.exe /p "D:\Kugou" /m *.tar /d -14 /c "cmd /c del @path" 这条命令的 ...
- 【github&&git】3、git图像化界面GUI的使用
GIT学习笔记 一. 基础内容 1.git是一个版本控制软件,与svn类似,特点是分布式管理,不需要中间总的服务器,可以增加很多分支. 2.windows下的git叫msysgit,下载 ...
- linux学习笔记-软件包的相关知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.软件包种类 1.源码包 源码包即提供源代码的发行包 2.二进制包 二进制包即提供二进制文件的发行包 安装方法查找二进制包官网 ...
- python爬虫入门---第三篇:自动下载图片
适用的图片网站:美桌 源代码: import requests import re import urllib from bs4 import BeautifulSoup def get_html_t ...
- 洛谷P4562 [JXOI2018]游戏(组合数学)
题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...
- 【读书笔记】iOS-iOS流媒体
在网络上直接看电影已经不是什么新鲜的事情,在iOS等移动设备上也有很多在线视频应用,如国内的PPS和PPLive应用,还有一些新闻视频都可以在线观看,如USA TODY.所以这些在线视频都采用流媒体技 ...