2022 05月25日
作者: 小白哥
  • 浏览: 615
  • 收藏:0
  • 点赞:0
MATLAB求高阶微分方程数值解

注:MATLAB不能直接求高阶微分方程的数值解,需要变量替换,将其转化为一阶微分方程组。

例1

1.jpg

首先,要将二阶微分方程降为一阶微分方程组,如下图所示:

1.jpg

首先,编写wf1.m文件

function dy=wf1(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=2*x/(1+x^2)*y(2);
end

再调用

%例1
%dsolve('(1+x^2)*D2y=2*x*Dy','y(-3)=2,Dy(-3)=4','x')%求得解析解
%(2*x*(x^2 + 3))/15 + 34/5%解析解,即为y
%(2*x^2)/5 + 2/5%解析解求导,即为y'
[x,y1]=ode45('wf1',[-3,4],[2,4]);%数值解
%注意:y1变量中有两列值,第1列为y1的值,即为题目中y的值。
%第2列为y2的值,即为题目中y'的值。
y2=(2.*x.*(x.^2 + 3))/15 + 34/5;
y3=(2.*x.^2)/5 + 2/5;
figure(1)
subplot(2,1,1)
plot(x,y1(:,1),'r*',x,y2,'b+')
title('y的数值解和解析解')
legend('y数值解','y解析解')
subplot(2,1,2)
plot(x,y1(:,2),'r*',x,y3,'b+')
title('y的一阶导数的数值解和解析解')
legend('y的一阶导数的数值解','y的一阶导数的解析解')

1.jpg

例2

1.jpg

该一阶微分方程组的二阶微分方程形式为:

y''=1000(1-y2)y'-y

首先,编写wf2.m文件

function dydx=wf2(t,y)
dydx=zeros(2,1);
dydx(1)=y(2);
dydx(2)=1000*(1-y(1)^2)*y(2)-y(1);
end

再调用

%例2
%刚性方程组
%使用 ode45 以及默认的相对和绝对误差容限(分别为 1e-3 和 1e-6)解算此方程组特别慢,需要好几分钟才能完成解算和绘制。
[t,y] = ode15s('wf2',[0 3000],[2 0]);
plot(t,y(:,1),'-o')

1.jpg

MATLAB求高阶微分方程数值解.rar



  

发表评论

评论列表


没有评论

筛选

文章分类

热门文章

企业招聘网址

2023-12-07  浏览:3024次

BC1.2协议介绍

2023-06-14  浏览:2926次

USB2.0速度识别

2023-10-23  浏览:1352次