Matlab 组合for循环/while循环和ODE45

Matlab 组合for循环/while循环和ODE45,matlab,ode,Matlab,Ode,我想知道是否可以将for loops/while loops和ODE45结合起来,请看下面的示例: 我有一个函数(ode),我想在不同的ic(初始条件)下求解: 并在末尾绘制溶液曲线 有没有一种方法可以在不手动操作的情况下传递另一个ic,比如循环?或者用其他方法来优化这个步骤?如果我能在这方面得到一些帮助,我将非常感激,因为我必须在15到25个不同的ic上计算许多ODE(更复杂的ODE) 提前谢谢 注:如果代码必须更改(例如x0s或解决方案x_t的不同名称),则可以 如果您有预定义数量的ic,您

我想知道是否可以将
for loops/while loops和ODE45
结合起来,请看下面的示例:

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

并在末尾绘制
溶液曲线

有没有一种方法可以在不手动操作的情况下传递另一个
ic
,比如循环?或者用其他方法来优化这个步骤?如果我能在这方面得到一些帮助,我将非常感激,因为我必须在15到25个不同的
ic
上计算许多
ODE
(更复杂的ODE)

提前谢谢


注:如果代码必须更改(例如
x0
s或解决方案
x_t
的不同名称),则可以

如果您有预定义数量的
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)函数

我说得对,你想画一系列函数f_x(t)。族参数x在数组中的位置?如果是这样的话,您可以将数据传输到matrix.Hi@Minion,打印部分实际上不那么重要。你能再多说一点关于如何将值传递到矩阵吗?或者它会是什么样子?我在考虑一个矩阵,在你给出的示例代码中,它有6行51列。表示上述x0值之一的每一行和表示tspan的列。然后你可以直接绘图(tspan,Matrix)很抱歉这么慢,但是我知道
x0s
可以生成一个向量
X0
,它是(6x1),我看到另一个
向量(比如说
T
)由
tspan
构成,它将是
T=(1x51)
但如何形成这两个向量的
矩阵
,这如何帮助我解决问题?而且,如果我向
matlab
展示一个包含
n
初始条件的向量(这次是6),那么
matlab
会不会认为我传递的是一个ODE系统,而不仅仅是一个ODE?我发布了一个循环,应该可以实现这一点。在这个循环中,我计算为
x(i)
编程的
test\u ode\u 45
-函数和所有
tspan
元素,并将结果保存在测试表的第i行。最后,您可以使用
绘图(tspan,test\u mat)
进行绘图。太棒了!感谢@Minion提供的可视示例,我现在明白了!并且,来自
test\u mat
的每个
对应于一个
时间序列
/
解决方案
对吗?还是每个
列都是
?这取决于您的实现。如果你像我那样做,每一行代表一个时间序列(51个元素)。但是您可以很容易地更改代码以转置它。只需记住更改
test\u mat
的定义以及循环索引在matrix@Minion我相信我做错了什么,但我看不出错误在哪里。我使用了你的代码,只是修改了一点,包括一个
句柄函数
,我注意到绘图上有一些东西,而不是让曲线从
ic开始
我让它们从不同的值开始。。。请看我上面问题的扩展版本。@SergioHaram如果你想知道为什么图不分别从[1 2 3]开始,那只是因为你的
sin(t)@Minion是的,这是我关心的,图的初始值。这是一个奇怪的图形行为,但现在你们已经向我澄清了这一点,我没有更多的问题。再次感谢!
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)