📄 exp7_1.m
字号:
% exp7_1.m --- 学习一阶常微分方程(组)初值问题的求解命令
function study_ode45
% [简介] ode45 是解一阶常微分方程(组)初值问题的命令
% 基于 4-5 阶的 Runge-Kutta 法(自适应(变步长))
% 其基本原理是在每一步中计算6个近似斜率 K1,K2,...,K6
% 用其中 4 个可得一个 4 阶的 RK 法,用其中 5 个可得一个 5 阶的 RK 法
% 两个结果进行比较,若两个结果相近则接受该近似值,若两个结果超出指定的精度,则减小步长.
% 若超过要求的有效位数,则增加步长.
% [例] 求解下面方程组
% y1' = f1(x,y1,y2) = y2 , y1(0) = -1
% y2' = f2(x,y1,y2) = -y1 , y2(0) = 0
% 写成向量形式
% Y' = F(x,Y)
% 其中
% | y1(x)| | f1(x,y1,y2)| | -1|
% Y = | | , F = | | , Y(0) = | |
% | y2(x)| | f2(x,y1,y2)| | 0|
% 精确解
% y1 = -cos(x), y2 = sin(x)
% 即
% | -cos(x)|
% Y = | |
% | sin(x)|
% [调用方法] 见下
ab = [0,7]; % 求解区间(节点的离散是自动的,不一定等分)
% 如果 ab =[x1,x2,...,xn] 则在这些节点上求解,如 ab = 0:0.2:7;
Y0 = [-1,0]; % 初值
[x,Y]=ode45(@F,ab,Y0); % x 是离散的自变量(列向量)
% Y 是数值解,Y 的第 k 列 Y(:,k) 存放第 k 个函数的数值解
% 作图比较
xx = 0:0.1:7; yy1 = -cos(xx); yy2 = sin(xx);
figure(1)
plot(xx,yy1,'k-',x,Y(:,1),'r.','MArkerSize',6);
legend('精确解','数值解')
title('第一个函数','Color','b')
text(1.7,0,'\leftarrow y = -cos(x)')
figure(2)
plot(xx,yy2,'k-',x,Y(:,2),'r.','MArkerSize',6);
legend('精确解','数值解')
title('第二个函数','Color','b')
text(1.7,0,' y = sin(x) \rightarrow')
% ------------------------------------------
function Z = F(x,Y)
% x 必须是标量, Z 必须列向量
Z = [ Y(2)
-Y(1)];
% ********** 你的实验 **********
% (1) 用ode45解 P182 例8,作图比较数值解与精确解
% (2) 用ode45解 P187 实验课题(三)(1),作图同上要求
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -