1 view (last 30 days)

Show older comments

I am trying to use the matrix Tp inside a for loop to prodice a matrix. The first problem i have is that it always chooses the else statement and the second problem is that it produces a 5x17 matrix for each value in the Tp matrix. What I am trying to do is get the for loop to read each value of Tp and then the else if statement will decide if it is less than or greater than 1600 to use the right equation then that answer will fill a column in the 5x17 matrix so that the 17 values in Tp will fill the 17 comlumns in the new matrix. I am using MATLAB R2019a

clc; clear;

format short g

MC=10;MH=22;MO=0;

ycc=MC+MH/4-MO/2;

ymin=ycc-MC/2;

Tr=500;

A=[299180,309070;56835,93048;88923,154670;43388,127010;31317,44639];

B=[37.85,39.29;66.27,68.58;49.36,60.43;42.27,46.25;37.46,39.32];

C=[-4571.9,-6201.9;-11634,-16979;-7940.8,-19212;-6635.4,-18798;-4559.3,-6753.4];

Tp=[600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200];

Hfuel=-6312300;

Mfuel=142;

Mair=28.97;

if Tr<=1600

hbarR=[A(1,1)+B(1,1)*Tr+C(1,1)*log(Tr);A(2,1)+B(2,1)*Tr+C(2,1)*log(Tr);A(3,1)+B(3,1)*Tr+C(3,1)*log(Tr);A(4,1)+B(4,1)*Tr+C(4,1)*log(Tr);A(5,1)+B(5,1)*Tr+C(5,1)*log(Tr)];

else

hbarR=[A(1,2)+B(1,2)*Tr+C(1,2)*log(Tr);A(2,2)+B(2,2)*Tr+C(2,2)*log(Tr);A(3,2)+B(3,2)*Tr+C(3,2)*log(Tr);A(4,2)+B(4,2)*Tr+C(4,2)*log(Tr);A(5,2)+B(5,2)*Tr+C(5,2)*log(Tr)];

end

for i=1:length(Tp)

if Tp<=1600

HbarP=[A(1,1)+B(1,1)*Tp+C(1,1)*log(Tp);A(2,1)+B(2,1)*Tp+C(2,1)*log(Tp);A(3,1)+B(3,1)*Tp+C(3,1)*log(Tp);A(4,1)+B(4,1)*Tp+C(4,1)*log(Tp);A(5,1)+B(5,1)*Tp+C(5,1)*log(Tp)];

DeltaHbar=[HbarP-hbarR]

else

hbarP=[A(1,2)+B(1,2)*Tp+C(1,2)*log(Tp);A(2,2)+B(2,2)*Tp+C(2,2)*log(Tp);A(3,2)+B(3,2)*Tp+C(3,2)*log(Tp);A(4,2)+B(4,2)*Tp+C(4,2)*log(Tp);A(5,2)+B(5,2)*Tp+C(5,2)*log(Tp)];

DeltaHbar=[hbarP-hbarR]

end

end

S. Walter
on 2 Nov 2020

Edited: S. Walter
on 2 Nov 2020

If you want your for loop to pick only one item from the Tp vector, you have to iterate Tp inside your for loop.

Thus:

if Tp<=1600

HbarP=[A(1,1)+B(1,1)*Tp+C(1,1)*log(Tp);

A(2,1)+B(2,1)*Tp+C(2,1)*log(Tp);

A(3,1)+B(3,1)*Tp+C(3,1)*log(Tp);

A(4,1)+B(4,1)*Tp+C(4,1)*log(Tp);

A(5,1)+B(5,1)*Tp+C(5,1)*log(Tp)];

DeltaHbar=[HbarP-hbarR]

This doesn't tell Matlab to only look at the i-th iteration of Tp, but at the full vector of Tp and will give you a logical matrix. You can see that if you enter the following

>> Tp<1600

ans =

1×17 logical array

Columns 1 through 15

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0

Columns 16 through 17

0 0

You would have to change your if statement to index through Tp inside your for loop:

if Tp(i)<=1600

HbarP=[A(1,1)+B(1,1)*Tp(i)+C(1,1)*log(Tp(i));

A(2,1)+B(2,1)*Tp(i)+C(2,1)*log(Tp(i));

A(3,1)+B(3,1)*Tp(i)+C(3,1)*log(Tp(i));

A(4,1)+B(4,1)*Tp(i)+C(4,1)*log(Tp(i));

A(5,1)+B(5,1)*Tp(i)+C(5,1)*log(Tp(i))];

DeltaHbar=[HbarP-hbarR];

S. Walter
on 3 Nov 2020

What is the size of your HbarP and hbarR in the loop? You can set a breakpoint by clicking on the little dash to the side of the line where it breaks:

then try the command

size(HbarP)

When I do that, I get:

K>> size(HbarP)

ans =

5 1

(Note that the "K" in front of the double arrow means you are in debug mode)

If your size is not 5 by 1, which it sounds from the error code is the problem, then you probably forgot to index Tp somewhere in your code.

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

Start Hunting!