Declaring an anonymous function for solving an odes system
20 次查看(过去 30 天)
显示 更早的评论
Hi there,
I am trying to integrate a system of ODES, I am being partially successful defining the function in another file, but when trying to do that using an anonymus function, it is not working, I am not sure what is wrong.
So, the working version is:
in F.m file:
function x = F(t,theta)
N = 10; lambda = 1; k = 4;
omega = lambda*tan(pi*(rand(1,N)-0.5));
x = omega' + k/N*sum(sin(repmat(theta,[1 N])' - repmat(theta,[1 N])),2);
and then:
N = 10;
[t,x] = ode45(@F,[0,10],ones(N,1));
And the one Im trying to make work is:
N = 10; lambda = 1; k = 4;
omega = lambda*tan(pi*(rand(1,N)-0.5));
FK = @(t,theta) omega' + k/N*sum(sin(repmat(theta,[1 N])' - repmat(theta,[1 N])),2) ;
[t,x] = ode45(FK,[0,10],ones(N,1));
Thanks in advance
2 个评论
Adam
2015-9-29
What do you mean by 'not working'? Is there an error message or are you just getting incorrect results?
采纳的回答
gringer45
2015-9-29
1 个评论
Walter Roberson
2015-9-29
No, the other way around. When you use rand() or randn() in your ODE function, you make the function discontinuous and non-repeatable. This would drive the integrator to smaller and smaller step sizes unless you are using a fixed-step solver. If you must have randomness, you should define the random contributions ahead of time, possibly with some method of interpolating at interior times.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Ordinary Differential Equations 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!