这里有点新手...... 我正在尝试解决一个6 odes的系统,但条件是if(x(1)<= 0.1)然后x(6)= x(6)/2.0。我如何将其添加到代码中? 谢谢!
答案 0 :(得分:0)
这是http://www.mathworks.com/help/matlab/ref/ode45.html
稍微修改过的基本示例1首先创建一个新的Matlab函数并将其命名为rigid.m
。你可以在里面放任何代码,但试试这个:
function dy = rigid(t,y)
dy = zeros(6,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
dy(4) = y(5) * y(6);
dy(5) = -y(4) * y(6);
dy(6) = -0.51 * y(4) * y(5);
if(dy(6)<0.5)
dy(6)=dy(6)/2;
end
end
现在运行以下三行:
options = odeset('RelTol',1e-4,'AbsTol',1e-4);
[T,Y] = ode45(@rigid,[0 12],[0 1 1,0 1 1],options);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.',T,Y(:,4),'-',T,Y(:,5),'-.',T,Y(:,6),'.');
完成了。 Matlab求解器应该很好地处理导数中的不连续性,但这取决于你的问题。无论如何,在这种情况下如果dy(6)<0.5则它减半。