필터 지우기
필터 지우기

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 CenterFile Exchange에서 Annotations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by