EGR 103/Spring 2020/Lab 7

From PrattWiki
Revision as of 14:25, 25 March 2020 by DukeEgr93 (talk | contribs) (Preparing For Lab)
Jump to navigation Jump to search

The following document is meant as an outline of what is covered in this assignment.

Preparing For Lab

Note: Going forward, I will refer to the Sakai / Resources Folder / ChapraPythonified / Chapter 14 folder as "CP14"

  • Read the "Part Four" introduction in Chapra, pp. 343-345. In section 4.2, note that we have talked / will talk about Chapters 14-18 but we will skip Chapter 16.
  • Read the introduction to Chapter 14.
  • Read 14.1
    • The Python version of the code in 14.1.3 is in CP14 and named Chapra_14_1_3.py. You will need the Table14p03.txt data file for it to work. Notice in particular that Numpy's variance and standard deviation functions require a keyword argument to match MATLAB's default cases.
  • We have covered the Python versions of 14.2. Example 14.2 and 14.3 are CP14 and named Chapra_ex_14_2.py and Chapra_ex_14_3.py.
  • Skim 14.3. We did the mathematical proof in class. See General_Linear_Regression for specific and general versions but do not get too hung up on the math.
  • Skip or skim 14.4. Linearization is an important concept but outside of the scope of this lab. Figure 14.13 would be a good one to look at though as it shows how plotting transformed variables in different ways might lead to an understanding of the underlying mathematical relationship.
  • Skip 14.5.1. The linergr is a way-too-specific version of what we will eventually use.
  • Read 14.5.2. Note that the differences between Python and MATLAB here will be that we need to set up arrays differently (MATLAB can just use bracketed numbers separated by spaces - Python needs np.array([LIST]) and the np in front of certain commands.
  • Skip or skim the case study.
  • Go to Python:Fitting and specifically:
    • Read the intro and note that to do the demos you will need a Cantilever.dat file with the contents shown
    • Take a look at the common command references
    • Look through the common code; for this lab there will be a special version of it called lab7_common.py which just skips the get_beam_data() function.
      • Note that the make_plot() command works great for generic plots but for the plots in the lab you will generally need to write your own specific code.
    • Take a look at the Polynomial Fitting code and make sure you completely understand each part of it. The parts with a white background are going to be common to all the demonstrations while the code with a yellow background will be what changes each time.
    • Take a look at how to make changes to Polynomial models Python:Fitting#Polynomial and General Linear models Python:Fitting#General_Linear
  • You can now do Chapra 14.5 completely.
  • Skim 15.1. Although you still have problems to do in Chapter 14, the way you are going to do general linear regression is slightly different from what is presented in Chapter 14.
  • Skip 15.2. This will be a part of Lab 8.
  • Skim 15.3. We did this in class; once again, see General_Linear_Regression.
  • I am working on Pythonifying Chapter 15 - stay tunes!
  • Take a look at the General Linear Regression code and make sure you understand what each line does. The np.block() command is the key element in producing the $$\Phi$$ matrix needed for the least squares fit method of the linear algebra package in numpy.
    • Stop before Multidimensional - that will be a part of Lab 8
  • You can now do Chapra 14.7, 14.27, and 15.10 completely.
  • Skip 15.4.
  • Skim 15.5. Note that it amplifies that the goal is to minimize $$S_r$$. However, skip the MATLAB code entirely and instead:
  • Go to Python:Fitting and specifically:
  • You can now do Chapra 15.11, 15.22, and 15.29 completely.

Additional References for args and kwargs

The functions used to solve nonlinear regression require that certain arguments be passed in a very specific way. You will need to understand how *args works for this part. The information below covers both *args and **kwargs. Basically, *args and **kwargs will capture additional parameters in a function call. The *args are unnamed and captured in a tuple while the **kwargs are named and captured in a dictionary. Note that once there is a named parameter in a function call, every parameter after that must also be named! Here are some references:

Typographical Errors

None yet!

Specific Problems

  • Be sure to put the appropriate version of the honor code -- if you use the examples from Pundit, the original author is either DukeEgr93 or Michael R. Gustafson II depending on how you want to cite things.

Chapra 14.5

Chapra 14.7

  • See Python:Fitting#General_Linear_Regression
  • Whenever you have values on an axis that makes the axis numbers take up more space that they should, you can tell Python to use scientific notation on that axis. For this code, you will want to use scientific notation on the y axis; you can do this with the code:
plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
  • Be sure to calculate the R value. Note that it is not the same as the slope of the line you would get if you try to model $$p$$ as a function of $$T$$.

Chapra 14.27

Chapra 15.10

Chapra 15.11

  • See Python:Fitting#Nonlinear_Regression
  • For the initial guesses, make sure you understand the subscripts for the parameters and then figure out how to approximate their values from the information provided in the problem.

Chapra 15.22

Chapra 15.29

  • See Python:Fitting#Nonlinear_Regression
  • Note that the independent variable will be the temperature in K and the dependent value will be the natural log of the pressure. That is also what you will be graphing.

General Concepts

General Linear Regression...