HW5Solutions - 10/6/08 11:47 AM C:\Documents and

Info iconThis preview shows pages 1–11. Sign up to view the full content.

View Full Document Right Arrow Icon
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Background image of page 2
Background image of page 3

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Background image of page 4
Background image of page 5

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Background image of page 6
Background image of page 7

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Background image of page 8
Background image of page 9

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
Background image of page 10
Background image of page 11
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 10/6/08 11:47 AM C:\Documents and Settings\gtj223\Desktop\Matlab...\NMHW5num328.m %Homework 5 %Problem 1 Chapter 3 Number 28 %This is the script file. It will have a function that opens %the file and outputs the information including the column %vector that contains the years and the giant matrix that %contains the rain data. %Another function that will calculate the yearly preciptation, %the average, lowest, and highest precipitation. %The last function will plot the yearly data. %Opens the file and creates the column vector years and the %matrix precip. (years, precip] = corvRain %Calculates the totals per year, the average per year, the highest %year and the lowest year. [yearTotal, yearAverage, yearLow, yearHigh] = corvRainCalculate(precip) pause; %Plots the annual precipitation plotRain(years, yearTotal) 1 of 1 10/6/08 11:48 AM C:\Documents and Settings\gtj223\Desktop\Matlab Pr...\corvRain.m 1 of 1 W function [years, precip] = corvRain %corvRain Gets the years column vector and the % precipitation matrix %Synopsis: {years, precip] = corvRain' %Input NONE. You could input something like % Rainfile but it isn't necessary. %Output: years = The column vector that will % contain all the years of the data. % % precip = Short for precipitation. It % will contain the rain values for every % month for every year in hundredths of % an inch. It will be a matrix that is % 105 x 12. The 105 is the number of years % and the 12 is the number of months. o\° %Opens file %Gets headings %Gets second heading %Reads in the data %into one column vector %Close the file fid = fopen('CorvRain.dat'); headingl = fgetl(fid); heading2 = fgetl(fid); d = fscanf(fid, '%f'); fclose(fid); Info = reshape(d, 13, length(d)/13)'; %Reshapes it into a 105 x 13 %Outputs years = Info(:,1); precip = Info(:,2:13); %years becomes the lst column %precip becomes columns 2:13 %NOTE: The precip matrix will still be in hundredths of an inch. 10/6/08 11:48 AM. C:\Documents and Settings\gtj223\Desktop\...\corvRainCalculate.m W function [yearTotal, yearAverage, yearLow, yearHigh] = corvRainCalculate(precip) %corvRainCalculate Calculates all the information we are seeking do %Synopsis: [yearTotal, yearAverage, yearLow, yearHigh] % = corvRainCalculate(precip) %Input precip = The 105 x 12 matrix that contains the rain for every month of every year in hundredths of an inch. Output: I yearTotal = The total rain for a given year in inches. yearAverage = The average rainfall for a given year. yearLow = The lowest rainfall in any given year. yearHigh The highest rainfall in any given year. o\° o\° a\° o\°v o\° a\° c\° %I used the sum function built in to Matlab. The ,2 means sum the rows. The %Matlab default is sum the columns which you could write sum(precip) or %sum(precip,1). yearTotal = sum(precip,2)/100; A = size(yearTotal); %This is the equivalent of the length function K %but for a matrix. yearAverage = sum(yearTotal)/A(1,l); yearLow = min(yearTotal); %Minimum function keyboard; ' yearHigh = max(yearTota1); %Maximum function %You could have done it like this: {D = size(precip); sumYears = zeros(1,A(1,l)); irow = O; jcol = O; for irow = 1:A(l,1) for jcol = 1:12 sumYears(irow) = sumYears(irow) + precip(irow,jcol); end end yearTotal = sumYears/loo; keyboard; yearAverage = sum(yearTotal)/A(1,l); yearLow = min(yearTotal); yearHigh = max(yearTotal); o\° o\° o\° a\° o\° o\° o\° o\° o\° o\° o\° n\° o\° o\° o\° %This is the exact same thing. The for loops cycle through the matrix %row at a time. %yearTotal divided by the number of years. 1 of 1 10/6/08 11:48 AM C:\Documents and Settings\gtj223\Desktop\Matlab Pr...\plotRain.m 1 of 1 MW function plotRain(years, yearTotal) % plotRain Creates a plot with the years and their rainfall : Synopsis: plotRain(year, yearTotal) : Input: years = Column vector with all the years % yearTotal = Total rainfall for a given year in inches : Output None The plot will automatically output. o\° plot(years,yearTotal); x1abel('Years'); ylabel('Inches of Rain (in)'); title('Annual Precipitation'); 2000 1 980 0 6 9 1 n .m t a ulln .m. c 0 e 4 r 9 P 1 a U n n A 0 2 9 1 0 0 9 1 0 8 0 5 0 5 0 5 0 5 0w 6 5 ‘ 5 4 4 3 3 2 2 Ev 5mm 6 85:. Years 10/6/08 11:49 AM MATLAB Command Window 1 of 3 K>> yearLow yearLow = 22.9900 K>> yearAverage yearAverage = E 40.2804 I g i I [ K>> yearHigh ??? Error using ==> keyboard Undefined function or variable 'yearHigh'. K>> return yearTotal = 34.8200 44.8900 . 30.8800‘ I 43.0400 V L 46.6900 43.7400 1 57.7600 43.6100 35.0100 49.6900 38.4900 41.3600 54.0200 34.1300 56.2100 34.3900 45.7100 50.2300 33.2900 50.3100 38.5200 38.4600 45.9500 35.7600 44.1300 36.8200 46.6500 39.1300 33.6200 g 50.5700 E 37.1200 % E f f E 41.0500 MATLAB Command Window 2 of 3 10/6/08 11:49 AM W 38.4500 ’ 37.0700 ‘ E 37.8700 2 34.0700 V 40.0400 5 47.8700 39.2700 24.4500 23.6800 39.1300 36.9400 42.5900 35.4200 5 26.3500 g 32.1100 § 58.0600 . 32.0400 1 26.3300 I 40.3600 [ 32.9500 é } é f 39.2000 31.5300 22.9900 37.7900 33.4200 33.9100 40.1400 30.4600 I 48.5800 E 38.3000 3 27.6800 50.2100 45.7300 47.4100 ’ . 4 40.5900 E 39.2900 1 42.7200 32.8400 g 42.9800 44.1700 ; 34.5800 I 38.5400 44.7000 37.1200 L 39.9900 1 35.5400 , 58.7400 1 43.5000 ! 53.0800 ' 57.1500 1 47.0600 E 51.4400 4 g 10/6/08 11:49 AM W 50. 38. 29. 41. 37. 42. 42. 47. 46. 55. 48. 27. .7500 37. 37. 29. 38. 34. .4200 35. 37. 43 33 yearAverage 40. 7600 9700 7300 9100 6400 0600 1300 0800 7500 5300 5700 1500 7100 5200 6400 8100 0000 9900 9300 2804 yearLow = 22. 9900 yearHigh = 58. 7400 MATLAB Command Window 3 of 3 10/6/08 11:51 AM C:\Documents and Settings\gtj223\Desktop\Matlab ...\NMHW5num45.m 1 of 2 W %Homework 5 %Problem 2: Chapter 4 number 5 %Take a column vector of data and convert it into traffic for %for a given hour. fid = fopen(‘traffic.dat'); Info = fscanf(fid, '%f'); fclose(fid); %Now we have the column vector called Info that contains the ' %times for every car passing a given point on this street. %So we want to return the number of cars per hour. %We need to break up the giant column vector into cars prior to %a given hour. i=0; m=O; TotalCars = zeros(1,24); %Cars is a row vector with 24 columns %The outer for loop goes for each hour. So we will check the entire %column vector Info for values that match each hour with the inside %for loop. In our case, the data is already sequentially ordered but %that is not always the case. So in the instance of data that is %scambled, we will check the entire column vector for each given hour. %If you wanted to truncate your search assuming the data is already %ordered, you could add an if statement with a break. a a 1 for i = 1:24; %For every hour for m = l:length(Info) %From the first value til the last 9 if Info(m)<i %If the value is less than the hour: TotalCars(1,i) = TotalCars(1,i) + 1; g %Adds a new increment to TotalCars. For every car that %passed before a given hour (i), TotalCars increments %by l. ' E end E % end end %So we just created a vector TotalCars that gives the cummulative %cars that have passed up to that point. In other words, TotalCars(l,10) %will be the total cars that have passed prior to hour 10. %will subtract all values that aren't in a given hour. Cars = zeros(1,24); I i E i f %So to get the cars per hour, we have to write something that % Cars(1,1) = TotalCars(l,l); g I 10/6/08 11:51 AM C:\Documents and Settings\gtj223\Desktop\Matlab ...\NMHW5num45.m 2 of 2 M %We have to establish Cars(1,1) because TotalCars(1,i—1) for i = 1 %is out of bounds (i.e. TotalCars(l,O) doesn't exist). for i = 2:24 Cars(1,i) = TotalCars(1,i)-Tota1Cars(1,i—l); end %So the for loop takes the Total Cars prior to a given hour and %subtracts the value of the TotalCars for the previous hour. %In other words, if 100 cars have passed prior to 6AM and 300 %cars have passed prior to 7AM, the cars that passed in the 7th %hour is equal to the total (300) minus the prior (100). Cars a::::=:=‘:::::::::::::::z:22::2::::::=:::::::::=:::::::::::::::::::::::::: %If you wanted to do it all at one time, you could have used an if—else %statement inside your outside for loop. a\° Cars = zeros(l,24); °\° o\° % for Condition % for Condition '% Statements % end % % if i == 1 % Cars(1,i) = TotalCars(1,i); % else % Cars(1,i) = TotalCars(1,i)—TotalCars(1,i-l); % end % end o\° Cars 10/6/08 11:51 AM MATLAB Command Window 1 Of 1 W Cars = Columns 1 through 16 3 3 0 l 3 12 123 348 328 127 94 169 172 100 127! 230 Columns 17 through 24 355 384 280 129 67 54 33 13 >> ...
View Full Document

This note was uploaded on 04/21/2010 for the course PGE 310 taught by Professor Klaus during the Spring '06 term at University of Texas at Austin.

Page1 / 11

HW5Solutions - 10/6/08 11:47 AM C:\Documents and

This preview shows document pages 1 - 11. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online