在matlab中使用ode45来解决具有条件的颂歌系统

时间:2015-07-03 16:31:20

标签: matlab

这里有点新手...... 我正在尝试解决一个6 odes的系统,但条件是if(x(1)<= 0.1)然后x(6)= x(6)/2.0。我如何将其添加到代码中? 谢谢!

1 个答案:

答案 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则它减半。