结合for循环/ while循环和ODE45

时间:2014-05-14 12:38:43

标签: matlab ode

我想知道是否可以合并for-loops/while-loops and ODE45 ?,请查看以下示例:

我有一个函数(ode),我想在不同的ic(初始条件)下解决:

ser = @(x) x.^(-0.3) - x.^(1.8); % the function
tspan = 1:0.02:2; 
x0 = 0.5;
% x0 = 0.8;
% x0 = 1.2; 
% x0 = 1.8;
% x0 = 2; 
% x0 = 2.5; 
[~, x_t] = ode45(@(t,x) ser(x), tspan, x0);
plot(tspan,x_t,'r-') 

并在最后绘制solution curves

有没有办法传递另一个ic而不用手动操作,比如循环?或任何其他方式来优化这一步骤?如果我能从中获得一些帮助,我将非常感激,因为我必须计算15到25个不同ODEs的许多ic(更复杂的)。

提前致谢!

PS。如果代码必须更改(例如,x0或解决方案x_t的名称不同),那就没问题了!

1 个答案:

答案 0 :(得分:1)

如果您有预定义的号码。 ic你可以使用它来循环:

 for i=1:NoOfic
      test_mat(i,:)=test_ode_45(x(i),tspan);
  end

您应该在足够的维度上预定义矩阵(test_mat),例如

test_mat = zeros(NoOfic, SizeOftspan)

显然我已将变量NoOficSizeOftspan定义为具体数字

我的整个测试代码是:

tspan = 1:0.02:2;
x= [0.4 0.8 1.2 1.5 2.6];
sizeOftspan = size(tspan);
sizeOfFamily= size(x);
test_mat = zeros(sizeOfFamily(2),sizeOftspan(2));

test_tes= test_ode_45(x(1),tspan);
  for i=1:sizeOfFamily(2)
      test_mat(i,:)=test_ode_45(x(i),tspan);
  end
plot(tspan, test_mat)

我的test_ode_45函数是一个简单的x * sin(t)函数