Extrapolating value from function to a for loop and passing it back to the function


Extrapolating value from function to a for loop and passing it back to the function


function Test()

a = 2;
b = 1;
c = 0.5;
q = 0.001;
r = 10;

function F = Useful(x) %calculates existing values for x with size 11

eq1 = (1*(0.903*x(2))^(-1))-(0.903*x(1));
eq2 = (1*(0.665*x(3))*(0.903*x(2))^(-1))-0.903*x(4);
eq3 = (1*(0.399*x(5))*(0.903*x(2)))-0.665*x(6);
eq4 = (1*(0.399*x(5))*(0.903*x(2))^2)-0.903*x(7);
eq5 = (1*(0.399*x(5))*(0.903*x(2))^3)-1*x(8);
eq6 = (1*(0.665*x(3))*(0.399*x(5))*(0.903*x(2)))-1*x(9);
eq7 = (1*(0.665*x(3))*(0.399*x(5))*(0.903*x(2))^2)-0.903*x(10);
eq8 = (1*(0.665*x(3))*(0.399*x(5)))-0.903*x(11);
eq9 = x(3)+x(4)+x(9)+x(10)+x(11)-a;
eq10 = x(5)+x(6)+x(7)+x(8)+x(9)+x(10)+x(11)-b;
eq11 = x(2)+x(6)+2*x(7)+3*x(8)+x(9)+2*x(10)-x(1)-x(4)-c;

F = [eq1;eq2;eq3;eq4;eq5;eq6;eq7;eq8; eq9; eq10; eq11];

end

Value(1,1) = 0;

for d = 2:100

x = fsolve(@Useful,x0,options); %Produces the x(1) to x(11) values

Value(1,d) = (x(3)+x(5))*d+Value(1,d-1); %Gives a new value after each iteration

a = a-x(3);
b = b-x(5);
c = c-x(2);

end

function Zdot = rhs(t,z) %z = (e1,e2,e3,e4,e5)
Zdot=zeros(5,1);

Zdot(1) = -1*z(1);
Zdot(2) = 1*z(1);
Zdot(3) = 1*z(1) - 1*z(2)*z(3);
Zdot(4) = 1*1*z(1) - Value(1,100)*H(z(3))*z(4)*z(4);
Zdot(5) = Value(1,100)*H(z(3))*(z(4));
end

function hill = H(x)
hill = q/(q+x^r);
end

[T,Y] = ode15s(@rhs, [0, 120], [1, 0, 1, 0, 0]); %Solve second function with values giving z(1) to z(5)
plot(T,Y(:,5))
end



I'm wondering, is it possible to pass on each Value obtained (Value (1), Value (2)... so on), into "function Zdot" or is only the final value possible to pass on? Essentially is this possible to implement:


function Zdot = rhs(t,z) %z = (e1,e2,e3,e4,e5)
Zdot=zeros(5,1);

Zdot(1) = -1*z(1);
Zdot(2) = 1*z(1);
Zdot(3) = 1*z(1) - 1*z(2)*z(3);
Zdot(4) = 1*1*z(1) - Value(1,d)*H(z(3))*z(4)*z(4);
Zdot(5) = Value(1,d)*H(z(3))*(z(4));
end



Any insights would be much appreciated and I would be extremely grateful. Thank you in advance!





What exactly is d (supposed to be) at the time the solver calls for the evaluation of rhs?
– LutzL
2 days ago



d


rhs





d is simply the array position. The idea is that each time the solver runs, the position moves up by one. So... Run ODE with Value (1,1) then ODE with Value (1,2) and so on...
– Borys Ostapienko
22 hours ago





So you set either d or Value (1,d) as parameter of the ODE, which can be passed via anonymous function or inside an option structure via odeset.
– LutzL
21 hours ago









By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Export result set on Dbeaver to CSV

Opening a url is failing in Swift