如何将函数的导数作为函数句柄的输入包含在内?

时间:2018-04-03 17:19:11

标签: matlab

考虑以下与常微分方程组的解决方案相对应的代码片段

da / dt = t * a /(a ^ 2 + b ^ 2 + 1)

db / dt =(b-a)^ 2 /(b ^ 2 + c ^ 2 + 1)

dc / dt = t ^ 2 * c ^ 2 /(a ^ 2 + c ^ 2 + 1)

clear;clc;
initial_conditions = [1 0 -1]; 

F=@(t,y) [t.*y(1)./(y(1).^2+y(2).^2+1);
(y(2)-y(1)).^2./(y(2).^2+y(3).^2+1);
t.^2.*y(3).^2./(y(1).^2+y(3).^2+1)];

[t y]=ode23tb(F,[0 2], initial_conditions);

plot(t, y(:,1), 'r', t, y(:,2), 'g', t, y(:,3), 'b')

其中y(1)对应于a,y(2)对应于b,y(3)对应于c。如何包含附加微分方程, dz / dt = 5 * da / dt,z(0)= 2?我不确定如何在函数句柄中包含它,因为它是右侧一个状态变量的导数,而不是其中一个状态变量本身 - 正如其他方程式一样。

感谢。

1 个答案:

答案 0 :(得分:0)

由于$ awk ' BEGIN { PROCINFO["sorted_in"]="@ind_num_asc" # I hope numeric order works with text } { a[$1][$5][$4][$3]=$0 } END { for(i in a) # brand for(j in a[i]) # price for(k in a[i][j]) # mileage for(l in a[i][j][k]) # year print a[i][j][k][l] }' file Honda Civic 1990 100239 5000 Honda Accord 2008 80324 12839 Subaru Legacy 2003 72198 4300 Subaru WRX 2017 700 25000 Toyota Camry 1999 120000 2000 Toyota Sienna 2005 75600 17832 a(t)b(t)及其衍生品不依赖于c(t)z(t),问题的性质仍然存在只有3个未知数的ODE。

因此,虽然您可以将其编码为4-unknowns ODE并让dz/dt解决整个集合,但它效率低下。只需解析代码已经执行的ode23()ab,并整合来自c z(t)的{​​{1}}。