MATLAB Programming Loops Question

In summary, the program prints the four gases on the screen and asks the user to select which gas to find the heat capacity for. It then asks the user for a temperature, and continues asking for temperatures until the user enters no. The table containing the temperatures and the heat capacities is attached.
  • #1
lee_sarah76
18
0

Homework Statement



Write a program that does the following:
  • Prints the four gases on the screen and asks the user to select which gas to find the heat capacity for.
  • Asks the user for a temperature.
  • Asks the user if another temperature is needed (enter yes or no). If the answer is yes, the user is asked to enter another temperature. This process continues until the user enters no.
  • Display a table containing the temperatures entered and the corresponding heat capacities.

The table containing the gases and the values for a, b, c and d is attached.



Homework Equations



Heat Capacity = Cp

Cp = a + bT + cT^2 + dT^3

The Attempt at a Solution



display('-----------------------------------------------------------------')
clear

display('Problem 32')

SO2.a = 38.91; SO2.b = 3.904*10^-2; SO2.c = -3.105*10^-5; SO2.d = 8.606*10^-9;
SO3.a = 48.50; SO3.b = 9.188*10^-2; SO3.c = -8.540*10^-5; SO3.d = 32.40*10^-9;
O2.a = 29.10; O2.b = 1.158*10^-2; O2.c = -0.6076*10^-5; O2.d = 1.311*10^-9;
N2.a = 29.00; N2.b = 0.2199*10^-2; N2.c = -0.5723*10^-5; N2.d = -2.871*10^-9;

inputval = input('Select a gas, SO2, SO3, O2, or N2: ');
T = input('Input a temperature, in celsius,: ');
Cp1 = inputval.a + inputval.b*T + inputval.c*(T)^2 + inputval.d*(T)^3;
Table = [T Cp1]

reply = input('Do you want to input another temperature? Y/N: ','s');
Cp2 = 0;
Table1 = [];
while reply == 'Y'
T1 = input('Input another temperature: ');
Cp2 = inputval.a + inputval.b*T1 + inputval.c*(T1)^2 + inputval.d*(T1)^3;
Table1 = [T1 Cp2];
Table1 = [Table1 ; Table1];

reply = input('Do you want to input another temperature? Y/N: ','s');
end
answer = [Table; Table1]
disp(answer)


I'm not sure where my error is, could someone help?
 

Attachments

  • Screen Shot 2013-10-12 at 6.53.29 PM.jpg
    Screen Shot 2013-10-12 at 6.53.29 PM.jpg
    15.6 KB · Views: 562
Physics news on Phys.org
  • #2
Hmm, your code crashed my Matlab!

Okay, so the crashing was my computer.. look really close at how your handling your temps in the while loop.

...
Do you want to input another temperature? Y/N: Y
Input another temperature: 10
Do you want to input another temperature? Y/N: Y
Input another temperature: 20
Do you want to input another temperature? Y/N: Y
Input another temperature: 30
Do you want to input another temperature? Y/N: Y
Input another temperature: 40
Do you want to input another temperature? Y/N: N
32.0000 40.1278
40.0000 40.4225
30.0000 40.0535
20.0000 39.6784
10.0000 39.2973

...

Is what you want to see right? Each temp that was entered? So look at how your handling the temps being put into the tables... As a further hint, check out the cat() function.

Good luck!
 
Last edited:
  • #3
Hi, thank you for replying! I've fixed my problem that it kept closing after running the script, but at the moment I've got this:

while reply == 'Y'
T1 = input('Input another temperature: ');
Cp2 = inputval.a + inputval.b*T1 + inputval.c*(T1)^2 + inputval.d*(T1)^3;
Table1 = [T1 Cp2];reply = input('Do you want to input another temperature? Y/N: ','s');
end
answer = cat(1,Table, Table1)

And all this yields me is the final value that I put in for T, and the corresponding Cp. Is there any way to simply add on the next values to the existing matrix? I've tried simply adding them like [A B] and using the cat() function, but I don't believe I am doing it right?
 
  • #4
To get it to work, try adding another table in the while loop that will cat table1 with that table(inside the loop!), use vertical cat. When you display the anwser you should use the new table and not the table you're placing the values in during the loop iteration. This should print out Cp and all of the vaules for Cp2.

When you're going through the program use the variable editor to check that the logic is doing what you want it to, you'll probably kick yourself when you see how simple it is.
 
Last edited:
  • #5
I apologize, I really do, but I'm not entirely sure how to do what you are talking about. The problem I seem to be having is that every time the user puts in the reply of 'Y', and inputs a new T1 (hence creating a new Cp2), it seems to overwrite the previous one. Thus, when I display the end, all I get is a 2 by 2 matrix, instead of however many times the user pressed 'Y' plus one. It probably is very simple, but at this moment I don't seem to be getting the right answer.

I did try creating a new table like you had said, however I'm not sure how to input values into this table, so I got stuck there.
 
  • #6
