How to plot graph of value of variable when a parameter is varied

11 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 9 Apr. 2020
Bearbeitet: Ameer Hamza am 9 Apr. 2020
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 Kommentare
Ameer Hamza
Ameer Hamza am 9 Apr. 2020
Bearbeitet: Ameer Hamza am 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'});

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Torsten
Torsten am 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 Kommentare
Teck Lim
Teck Lim am 9 Apr. 2020
Thanks for the suggestion. I will try that out.
Ameer Hamza
Ameer Hamza am 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'});

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Mathematics finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by