empty figure for a given code

1 回表示 (過去 30 日間)
Afnan Mussa
Afnan Mussa 2021 年 4 月 3 日
編集済み: DGM 2021 年 4 月 3 日
I am getting an empty figure for the code below, not sure if the range for Theta is correctly written, i tried with Theta= [0, 120] and Theta= [0:10: 120] but still getting empty figure.
I need to get 5 decreasing curves, with a in y axis and Theta in x axis.
clc
global K A ;
K = 482; %g/ L
A = 1.01; % (X0/Y S0)+1
Theta= 0: 120;
a0= 1;
a1 = ((a0*K-a0+K+Theta)- sqrt((Theta.^2)-2*a0*Theta-2*a0*K*Theta-2*K*Theta+(a0^2)+(a0^2)*(K^2)-2*a0*(K^2)+(K^2)-2*(a0^2)*K+2*a0*K))/(2*(K-A+ Theta));
a2 = ((a1*K-a1+K+Theta)- sqrt((Theta.^2)-2*a1*Theta-2*a1*K*Theta-2*K*Theta+(a1^2)+(a1^2)*(K^2)-2*a1*(K^2)+(K^2)-2*(a1^2)*K+2*a1*K))/(2*(K-A+ Theta));
a3 = ((a2*K-a2+K+Theta)- sqrt((Theta.^2)-2*a2*Theta-2*a2*K*Theta-2*K*Theta+(a2^2)+(a2^2)*(K^2)-2*a2*(K^2)+(K^2)-2*(a2^2)*K+2*a2*K))/(2*(K-A+ Theta));
a4 = ((a3*K-a3+K+Theta)- sqrt((Theta.^2)-2*a3*Theta-2*a3*K*Theta-2*K*Theta+(a3^2)+(a3^2)*(K^2)-2*a3*(K^2)+(K^2)-2*(a3^2)*K+2*a3*K))/(2*(K-A+ Theta));
a5 = ((a4*K-a4+K+Theta)- sqrt((Theta.^2)-2*a4*Theta-2*a4*K*Theta-2*K*Theta+(a4^2)+(a4^2)*(K^2)-2*a4*(K^2)+(K^2)-2*(a4^2)*K+2*a4*K))/(2*(K-A+ Theta));
figure
plot(Theta,a0,Theta,a1,Theta,a2,Theta,a3,Theta,a4,Theta,a5);
xlabel('dimensionless residence time')
ylabel('Substrate Fraction')
axis ([0 120 0 1]);
legend('N1','N2','N3','N4','N5')
fh=figure (1);
title ('Substrate conversion with residence time')
disp([a0(1,end),a1(1,end),a2(1,end),a3(1,end),a4(1,end),a5(1,end)])

回答 (2 件)

darova
darova 2021 年 4 月 3 日
You forgot the dot (element-wise operator)
You can simplify your code using for loop
a0 = 1;
for i = 1:5
a0 = ((a0*K-a0+K+Theta)- % ...
line(Theta,a0)
end

DGM
DGM 2021 年 4 月 3 日
編集済み: DGM 2021 年 4 月 3 日
I'm not sure what your formulae should be for your tasks, but keep in mind the geometry of your variables. While a0 is a scalar as defined, if you're expecting to have any curves to plot, these expressions should be producing vectors. Since we're operating on vectors, we need to pay attention to what we mean when we use multiplication, exponentiation and division operators. If we just want to operate on the elements of the vectors, then use elementwise operators, otherwise you're doing array multiplication and the size will change. In this case, a1, a2, etc were all scalars, so there wasn't anything noticeable to plot.
clc; clf
global K A ;
K = 482; %g/ L
A = 1.01; % (X0/Y S0)+1
Theta= 0: 120;
% a0 etc were scalar, but should be vectors. use elementwise ops where appropriate
a0 = ones(size(Theta));
a1 = ((a0*K-a0+K+Theta) - sqrt((Theta.^2) - 2*a0.*Theta - 2*a0*K.*Theta - 2*K*Theta ...
+ (a0.^2)*(1+K^2) - 2*a0*(K^2) + (K^2) - 2*(a0.^2)*K + 2*a0*K))./(2*(K-A+Theta));
a2 = ((a1*K-a1+K+Theta) - sqrt((Theta.^2) - 2*a1.*Theta - 2*a1*K.*Theta - 2*K*Theta ...
+ (a1.^2)*(1+K^2) - 2*a1*(K^2) + (K^2) - 2*(a1.^2)*K + 2*a1*K))./(2*(K-A+Theta));
a3 = ((a2*K-a2+K+Theta) - sqrt((Theta.^2) - 2*a2.*Theta - 2*a2*K.*Theta - 2*K*Theta ...
+ (a2.^2)*(1+K^2) - 2*a2*(K^2) + (K^2) - 2*(a2.^2)*K + 2*a2*K))./(2*(K-A+Theta));
a4 = ((a3*K-a3+K+Theta) - sqrt((Theta.^2) - 2*a3.*Theta - 2*a3*K.*Theta - 2*K*Theta ...
+ (a3.^2)*(1+K^2) - 2*a3*(K^2) + (K^2) - 2*(a3.^2)*K + 2*a3*K))./(2*(K-A+Theta));
a5 = ((a4*K-a4+K+Theta) - sqrt((Theta.^2) - 2*a4.*Theta - 2*a4*K.*Theta - 2*K*Theta ...
+ (a4.^2)*(1+K^2) - 2*a4*(K^2) + (K^2) - 2*(a4.^2)*K + 2*a4*K))./(2*(K-A+Theta));
figure
% plot() is going to only plot the real component. is that what you want?
% you can use real() or imag() to get the components, or abs() to get the magnitude
plot(Theta,real(a0),Theta,real(a1),Theta,real(a2),Theta,real(a3),Theta,real(a4),Theta,real(a5));
%plot(Theta,imag(a0),Theta,imag(a1),Theta,imag(a2),Theta,imag(a3),Theta,imag(a4),Theta,imag(a5));
% you may need to adjust your limits if you use imag() instead
axis ([0 120 0 1]);
xlabel('dimensionless residence time')
ylabel('Substrate Fraction')
legend('N1','N2','N3','N4','N5','location','southwest')
title ('Substrate conversion with residence time')
disp([a0(1,end),a1(1,end),a2(1,end),a3(1,end),a4(1,end),a5(1,end)])
This produces curves, but a1, etc are complex-valued vectors. You'll have to determine if that's expected and how you want to handle it. What component is of importance? By default, plot() only draws the real component.

カテゴリ

Help Center および File ExchangeAnnotations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by