请问如下matlab如何解微分方程程如何用matlab求数值解?边界条件比较复杂

求方程的解析解dsolve('方程1','方程2',...,'方程n','初始条件','自变量')1、这里的引号可以是单引号也可以是双引号,但必须为英文输入法下的引号(如果是低版本的Matlab,使用单引号);2、自变量可以不定义,不写时Matlab会默认为t;3、初始条件可以不给,不给求出来就是通解,若有多个初始条件,可用逗号隔开;4、如果微分方程比较复杂,往往得不到解析解;5、在代码表达微分方程的时候,用字母表示微分,D、D2、D3分别表示一阶、二阶、三阶微分,后面需要跟求解的因变量;例题: \frac{dx}{dt} =2x-3y+3z+t \\ \frac{dy}{dt} =4x-5y+3z+t \\ \frac{dz}{dt}=4x-4y+2z+t [x,y,z] = dsolve('Dx=2*x-3*y+3*z+t','Dy=4*x-5*y+3*z+t','Dz=4*x-4*y+2*z+t','t') 输出结果为:新版的Matlab写法如下:syms x(t) y(t) z(t)
eqn1 = (diff(x,t)
== 2*x-3*y+3*z+t);
eqn2 = (diff(y,t)
== 4*x-5*y+3*z+t);
eqn3 = (diff(z,t)
== 4*x-4*y+2*z+t);
eqns = [eqn1 eqn2 eqn3];
[x,y,z] = dsolve(eqns)方程和初始条件中等号要写成双等号,即==。代码中表示微分不再使用D,而是diff()形式,diff(y,x,n)表示y关于x的n阶导。输出结果同上。求方程数值解常微分方程数值解法的特点是:对求解区间进行剖分,然后把微分方程离散成在节点上的近似公式或近似方程,然后结合定解条件求出近似解。[自变量,函数值]=solver('f',[初值,终值],初始值,options)1、使用matlab求解数值解的时,高阶微分方程必须转化成一阶微分方程组。2、'f'表示由待解的微分方程编写的m函数文件名,(要将微分方程写成标准形式:左侧为导数,右侧为不含倒数的项),且放在当前工作文件夹下)还可写成@f。3、其中rt、at分别表示为设定的相对误差和绝对误差,缺省时默认为 10^-3 和 10^-6 。options=odeset('reltol',rt,'abstol',at)4、若求解的是一个含有n个未知函数的方程组,则初始值应为一个n维的向量,m文件中的带解方程组应为一个n维列向量。5、solver代表求解函数,常见的求解函数有如下七种(常用标红的求解函数):注:有的微分方程,未知函数随时间(自变量)的变化比较缓慢;而有的微分方程中未知函数在某些时间段内会发生剧烈的变化。前者是非刚性问题;后者是刚性问题。实际建模中多为非刚性问题。例题:\begin{cases} y_1'=y_2y_3\\ y_2'=-y_1y_3\\ y_3'=-0.51y_1y_2 \end{cases} m文件:function dy = df2(x,y)
% x是自变量,y是因变量,由y1,y2,y3组成
dy = zeros(3,1);
% 初始化用来储存因变量一阶导数的列向量(不能写成行向量)
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
%上面四行也可以写成一行:
dy = [ y(2) * y(3);
-y(1) * y(3);
-0.51 * y(1) * y(2)]
end函数名称可以任意取,与m文件名一致;matlab代码:[x, y] = ode45('df2', [0 4*pi], [0 1 1]);
% y是一个有3列的矩阵
plot(x, y(:,1), 'o', x, y(:,2), '*', x, y(:,3), '+')
legend('y1','y2','y3')
% 加上标注
axis([0, 4*pi, -inf, +inf])
% 设置横坐标范围为0-4pi,纵坐标范围不需要设置,写成-inf到+inf输出结果:}
温馨提示:该条问答的文字/图片中可能存在外站链接、联系方式和其他风险信息,请注意识别,谨防上当受骗!各位高手帮忙利用MATLAB求解下述二阶微分方程,特别是具有两个边界条件,非常感谢!~1个回答满意双紧伤判福万配答案追问: 但是,我还是有疑问,为什么初始条件和方程确定了,终值条件就确定了?也就是说,只需要初始条件就可以确定方程的解,为什么?? 您可能感兴趣的内容广告相关问题matlab 二阶微分方程 求解1、建立微分方程的自定义函数,odefun(容x,y)2、当a=10、θ=π/6时,执行下列代码theta=pi/6;用matlab解二阶微分方程>=1在[1/2,2]上恒成立
a/x+xlnx>=1
a>=xx^2lnx
令h(x)=xx^2lnx
h`(x)=12xlnxx
令h`(x)=0,x=1
h(x)在[1/2,1]递增,[1,2]递减
h(x)最大为h(1)=1
∴a>=1 第...用matlab解二阶微分方程function Myexamp1
clear,clc,
tspan = [0 20]; % t 的取值范围
y用matlab解二阶微分方程>=1在[1/2,2]上恒成立
a/x+xlnx>=1
a>=xx^2lnx
令h(x)=xx^2lnx
h`(x)=12xlnxx
令h`(x)=0,x=1
h(x)在[1/2,1]递增,[1,2]递减
h(x)最大为h(1)=1
∴a>=1 第...matlab解二阶微分方程你的方程即为:y'*y' + y''*y' +w/k =0s = dsomatlab求解齐次微分方程.你想要的是dsolve这个命令吧(1)求通解的命令格式:dsolve(‘微分方程’,‘自变量’)注:微分方程在输入时,一matlab求非线性微分方程组微分方程函数文件 function df=fun(t,X) x=X(1);y=X(2); dxdt=x*(84-0.02查看更多点我做任务,抽手机哦
恭喜完成日常任务“天天助人1” 10金币奖励已发放
继续做任务
任务列表啊哦,你还是无名氏 登录登录做任务,奖励多多,还可抽手机哦~返回顶部侵权投诉意见反馈微博恭喜您升到级!获得Lv升级宝箱,快开启吧!开启宝箱 暂不开启}
解微分方程有两种解,一种是解析解,一种是数值解,这两种分别对应不同的解法解析解利用dsolve函数进行求解syms
x;
s = dsolve('eq1,eq2,...', ’cond1,cond2,...', 'v');
%eq:微分方程
%cond:条件
%v:独立变量
%形如:方程:y'= f(t,y),初值:y(t0) = y0
1.求解析解 dsolve('Du = 1+ u^2','t')
ans =
tan(C2 + t)
1i
-1i

的解析解s = dsolve('D2y=3*y+2*x','x');
% D2y用以表示y的二阶导数,默认是以t为自变量的,所以最好指明自变量为x.
syms y(x);
s = dsolve([diff(y,x,2) == 3*y+2*x], [y(0) == 5])
% diff内依次是函数、自变量、微分阶数,方程用==表示相等而不是赋值
2.初值问题求初值问题s = dsolve('Dy = y - 2*t / y','y(0) =1');
3.边界问题求边界问题s = dsolve('x*D2y - 3*Dy =x^2','y(1)=0','y(5) = 0','x');
4.高阶方程求解方程s=dsolve('D2y =cos(2*x) - y','y(0) =1','Dy(0) = 0','x');
simplify(s);
(eqn,cond,‘IgnoreAnalyticConstraints’,false) %设置不化简结果
5.方程组问题求解方程组 [f,g]= dsolve('Df = f + g','Dg = -f + g','f(0)=1','g(0) = 2','x');
一些例子 dsolve('D2y+4*Dy+29*y = 0','y(0) = 0','Dy(0)= 15 ','x')
ans =
3*sin(5*x)*exp(-2*x)
[x y z] =
dsolve('Dx = 2*x-3*y+3*z','Dy = 4*x-5*y+3*z','Dz = 4*x-4*y+2*z')
x =
C7*exp(2*t) + C8*exp(-t)
y =
C7*exp(2*t) + C8*exp(-t) + C9*exp(-2*t)
z =
C7*exp(2*t) + C9*exp(-2*t)
%可以对其进行简化操作
x = simplify(x)
x = C7*exp(2*t) + C8*exp(-t)
y = simplify(y)
y =exp(-2*t)*(C9 + C8*exp(t) + C7*exp(4*t))
数值解%龙格库塔法(Runge-Kutta法)
xfun=@(t,x)0.3.*x.*(1-x/8); %定义赋值函数r=0.3,k=8
[tout,xout]=ode45(fun,[0,40],0.1)
%方程数值解,四五阶RK法
[tout,xout]=ode23(xfun,[t0,tfinal],x0) %二三阶RK法
%%
ode系列数值求解形如
/
=
( , )的微分方程组, 并绘图。
xfun: 输入参数,函数必须恰有t,x两个变量,用函数文件定义的fun.m则用@fun或‘fun’调用。
t0:输入参数,t的初始值。
tfinal:输入参数,t的终值。
x0:输入参数,x的初始值。
tout: 离散的自变量值, xout: 离散的函数值。
%%
同时也有一些其他的求解语句和输出语句%%
其他的求解语句
ode45
ode113
ode15s
ode23s
ode23t
ode23tb
其他的输出语句
odeplot
odeprint
odephas2
odephas3
%%
一个例子求的数值解首先对该方程进行换元然后建立m文件function fyy=rhf(t,x)
fyy=[y(1).*(1-y(2).^2)+y(2);y(1)];
end
最后计算数值解y0=[0.25,0]’;
[t,y]=ode23(‘rhf’,[0,0.25],y0);
plot(t,y)
一些例子%vdp1000.m
function dy = vdp1000(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 1000*(1-y^2)*y2-y1;
end
%命令行输入
[T,Y] = ode15s('vdp1000',[0 3000],[2 0]);%第一个参数是文件名,第二个参数是初始时间和终止时间第三个参数是y1和y2的初值
plot(T,Y(:,1),'-');
%结果是T时间
plot(T,Y(:,1),'-k');,画Y数组中的第一列数随着T的变化曲线,‘-k’表示颜色黑色实线,
%定义函数
function dy=eq1(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=1/5*sqrt(1+y(1)^2)/(1-x);
end
调用
x0=0;
xf=0.9999;
[x,y]=ode15s('eq1',[x0 xf],[0 0]);
plot(x,y(:,1),'-')
hold on
y=0:0.01:2;
plot(1,y,'*')
微分方程模型1.种群增长Logistic模型N(t)表示在时刻 t时刻种群数量
r 表示种群的内禀增长率,即在没有资源限制下的种群增长率
K表示环境载量,反映资源环境对种群增长的制约作用
2.生物种群竞争模型用 N1(t)和N2(t)
分别表示在时刻
甲、乙两个种群数量。
a11 表示种群甲自身的被抑制的情况
a12 表示种群乙对种群甲的竞争力
参考: https://zhuanlan.zhihu.com/p/162296418}

我要回帖

更多关于 matlab如何解微分方程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信