MATLAB Answers

Plotting the solution of multi-variable non-linear equations (solved using fsolve).

4 views (last 30 days)
Yavar Hayat
Yavar Hayat on 9 Apr 2019
Commented: Yavar Hayat on 10 Apr 2019
These are the equations:
function [fval]= ptfunc(X)
Tcell=X(1);
Pcell=X(2);
Qh=X(3);
Pteg=X(4);
alpha = 0.95;
A = (0.04)^2;
epsilon = 0.88;
sigma = 5.69*10^(-8);
Ta = 298.15;
u=(0.003+1/5)^-(1);
ns = 0.10;
theta = 0.0011;
An=6.4*10^-7;
Hn=0.01;%:0.01:0.06;
N=62;
S=185*10^-6;
rho=10^-5;
den=2*rho;
k=1.5;
Z=(S^2)/(rho.*k);
Tc=298;
r=0.2;
n=0.0001;
hc=0.00009;
num2=2*r*hc;
G=500;
fval(1,1)= -Qh+ alpha*G*A-u*A*(Tcell-Ta)-epsilon*sigma*A*((Tcell.^4)-(Ta^4))-Pcell;
fval(2,1)= -Pcell+ alpha*G*A*ns.*(1-theta.*(Tcell - 298));
fval(3,1)= -Qh + (k*An*N/Hn)*(1-Z*(3*Tcell+Tc)/8)*(Tcell-Tc);
fval(4,1)= -Pteg+(S^2)*An*N*((Tcell-Tc)^2)./(den.*(n+Hn).*(1+num2./Hn).^2);
I need to plot the varaibles with respect to G. How do I do that?

  2 Comments

Stephan
Stephan on 9 Apr 2019
G is a scalar - its value is 500 - so you would plot 4 single points - one for each result from fsolve. Is this what you want to do?

Sign in to comment.

Accepted Answer

Torsten
Torsten on 9 Apr 2019
function main
G = linspace(250,750).';
X0 = [1,1,1,1];
for i=1:numel(G)
sol = fsolve(@(X)ptfunc(X,G(i)),X0);
x(i,:) = sol;
X0 = sol;
end
plot(G,x(:,1))
end
function fval = ptfunc(X,G)
Tcell=X(1);
Pcell=X(2);
Qh=X(3);
Pteg=X(4);
alpha = 0.95;
A = (0.04)^2;
epsilon = 0.88;
sigma = 5.69*10^(-8);
Ta = 298.15;
u=(0.003+1/5)^-(1);
ns = 0.10;
theta = 0.0011;
An=6.4*10^-7;
Hn=0.01;%:0.01:0.06;
N=62;
S=185*10^-6;
rho=10^-5;
den=2*rho;
k=1.5;
Z=(S^2)/(rho.*k);
Tc=298;
r=0.2;
n=0.0001;
hc=0.00009;
num2=2*r*hc;
%G=500;
fval(1,1)= -Qh+ alpha*G*A-u*A*(Tcell-Ta)-epsilon*sigma*A*((Tcell.^4)-(Ta^4))-Pcell;
fval(2,1)= -Pcell+ alpha*G*A*ns.*(1-theta.*(Tcell - 298));
fval(3,1)= -Qh + (k*An*N/Hn)*(1-Z*(3*Tcell+Tc)/8)*(Tcell-Tc);
fval(4,1)= -Pteg+(S^2)*An*N*((Tcell-Tc)^2)./(den.*(n+Hn).*(1+num2./Hn).^2);
end

  4 Comments

Show 1 older comment
Walter Roberson
Walter Roberson on 10 Apr 2019
However, it is working. The reason it does not look like it is working is that one of the results is on the order of 300, and two of them are on the order of 0.1, and the last of them is on the order of 0.01 . You simply cannot see anything in 3 of the 4 lines because they are insignificant on the scale of the first plot.
You could use subplot() to break the values out.
If you have a new enough MATLAB you could use stackedplot()

Sign in to comment.

More Answers (0)

Sign in to answer this question.

Tags

Products


Release

R2017b