Ode45 iteration issue
1 次查看(过去 30 天)
显示 更早的评论
Hi,
I'm trying to solve differential equation using ode45 function, the formula looks like this:
[t1,X2] = ode45(@(t,x)fun(t,x,C1,C2,C3,C4),t0,X01);
where parameters C1, C2, C3 and C4 are column vector in size of 1:1001. What I want to do is I need to put them inside of function that ode45 is referring (fun.m) to and use them in equation, but I want the values to change after every iteration. So, for example, at the beginning C1 value I want in is C1(1), the next iteration it's C1(2), next iteration it's C1(3) etc. Is there any way to implement that?
0 个评论
采纳的回答
madhan ravi
2019-5-17
[t1,X2]=deal(cell(numel(C1),1));
for k = 1:numel(C1)
[t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1(k),C2(k),C3(k),C4(k)),t0,X01);
end
1 个评论
madhan ravi
2019-5-19
Update
The code has worked properly, but then after some changes it started to give me 1001x1 cell that has only brackets, like this "[]" and each bracket is empty inside.
The code looks like this
[t1,X2]=deal(cell(numel(C1),1));
[t1,X2]=deal(cell(numel(C2),1));
[t1,X2]=deal(cell(numel(C3),1));
[t1,X2]=deal(cell(numel(C4),1));
for k = 1:numel(C1)
[t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1(k),C2(k),C3(k),C4(k)),t0,X01);
end
Each C is 1x1001 double and has values in it.
That is called preallocation. You don’t need to use the above lines 4 times "ONCE" is enough. You should be seeing values in t1 & X2.
I'm not quite sure if I understand, but even if I do it once it won't pass the proper values to the function (the X2 which is cell has just brackets, as I said) making the results wrong. Going further, if I do the line only once for example C1, how does it pass parameter C2 values to the function?
I have shown the standard procedure and I can't read your mind without knowing your entire code and the changes you made.
更多回答(0 个)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!