我想知道是否可以合并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
的名称不同),那就没问题了!
答案 0 :(得分:1)
如果您有预定义的号码。 ic
你可以使用它来循环:
for i=1:NoOfic
test_mat(i,:)=test_ode_45(x(i),tspan);
end
您应该在足够的维度上预定义矩阵(test_mat),例如
test_mat = zeros(NoOfic, SizeOftspan)
显然我已将变量NoOfic
和SizeOftspan
定义为具体数字
我的整个测试代码是:
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)函数