美好的一天。我感兴趣的解决形式的问题:Matlab - 矩阵微分方程[更新矩阵值? ]
x_dot = A + F,
用Matlab。数值解算器(ode23/ode45)的用法看起来很简单,但在我的情况下,矩阵A和矢量F是状态相关的。因此,我需要在每个迭代步骤后使用新派生的状态来更新它们。
实际上可以使用ode23/ode45来完成吗?我需要遵循另一条路径吗?
在此先感谢,任何洞察赞赏。
美好的一天。我感兴趣的解决形式的问题:Matlab - 矩阵微分方程[更新矩阵值? ]
x_dot = A + F,
用Matlab。数值解算器(ode23/ode45)的用法看起来很简单,但在我的情况下,矩阵A和矢量F是状态相关的。因此,我需要在每个迭代步骤后使用新派生的状态来更新它们。
实际上可以使用ode23/ode45来完成吗?我需要遵循另一条路径吗?
在此先感谢,任何洞察赞赏。
你的问题很适合ode45
的描述。例如,采取以下没有意义的方程和数值求解T的系统= [0,1],X(0)=(1,1):
A = @(t,x) [ x(2), exp(-t) ; ...
exp(-2*t), x(1) ];
F = @(t,x) [ -0.1*x(2) ; ...
sin(2*pi*t) ];
[t_out, x_out] = ode45(@(t,x) A(t,x)*x + F(t,x), 0:0.01:1, [1;1]);
figure();
plot(t_out,x_out(:,1), '-b');
hold on;
plot(t_out,x_out(:,2), '-r');
感谢您花时间回答。我正在处理的问题是非线性的,它在功能方面是一个多层次的结构,但会尝试按照您提出的方式工作。 –
@ParaskevasDimitris我不确定什么多层次的手段(你是在谈论调用函数调用其他函数的函数?),但所有的元素都在那里:系统是非线性的'x'方面,并且是非 - 同质的,ODE的唯一要求是明确的(即用x'来解决)。你构造'A'和'F'的方式是语法问题。但是,只要你也提供了详细的信息,这个例子就可以变得更具体。你决定。 –
是的,实际上是这样。感谢您的时间/见解,非常感谢。 –
你能告诉我们什么更新A和F是?如果它们是线性的,你应该能够将它重新排列成一个更大的矩阵微分方程。 –
换句话说,作为x和t的函数,A_dot和F_dot是什么? –
这是可能的。 'ode45'以'x'(t)= f(t,x)'的形式求解非刚性微分方程,你的问题符合描述。在命令窗口输入'doc ode45'获取详细信息。 –