大家好,又见面了,我是你们的朋友全栈君。
Matlab 解常微分方程的初值问题
题目:Matlab 解常微分方程的初值问题
设计目的:
1、熟练掌握Matlab的基本编程方法,及其编程风格。
2、熟练掌握Matlab常用函数的使用。
3、与本专业相关知识相结合,掌握其在程序开发中的应用方法
以及和word、C语言等接口方法。
4、通过计算机数值求解的方式来加深微分方程解的理解。
5、熟悉初等方法可获得解析解之外的数值近似解的求解方法,提
高对差分格式的认识和离散化分析问题的技巧,加深对理论课程的学习和理解,为数学专业和信息与计算科学专业其他后继课程的学习打好基础。
设计内容:
已知一个三阶微分方程:,利用matlab软件求这个三阶微分方程在初值 下的解。
原三阶微分方程可化为:
令 则原三阶微分方程可化为微分方程组 在初值 下的解。
程序流程:
程序代码:
%编写函数文件rigid.m
function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) ;
dy(2) =y(3);
dy(3) = 2*(1-y(1)^2)*y(3)-y(1)*y(2);
%调用函数ode45求解,时间区间为[0,10]
[t,Y] = ode45(@rigid,[0 10],[1 0 -1])
t =
0
0.0001
0.0001
0.0002
0.0002
0.0005
0.0007
………………
0.9383
1.0665
1.1947
1.2918
1.3889
1.4860
………………
6.2916
6.2922
6.2928
6.2934
6.2940
6.2947
6.
由于数据太多,这里只列举部分
%绘制解的曲线
plot(t,Y(:,1),’-‘,t,Y(:,2),’-.’,t,Y(:,3),’.’)
%给图形加标注
title(‘Solution of Rigid Equation’)
xlabel(‘time T’)
ylabel(‘solution Y’)
legend(‘Y1′,’Y2′,’Y3’)
设计结果:
未加图形标注时的图
加了图形标注后的图
结果分析:
输出结果[T,Y]中T为时间点组成的向量。Y为对应于T中时间点的y(1)、y(2)和y(3)的值。此次利用matlab数值方法来求解微分方程主要是把求解的时间划分成有限步,对应于每一步将计算出一个解,如果求得的解不满足误差限制,则减少步长,再求解。如此重复,直到满足误差限为止。
课设总结:
最初拿到题目后,开始读题,知道题目所表达的意思及我们所要完成的目的,达到的效果后,便开始了做题。
首先是找一个三阶微分方程。然后把它化简为标准形式,再利用matlab软件求解。其中,在利用matlab求解时遇到一些问题,比如画图时调用已经编号的rigid函数时的调用格式不正确,还有就是给图形家标注时程序的引号没有切换成英文输入法状态下的等一些问题。但是经过多次调试,检查,修改后程序运行总算成功。
通过此次课程设计,我已经基本掌握Matlab的基本编程方法,及其编程风格。且能较熟练掌握Matlab常用函数的使用。此次设计后我的收获不少。
参考文献:
[1] 张圣勤编 MATLAB7.0 机械工业出版社
[2]周义仓 靳祯 秦军林编 常微分方程极其应用 科学出版社
[3]韩明 王家宝 李林编 数学实验(matlab版) 同济大学出版社
[4]汪晓银 皱庭荣编 数学软件与数学实验 科学出版社
2、把这个三阶微分方程化为形如 的标准形式
1、已知一个三阶微分方程
3、编写函数文件rigid.m
4、调用函数文件rigid.m,利用ode45求解
5、绘制解的曲线
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128881.html原文链接:https://javaforall.cn