Skip to content
Permalink
ee2c3e2428
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
88 lines (56 sloc) 3.23 KB

Homework #6

due 4/14 by 11:59pm

  1. Create a new github repository called 'curve_fitting'.

    a. Add rcc02007 and pez16103 as collaborators.

    b. Clone the repository to your computer.

  2. Create a least-squares function called least_squares.m that accepts a Z-matrix and dependent variable y as input and returns the vector of best-fit constants, a, the best-fit function evaluated at each point $f(x_{i})$, and the coefficient of determination, r2.

[a,fx,r2]=least_squares(Z,y);

Test your function on the sets of data in script problem_1_data.m and show that the following functions are the best fit lines:

a. y=0.3745+0.98644x+0.84564/x

b. y=-11.4887+7.143817x-1.04121 x^2+0.046676 x^3

c. y=4.0046e^(-1.5x)+2.9213e^(-0.3x)+1.5647e^(-0.05x)
  1. Use the Temperature and failure data from the Challenger O-rings in lecture_18 (challenger_oring.csv). Your independent variable is temerature and your dependent variable is failure (1=fail, 0=pass). Create a function called cost_logistic.m that takes the vector a, and independent variable x and dependent variable y. Use the function, $\sigma(t)=\frac{1}{1+e^{-t}}$ where $t=a_{0}+a_{1}x$. Use the cost function,

    $J(a_{0},a_{1})=1/m\sum_{i=1}^{n}\left[-y_{i}\log(\sigma(t_{i}))-(1-y_{i})\log((1-\sigma(t_{i})))\right]$

    and gradient

    $\frac{\partial J}{\partial a_{i}}= 1/m\sum_{k=1}^{N}\left(\sigma(t_{k})-y_{k}\right)x_{k}^{i}$

    where $x_{k}^{i} is the k-th value of temperature raised to the i-th power (0, and 1)

    a. edit cost_logistic.m so that the output is [J,grad] or [cost, gradient]

    b. use the following code to solve for a0 and a1

% Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Run fminunc to obtain the optimal theta
% This function will return theta and the cost
[theta, cost] = ...
fminunc(@(a)(costFunction(a, x, y)), initial_a, options);

c. plot the data and the best-fit logistic regression model

plot(x,y, x, sigma(a(1)+a(2)*x))
  1. The vertical stress under a corner of a rectangular area subjected to a uniform load of intensity $q$ is given by the solution of the Boussinesq's equation:

    $\sigma_{z} = \frac{q}{4\pi}\left(\frac{2mn\sqrt{m^{2}+n^{2}+1}}{m^{2}+n^{2}+1+m^{2}n^{2}}\frac{m^{2}+n^{2}+2}{m^{2}+n^{2}+1}+sin^{-1}\left(\frac{2mn\sqrt{m^{2}+n^{2}+1}}{m^{2}+n^{2}+1+m^{2}n^{2}}\right)\right)$

    Typically, this equation is solved as a table of values where:

    $\sigma_{z}=q f(m,n)$

    where $f(m,n)$ is the influence value, q is the uniform load, m=a/z, n=b/z, a and b are width and length of the rectangular area and z is the depth below the area.

    a. Finish the function boussinesq_lookup.m so that when you enter a force, q, dimensions of rectangular area a, b, and depth, z, it uses a third-order polynomial interpolation of the four closest values of m to determine the stress in the vertical direction, sigma_z=$\sigma_{z}$. Use a $0^{th}$-order, polynomial interpolation for the value of n (i.e. round to the closest value of n).

    b. Copy the boussinesq_lookup.m to a file called boussinesq_spline.m and use a cubic spline to interpolate in two dimensions, both m and n, that returns sigma_z.