关于用matlab解微分方程组的问题
用matlab解如下问题:dx/dt=2y^2-2dy/dt=2yz-x-1dz/zt=2z^2-2y-4x(3)=1,y(3)=0,z(3)=2只知道一个边值求在[0,...
用matlab解如下问题:
dx/dt=2y^2-2
dy/dt=2yz-x-1
dz/zt=2z^2-2y-4
x(3)=1,y(3)=0,z(3)=2 只知道一个边值
求在[0,3]上的解,有表达式更好,数值解也行,或者能得出[0,3]上的曲线也行”
用如下解法:
%选取状态变量
%x1=x,x2=y,x3=z
%各状态变量的一阶导数
%x1'=x'=2*x(2)^2-2
%x2'=y'=2*x(2)*x(3)-x(1)-1
%x3'=z'=2*x(3)^2-2*x(2)-4
%
%微分方程表达式
odefun=@(t,x)[2*x(2).^2-2
2*x(2).*x(3)-x(1)-1
2*x(3).^2-2*x(2)-4];
%初值,就是各个状态变量的初值
x0=[1 0 2];
%微分变量区间
tspan=[3 0];
%调用ode45函数
[t,x]=ode45(odefun,tspan,x0);
%绘制[x,y,z]曲线
plot3(x(:,1),x(:,2),x(:,3))
x ”
%也可得x的曲线
plot(x)
由此方法可得到t=0时刻[x(1) x(2) x(3)]=[2.4537 0.9962 1.7306]
若用t=0时的值作为初值再解此方程组:
%微分方程表达式
odefun=@(t,x)[2*x(2).^2-2
2*x(2).*x(3)-x(1)-1
2*x(3).^2-2*x(2)-4];
%初值,就是各个状态变量的初值
x0=[2.4537 0.9962 1.7306];
%微分变量区间
tspan=[0 3];
%调用ode45函数
[t,x]=ode45(odefun,tspan,x0);
x
plot(x)
%由此可得t=3时的值[x(1) x(2) x(3)]=[ 0.7388 -0.8966 -1.0328]
与已知t=3时的值[x(1) x(2) x(3)]=[ 1 0 2]存在差异,且绘出的曲线也与上一曲线有很大不同
请问:出现该差异的原因是什么?该差异是否是误差范围内?能否消除?是否是我的算法有问题?谢谢! 展开
dx/dt=2y^2-2
dy/dt=2yz-x-1
dz/zt=2z^2-2y-4
x(3)=1,y(3)=0,z(3)=2 只知道一个边值
求在[0,3]上的解,有表达式更好,数值解也行,或者能得出[0,3]上的曲线也行”
用如下解法:
%选取状态变量
%x1=x,x2=y,x3=z
%各状态变量的一阶导数
%x1'=x'=2*x(2)^2-2
%x2'=y'=2*x(2)*x(3)-x(1)-1
%x3'=z'=2*x(3)^2-2*x(2)-4
%
%微分方程表达式
odefun=@(t,x)[2*x(2).^2-2
2*x(2).*x(3)-x(1)-1
2*x(3).^2-2*x(2)-4];
%初值,就是各个状态变量的初值
x0=[1 0 2];
%微分变量区间
tspan=[3 0];
%调用ode45函数
[t,x]=ode45(odefun,tspan,x0);
%绘制[x,y,z]曲线
plot3(x(:,1),x(:,2),x(:,3))
x ”
%也可得x的曲线
plot(x)
由此方法可得到t=0时刻[x(1) x(2) x(3)]=[2.4537 0.9962 1.7306]
若用t=0时的值作为初值再解此方程组:
%微分方程表达式
odefun=@(t,x)[2*x(2).^2-2
2*x(2).*x(3)-x(1)-1
2*x(3).^2-2*x(2)-4];
%初值,就是各个状态变量的初值
x0=[2.4537 0.9962 1.7306];
%微分变量区间
tspan=[0 3];
%调用ode45函数
[t,x]=ode45(odefun,tspan,x0);
x
plot(x)
%由此可得t=3时的值[x(1) x(2) x(3)]=[ 0.7388 -0.8966 -1.0328]
与已知t=3时的值[x(1) x(2) x(3)]=[ 1 0 2]存在差异,且绘出的曲线也与上一曲线有很大不同
请问:出现该差异的原因是什么?该差异是否是误差范围内?能否消除?是否是我的算法有问题?谢谢! 展开
2个回答
展开全部
引入变量T
令T=3-t
于是t属于[0,3]对应于T属于[0,3]
原微分方程组变成:
dx/dT=-(2y^2-2)
dy/dT=-(2yz-x-1)
dz/dT=-(2z^2-2y-4)
边值:
x(3)=1,y(3)=0,z(3)=2
对应于:
x(T=0)=1
y(T=0)=0
z(T=0)=2
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_rk4_hennry202(t,xx)
x=xx(1);
y=xx(2);
z=xx(3);
y=[-(2*y.^2-2)
-(2*y.*z-x-1)
-(2*z.^2-2*y-4)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dxdt=zhidao_rk4_hennry202_2(t,xx)
x=xx(1);
y=xx(2);
z=xx(3);
dxdt=[(2*y.^2-2)
(2*y.*z-x-1)
(2*z.^2-2*y-4)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%用T计算出T=3,即t=0的时候
[T,xyzT]=ode45('zhidao_rk4_hennry202',[0 3],[1,0,2]);
xyzT(end,:)
%用上面的计算结果来计算
[t,xyzt]=ode45('zhidao_rk4_hennry202_2',[0 3],xyzT(end,:));
xyzt(end,:)
ans =
2.4536 0.9961 1.7306
ans =
1.0506 0.1829 2.6608
误差也挺大(最大有33%相对误差)
令T=3-t
于是t属于[0,3]对应于T属于[0,3]
原微分方程组变成:
dx/dT=-(2y^2-2)
dy/dT=-(2yz-x-1)
dz/dT=-(2z^2-2y-4)
边值:
x(3)=1,y(3)=0,z(3)=2
对应于:
x(T=0)=1
y(T=0)=0
z(T=0)=2
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_rk4_hennry202(t,xx)
x=xx(1);
y=xx(2);
z=xx(3);
y=[-(2*y.^2-2)
-(2*y.*z-x-1)
-(2*z.^2-2*y-4)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dxdt=zhidao_rk4_hennry202_2(t,xx)
x=xx(1);
y=xx(2);
z=xx(3);
dxdt=[(2*y.^2-2)
(2*y.*z-x-1)
(2*z.^2-2*y-4)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%用T计算出T=3,即t=0的时候
[T,xyzT]=ode45('zhidao_rk4_hennry202',[0 3],[1,0,2]);
xyzT(end,:)
%用上面的计算结果来计算
[t,xyzt]=ode45('zhidao_rk4_hennry202_2',[0 3],xyzT(end,:));
xyzt(end,:)
ans =
2.4536 0.9961 1.7306
ans =
1.0506 0.1829 2.6608
误差也挺大(最大有33%相对误差)
展开全部
恩上面这个问题的程序是我给出,现在楼主给出了新的问题,我当时没有注意,抱歉,我重新调试下
我猜测出现这种情况的原因是,你的第一次初值就是不正确的,或者不恰当的,也就是说[1 0 2]不是方程在t=3时候的初值
你的问题不需要当边值问题处理,边值问题的定义和Matlab求解,你可以看看我写的教程http://www.matlabsky.com/thread-533-1-1.html
至于解析解Matlab没法找到
>> dsolve('Dx=2*y^2-2','Dy=2*y*z-x-1','Dz=2*z^2-2*y-4','x(3)=1','y(3)=0','z(3)=2' );
Warning: Explicit solution could not be found.
我猜测出现这种情况的原因是,你的第一次初值就是不正确的,或者不恰当的,也就是说[1 0 2]不是方程在t=3时候的初值
你的问题不需要当边值问题处理,边值问题的定义和Matlab求解,你可以看看我写的教程http://www.matlabsky.com/thread-533-1-1.html
至于解析解Matlab没法找到
>> dsolve('Dx=2*y^2-2','Dy=2*y*z-x-1','Dz=2*z^2-2*y-4','x(3)=1','y(3)=0','z(3)=2' );
Warning: Explicit solution could not be found.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询