How to change ode45 from solution for range of values, to solution just for one value?
1 次查看(过去 30 天)
显示 更早的评论
I have next function file:
function [f,R]=fun_z3(z,p)
beta=1;
ri=0.7;
R=ri-z*(ri-1);
f=zeros(4,size(p,2));
f(1,:)=-32.*beta./(R.^4.*p(1,:));
f(2,:)=(-8*f(1,:)./R-f(1,:).*p(2,:))./p(1,:);
f(3,:)=(-p(2,:).*f(2,:)-8.*f(2,:)./R-8.*f(1,:)./(R.*R.*p(1,:))-f(1,:).*p(3,:))./p(1,:);
f(4,:)=(-f(2,:).*p(3,:)-f(3,:).*p(2,:)+8.*(-f(3,:)./R- (f(2,:)./p(1,:)-p(2,:).*f(1,:)./(p(1,:).*p(1,:)))./(R.*R)) -f(1,:).*p(4,:))./p(1,:);
where I call it with
[zv, pv] = ode45(@fun_z3, [1 0], [1; 0; 0; 0]);
Now, I need to calculate pv, but just in case where zv=0 (in upper file zv=1:0), but for series of beta values. When I change boundaries for z, it means [1 0] to [0 0] or [0], I got some errors. Is it possible implement series of beta values just as range of values?
0 个评论
采纳的回答
madhan ravi
2019-1-9
Just parameterize function (lookup doc):
beta=....range of values
for beta = beta
ode45(@(z,p)fun_z3(z,p,beta), [1 0], [1; 0; 0; 0])]; % function call
end
function [f,R]=fun_z3(z,p,beta) % function definition
ri=0.7;
R=ri-z*(ri-1);
f=zeros(4,size(p,2));
f(1,:)=-32.*beta./(R.^4.*p(1,:));
f(2,:)=(-8*f(1,:)./R-f(1,:).*p(2,:))./p(1,:);
f(3,:)=(-p(2,:).*f(2,:)-8.*f(2,:)./R-8.*f(1,:)./(R.*R.*p(1,:))-f(1,:).*p(3,:))./p(1,:);
f(4,:)=(-f(2,:).*p(3,:)-f(3,:).*p(2,:)+8.*(-f(3,:)./R- (f(2,:)./p(1,:)-p(2,:).*f(1,:)./(p(1,:).*p(1,:)))./(R.*R)) -f(1,:).*p(4,:))./p(1,:);
end
4 个评论
madhan ravi
2019-1-14
It would be [0 1] but honestly I have no idea why the p number of values vary in every iteraration.
更多回答(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!