Yes, because you're overwriting the table each iteration of the loop. That's why the simplest and most logical way to take care of it(at least it makes sense to me.. I'm sure there are easier ways to do this in MatLab) is to create another Table variable and cat the other variables with it.

When you run through the code at the moment, your Table 1 keeps getting over written by each User input.

Here's some code showing an outline of what needs to happen to create a matrix as big as the number of Y's.
...

Table1 = [];
Table2 = [];
while reply == 'Y'
T1 = input('Input another temperature: ');
Cp2 = inputval.a + inputval.b*T1 + inputval.c*(T1)^2 + inputval.d*(T1)^3;
Table1 = [T1 Cp2];
Table2 = cat(1, x, y);

reply = input('Do you want to input another temperature? Y/N: ','s');
end

...

Think about what input arguments you'd need in the cat Table to save the information for the next round of the while loop. :)

Don't forgot about what you're displaying out with your call to display at the end of your code and how you might have to change it as well.

Here is the output I'm getting just looking at the while loop..

...

-----------------------------------------------------------------
Problem 32
Select a gas, SO2, SO3, O2, or N2: O2
Input a temperature, in celsius,: 32

Table =

32.0000 29.4644

Do you want to input another temperature? Y/N: Y
Input another temperature: 10
Do you want to input another temperature? Y/N: Y
Input another temperature: 20
Do you want to input another temperature? Y/N: Y
Input another temperature: 30
Do you want to input another temperature? Y/N: Y
Input another temperature: 40
Do you want to input another temperature? Y/N: Y
Input another temperature: 50
Do you want to input another temperature? Y/N: N
32.0000 29.4644
50.0000 29.6640
40.0000 29.5536
30.0000 29.4420
20.0000 29.3292
10.0000 29.2152

...

I think this is the output you're looking for.
 
  • #7
Thanks for your help! I don't think I did it the way you were telling me, but the output was the same. Here was my final code:

Code:
SO2.a = 38.91; SO2.b = 3.904*10^-2; SO2.c = -3.105*10^-5; SO2.d = 8.606*10^-9;
SO3.a = 48.50; SO3.b = 9.188*10^-2; SO3.c = -8.540*10^-5; SO3.d = 32.40*10^-9;
O2.a = 29.10; O2.b = 1.158*10^-2; O2.c = -0.6076*10^-5; O2.d = 1.311*10^-9;
N2.a = 29.00; N2.b = 0.2199*10^-2; N2.c = -0.5723*10^-5; N2.d = -2.871*10^-9;

inputval = input('Select a gas, SO2, SO3, O2, or N2: ');
T = input('Input a temperature, in celsius,: ');
Cp1 = inputval.a + inputval.b*T + inputval.c*(T)^2 + inputval.d*(T)^3;
Table = [T Cp1]

reply = input('Do you want to input another temperature? Y/N: ','s');
Cp2 = 0;
k = 1;
Table1 = [];

while reply == 'Y'
T1 = input('Input another temperature: ');
Cp2 = inputval.a + inputval.b*T1 + inputval.c*(T1)^2 + inputval.d*(T1)^3;
Table1(k,:) = [T1, Cp2];
k = k+1;

reply = input('Do you want to input another temperature? Y/N: ','s');
end
answer = vertcat(Table, Table1)
fprintf('\n')
 
  • #8
Cool! Glad you were able to solve the problem. :)

This was the way I did it incase you wanted to know.

...
Table1 = [];
Table2 = [];
while reply == 'Y'
T1 = input('Input another temperature: ');
Cp2 = inputval.a + inputval.b*T1 + inputval.c*(T1)^2 + inputval.d*(T1)^3;
Table1 = [T1 Cp2];
Table2 =cat(1, Table2, Table1);

reply = input('Do you want to input another temperature? Y/N: ','s');
end
answer = [Table; Table2];
...

Your program looks good.
 

1. What is a loop in MATLAB?

A loop in MATLAB is a programming construct that allows a set of instructions to be executed repeatedly until a specific condition is met. This helps in automating repetitive tasks and simplifying complex code.

2. What are the types of loops available in MATLAB?

There are two types of loops in MATLAB: for loops and while loops. For loops are used when the number of iterations is known beforehand, whereas while loops are used when the number of iterations is not known and is dependent on a condition.

3. How do I terminate a loop in MATLAB?

To terminate a loop in MATLAB, you can use the break keyword. This will immediately exit the loop and continue with the rest of the code. Alternatively, you can also use the return keyword to exit the loop and return to the calling function.

4. Can loops be nested in MATLAB?

Yes, loops can be nested in MATLAB, which means one loop can be placed inside another loop. This is useful when dealing with complex tasks that require multiple levels of repetition.

5. What are some best practices for using loops in MATLAB?

Some best practices for using loops in MATLAB include preallocating arrays before the loop to improve performance, avoiding unnecessary nested loops, and using vectorized operations instead of loops whenever possible. It is also important to ensure that the loop condition is properly defined to avoid infinite loops.

Similar threads

  • Engineering and Comp Sci Homework Help
Replies
7
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
10
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
2
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
5K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
4
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
6
Views
4K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
12K
Back
Top