How to plot graph of value of variable when a parameter is varied
19 views (last 30 days)
Show older comments
Hi all,
I have a system of equations and I would like to solve for e, τ, and k. However, I want to assume that the parameter R can take on several different values (e.g. 0.5, 1, 1.5). In particular, I hope to plot a graph of how the solution for any of my variables e, τ or k varies with R. I am really struggling with how this can be implemented in MATLAB. Any help will be much appreciated.
0 Comments
Accepted Answer
Ameer Hamza
on 9 Apr 2020
Edited: Ameer Hamza
on 9 Apr 2020
See fsolve(): https://www.mathworks.com/help/optim/ug/fsolve.html
Write your system of equation in the form
Where , and are the three equations in your queston. Then apply fsolve() function.
This is the code:
f_1 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - 0.336*e.^-0.3./(tau+R.*k);
f_2 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - 0.5./tau;
f_3 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - (R-0.3)./(tau+R.*k);
f = @(e, tau, k, R) [f_1(e,tau,k,R); f_2(e,tau,k,R); f_3(e,tau,k,R)];
R = [0.5, 1, 1.5];
sol = zeros(numel(R), 3);
for i=1:numel(R)
sol(i,:) = fsolve(@(x) f(x(1),x(2),x(3), R(i)), rand(1,3));
end
plot(R, sol);
legend({'e', 'tau', 'k'});
5 Comments
Ameer Hamza
on 9 Apr 2020
Edited: Ameer Hamza
on 9 Apr 2020
Teck, your equation does seem to have multiple solutions, and the solution you mentioned for R=1 is correct. I tried different initial points, and values of R. The fsolve() is able to find a solution if R >= 0.8, but for smaller values, it cannot find a solution
f_1 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - 0.336*e.^-0.3./(tau+R.*k);
f_2 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - 0.5./tau;
f_3 = @(e, tau, k, R) 1./(0.8*e.^0.7-e-tau-k) - (R-0.3)./(tau+R.*k);
f = @(e, tau, k, R) [f_1(e,tau,k,R); f_2(e,tau,k,R); f_3(e,tau,k,R)];
R = [0.5, 0.8, 1, 1.5, 2];
sol = zeros(numel(R), 3);
for i=1:numel(R)
sol(i,:) = fsolve(@(x) f(x(1),x(2),x(3), R(i)), 1e-6.*rand(1,3));
f(sol(i,1), sol(i,2), sol(i,3), R(i)) % to check if the 3 equations are true.
end
plot(R, sol);
legend({'e', 'tau', 'k'});
More Answers (1)
Torsten
on 9 Apr 2020
Your equations can only be solved for one value of R, namely R = 0.3 + 0.366*exp(-0.3).
This can be seen by dividing equation 1 by equation 3.
4 Comments
Ameer Hamza
on 9 Apr 2020
Torsten's analysis is correct. This system does have a closed-form solution. I used a symbolic toolbox to solve this system of equation, and it gives more accurate results (as expected) at R=0.5 as compared to the numeric solver. Following code shows the solution with symbolic approach
syms e tau k R
eq1 = 1./(0.8*e.^0.7-e-tau-k) - 0.336*e.^-0.3./(tau+R.*k);
eq2 = 1./(0.8*e.^0.7-e-tau-k) - 0.5./tau;
eq3 = 1./(0.8*e.^0.7-e-tau-k) - (R-0.3)./(tau+R.*k);
r = [0.5 1 1.5];
sols = zeros(numel(r), 3);
for i=1:numel(r)
sol = solve([eq1==0 eq2==0 eq3==0], [e tau k]);
sols(i,1) = subs(sol.e(1), R, r(i));
sols(i,2) = subs(sol.tau(1), R, r(i));
sols(i,3) = subs(sol.k(1), R, r(i));
end
sols = double(sols);
plot(r, sols);
legend({'e', 'tau', 'k'});
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!