AMATH 301 - Autumn 2014 Due: 11:59:59pm Friday October 31 , 2014
Transcription
AMATH 301 - Autumn 2014 Due: 11:59:59pm Friday October 31 , 2014
AMATH 301 - Autumn 2014 Homework 3 Due: 11:59:59pm Friday October 31st , 2014 VERY IMPORTANT: Remember to suppress all output and plotting before submitting your code. Download data.txt from the course website. Copy and paste the data into the first few lines of your M file. Do not use the load command here. The data in data1, data2, data3, data4 is arranged so that (xj , yj ) is stored in the j th column. Exercise 1: Plot the points in data1 using the ‘o’ linespec command so that Matlab doesn’t connect the points. Fit the following curves to the data, using polyfit: f1 (x) = c1 x2 + c2 x + c3 f2 (x) = c1 x4 + c2 x3 + c3 x2 + c4 x + c5 f3 (x) = c1 x6 + c2 x5 + c3 x4 + c4 x3 + c5 x2 + c6 x + c7 Note that you may get some warnings about the polynomial degree (especially when the degree is greater than N −1). Plot the three curves using polyval along with the data (can use x = -2:0.01:2 ). For each curve, store the coefficients as a row vector with cj in the j th column. Answers: Should be written out as A1-A3.dat. Plot the points in data2 and fit the data with a 10th degree polynomial and a cubic spline. For the latter, use interp1 along with the ‘cubic’ method specifier. Plot the two curves along with the data. Note that one of these looks a lot better than the other. Use the polynomial curve to interpolate the data at x = {0.5, 1.5, 2.5, . . . , 8.5, 9.5}. Store the corresponding values in a row vector and repeat the process to use the cubic spline to interpolate. Answers: Should be written out as A4-A5.dat. The rest of Exercise 1 is optional (not counted towards total by CSB) For data3, you must decide on what curve to use to fit the data. To do this, you can use the commands semilogy and loglog. This commands work just like plot (ie loglog(x,y) plots x and y). The difference between these commands is that they plot the data with different scalings than plot. To see this, plot f (x) = exp(2x) for x ∈ [0, 10] with the plot, semilogy, and loglog commands. The semilogy plot should appear as a line because it plots the y-values on a log scale. Note that the slope is 2, corresponding to the coefficient of x in f (x). Now try plotting f (x) = 3x4 for x ∈ [0, 10] with the plot, semilogy, and loglog commands. The loglog plot should appear as a line because it plots both the x and y values on a log scale. Note that the slope is 4, corresponding to the power of x in f (x). Use these new commands to determine whether f (x) = c2 exp(c1 x) or f (x) = c2 xc1 is the best curve to use to fit data3. Use the appropriate Matlab command (fminsearch or polyfit) to obtain c1 and c2 . Plot your curve along with the data to be sure you have a good fit. Compute the values at x = {0.5, 1.5, 2.5, . . . , 8.5, 9.5} using your curve choice and c1 ,c2 . Store the values in a row vector Answer: Should be written out as A6.dat. 1 AMATH 301 - Autumn 2014 Due: 11:59:59pm Friday October 31st , 2014 Homework 3 Exercise 2: Verify that data4 should be fit using an exponential by plotting with semilogy. Fit the data with f (x) = c2 exp(c1 x) using fminsearch. Define your objective function to be the least-squares error between the data and f (x). Store c1 and c2 as a row vector. q 1 N PN j=1 (yj − f (xj ))2 Answer: Should be written out as A7.dat. Plot the curve along with the data to verify that your curve is a good fit. Find the value of the least squares error of the final fit that fminsearch produces. (Hint: you can get this by using [c,fval,exitflag] = fminsearch(. . . )). Answer: Should be written out as A8.dat. Use your curve to obtain values at x = {0.5, 1.5, 2.5, . . . , 8.5, 9.5}. Store these as a row vector. Answer: Should be written out as A9.dat. 2 AMATH 301 - Autumn 2014 Due: 11:59:59pm Friday October 31st , 2014 Homework 3 Exercise 3: The Alinco costume company is trying to decide how many of each Husky costume to make for Halloween. There have two models: A (link here) costing $1199.00 and B (link here) costing $1049.00 (actual data). The company has 3 employees: Harry, Dubs, and George (not actual data). Harry can only make model A and George can only make model B. Dubs, being a dog expert of sorts, can make both model A and model B. As such, Harry and George make $100 for each costume made while Dubs makes $150. Come up with the profit function for the company if HA is how many costumes are made by Harry, GB is how many costumes are made by George, and DA , DB are how many of each costume are made by Dubs. On second thought, I’ll do it for you: p(HA , DA , DB , GB ) = 1199(HA + DA ) + 1049(DB + GB ) − 100HA − 100GB − 150(DA + DB ) Finally, contracts require that at least 150 of model A and 125 of model B must be made and that each employee is required to make no less than 50 and no more than 100 costumes: 150 ≤HA + DA 125 ≤DB + GB 50 ≤HA ≤ 100 50 ≤DA + DB ≤ 100 50 ≤GB ≤ 100 Let’s find how many of each costume should be assigned to each employee to maximize profit. First, write the profit function p in terms of a linear minimization problem (min cT x), where x = [HA , DA , DB , GB ]T . Store the elements of c as a row vector. Answer: Should be written out as A10.dat. Next, rewrite the inequality constraints in the form Ax ≤ b. Note that 50 ≤ xj ≤ 100 should be written as two constraints: 50 ≤ xj (or equivalently −xj ≤ −50) and xj ≤ 50. The matrix A should then be 10x4 (remember that DA ≥ 0 and DB ≥ 0). Finally, use linprog to solve the constrained minimization problem and obtain the optimal x = [HA , DA , DB , GB ]T . What was the maximal profit gained by your solution? Note you should check that these values make sense before submitting your assignment (are the constraints met? etc). Because CSB does not have linprog installed, you’ll need to submit your optimal x statically. To do this, run your code on your machine (or in the lab) and get the values for x. Then comment out the line that calls linprog. Finally, add lines to your code that are something similar to: >> xsave = [100; 100; 100; 100]; >> save(0 A11.dat0 ,0 xsave0 ,0 −ascii0 ); but replace the 100s with your values for the optimal x. 3