diff --git a/Gemfile b/Gemfile index 874e388..ac83dec 100644 --- a/Gemfile +++ b/Gemfile @@ -18,8 +18,7 @@ gem 'less-rails' # use Devise for login gem 'devise' gem 'omniauth' -gem 'oauth2' -gem 'omniauth-google-oauth2' +gem 'omniauth-oauth' group :development do gem 'capistrano' diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 5c79d3c..c045638 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -14,8 +14,10 @@ body { padding-top: 80px; + font-family: 'Open Sans', sans-serif; } #get-hint-button-container { text-align: center; } + diff --git a/app/assets/stylesheets/khan-site.css b/app/assets/stylesheets/khan-site.css index a824aab..50d9c70 100644 --- a/app/assets/stylesheets/khan-site.css +++ b/app/assets/stylesheets/khan-site.css @@ -1257,7 +1257,6 @@ html { body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; margin: 0; color: #444; line-height: 22px; @@ -1296,7 +1295,7 @@ article { /* Basic typography for the entire site */ -h1, h2, h3, h4, h5 { color: #111; font-family: "MuseoSans500", sans-serif; } +h1, h2, h3, h4, h5 { color: #111; font-family:inherit, sans-serif; } h1 {font-size:25px; margin-bottom: 22px;} .main-headline, .section-headline { padding-top: 22px; } .main-headline a, .section-headline a { text-decoration: none;} @@ -1308,7 +1307,7 @@ h2 {font-size:20px; margin-bottom: 22px;} h3 {font-size:18px; margin-bottom: 22px;} h4 {font-size:15px; margin-bottom: 22px;} h5 {font-size: 15px; margin-bottom: -22px;} -p { font-size: 14px; margin: 22px 0;} +p { margin: 22px 0;} .pulls { margin-bottom: 9px; } /* "Pulls" the next block element up by halving the margin. */ .pulled { margin-top: 11px; margin-bottom: 22px; } /* Preserves vertical rhythm. Not always necessary */ @@ -1353,13 +1352,14 @@ a.visited-no-recolor:visited text-decoration: none; } +a.btn { + color: #FFFFFF; +} + a:visited { - color: #678D00; } a:link:hover, a:link:focus, a:visited:hover, a:visited:focus { - color: #678D00; - text-decoration: underline; } form { display: inline; } @@ -2159,7 +2159,7 @@ ul.topic-browser-menu > li > ul > li > a { } .nav-subheader > span > a { - font-family: "MuseoSans500", Helvetica, Arial, sans-serif; + font-family: inherit, Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: -1px; text-transform: uppercase; @@ -2482,7 +2482,7 @@ ul.topic-browser-menu > li > ul > li > a { border-right: 1px solid #bbb; color: #444; font-size: 18px; - font-family: "MuseoSans500", sans-serif; + font-family: inherit, sans-serif; width: 340px; margin: -5px; padding: 8px 5px 0; @@ -4143,14 +4143,14 @@ a.control:hover { color: #DD6900; } /* Generated by Font Squirrel (http://www.fontsquirrel.com) on June 6, 2011 */ @font-face { - font-family: 'MuseoSans300'; + font-family: inherit ; src: url('data:font/opentype;base64,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/8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/y//YAAAAAAAAAAAAAAAAAAAAA//oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/0wAAAAD/uP+4AAAAAAAA//r/9P/sAAAAAAAA//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/h/90AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6QAAAAAAAAAAAAAAAAAA//T/8gAAAAAAAAAA//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8//ywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/dAAAAAAAAAAAAAAAAAAD/+P/2//YAAAAAAAD/+gAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAAAACcAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//QAAAAAAAD/mgAAAAD/2wAAAAAAAAAAAAAAAAAAAAD/tgAAAAAAAP/0AAAAAP9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//r/+v/4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') format('truetype'); font-weight: normal; font-style: normal; } @font-face { - font-family: 'MuseoSans500'; + font-family: inherit; src: url('data:font/opentype;base64,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AAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAD/+gAAAAAAAP/2//L/8P/0AAAAAAAAAAAAAAAAAAAAAAAA//oAAP8//5wAAP/hAAAAAAAAAAD/ywAAAAAAAAAAAAAAAAAAAAAAAP/6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//L/+AAAAAAAAAAAAAD/+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAP/yAAAAAP+4AAD/uAAAAAAAAAAAAAAAAAAAAAD/+v/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MAAP/fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/4//T/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/1QAA/88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+v/4//oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAJQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9gAAAAAAAAAAAAD/sv/dAAAAAAAAAAAAAAAA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AGMAKQAgADIAMAAwADgAIABiAHkAIABKAG8AcwAgAEIAdQBpAHYAZQBuAGcAYQAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuAE0AdQBzAGUAbwAgAFMAYQBuAHMANQAwADAAdwBlAGIAZgBvAG4AdABNAHUAcwBlAG8AIABTAGEAbgBzACAANQAwADAAMQAuADAAMAAwAE0AdQBzAGUAbwBTAGEAbgBzAC0ANQAwADAAVABoAGkAcwAgAGYAbwBuAHQAIAB3AGEAcwAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAdABoAGUAIABGAG8AbgB0ACAAUwBxAHUAaQByAHIAZQBsACAARwBlAG4AZQByAGEAdABvAHIALgACAAAAAAAA/2cAZgAAAAAAAAAAAAAAAAAAAAAAAAAAANgAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAQIAowCEAIUAlgCGAI4AiwCdAKkApAEDAIoA2gCDAJMBBAEFAI0AlwCIAMMA3gEGAJ4AqgD1APQA9gCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4A6QBmANMA0ADRAK8AZwDwAJEA1gDUANUAaADrAO0AiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AOoAeAB6AHkAewB9AHwAuAChAH8AfgCAAIEA7ADuALoAsACxALsA2ADZALIAswC2ALcAxAC0ALUAxQCHAKsAvgC/AQcAjAEIAQkBCgELAQwHdW5pMDBBMAd1bmkwMEFEB3VuaTAwQjIHdW5pMDBCMwd1bmkwMEI5BEV1cm8HdW5pRTAwMAd1bmlGQjAxB3VuaUZCMDIHdW5pRkIwMwd1bmlGQjA0ALgB/4WwAY0AS7AIUFixAQGOWbFGBitYIbAQWUuwFFJYIbCAWR2wBitcWACwBCBFsAMrRLAHIEWyBEACK7ADK0SwBiBFsgcpAiuwAytEsAUgRbIGHQIrsAMrRLAIIEWyBHoCK7ADK0QBsAkgRbADK0SwCiBFugAJf/8AAiuxA0Z2K0RZsBQrAAA=') format('truetype'); font-weight: normal; font-style: normal; @@ -4630,7 +4630,7 @@ ul.topic-browser-menu.new > li > ul { padding: .25em 0; text-transform: uppercase; text-align: center; - font-family: "MuseoSans500", sans-serif; + font-family: inherit, sans-serif; color: #76a005; margin-bottom: 1em; } @@ -6514,7 +6514,7 @@ ul.icons li .icon-large:before { width: 97%; border: 1px solid #cccccc; height: 25px; - font-family: "MuseoSans300", sans-serif; + font-family: inherit, sans-serif; font-size: 14px; font-weight: normal; line-height: 22px; @@ -6543,7 +6543,7 @@ ul.icons li .icon-large:before { } .subscription .subscribe-button { display: inline-block; - font-family: "MuseoSans500", sans-serif; + font-family: inherit, sans-serif; font-size: 14px; font-weight: normal; line-height: 22px; @@ -6849,7 +6849,7 @@ legend + .control-group { } .modal h2, .modal h4 { - font-family: "MuseoSans300", sans-serif; + font-family: inherit, sans-serif; color: #555555; } .modal .lte7 { @@ -7538,7 +7538,7 @@ a.simple-button.seethrough.goal-history { .goalpicker h3, .goalpicker h4 { font-size: 30px; - font-family: MuseoSans300; + font-family: inherit; font-weight: normal; line-height: 68px; color: #777; @@ -7551,7 +7551,7 @@ a.simple-button.seethrough.goal-history { } .goalpicker h4 { text-transform: uppercase; - font-family: MuseoSans500; + font-family: inherit; font-weight: bold; font-size: 24px; letter-spacing: 6px; @@ -8878,7 +8878,7 @@ a.simple-button.seethrough.goal-history { width: 28%; background-color: #e5f0f8; color: #2a839f; - font-family: "MuseoSans300", sans-serif; + font-family: inherit, sans-serif; } .progress-panel.selected { width: 44%; @@ -8938,7 +8938,7 @@ a.simple-button.seethrough.goal-history { position: absolute; left: 15px; right: 10px; - font-family: "MuseoSans500", sans-serif; + font-family: inherit, sans-serif; } .progress-panel .progress-container { display: block; @@ -8952,7 +8952,7 @@ a.simple-button.seethrough.goal-history { display: inline-block; width: 120px; vertical-align: middle; - font-family: "MuseoSans500", sans-serif; + font-family: inherit, sans-serif; text-align: center; font-style: italic; } diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 95f2992..8a58b33 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,4 +1,75 @@ class HomeController < ApplicationController def index end + + def about + end + + def people + @people = Array.new + + @people << { + :name => 'Bart Snapp', + :photo => 'bart-snapp', + :description => 'Bart is at OSU.', + :link => 'http://www.math.osu.edu/~snapp/', + :email => 'snapp@math.osu.edu' + } + + @people << { + :name => 'Jim Fowler', + :photo => 'jim-fowler', + :description => 'Jim is at OSU.', + :link => 'http://www.math.osu.edu/~fowler/', + :email => 'fowler@math.osu.edu' + } + + @people << { + :name => 'Steven Gubkin', + :photo => 'steve-gubkin', + :description => 'Steve is at OSU.', + :email => 'gubkin@math.osu.edu', + :link => 'http://www.math.osu.edu/people/gubkin.1/view', + } + + @people << { + :name => 'Ryan Kowalick', + :photo => 'ryan-kowalick', + :description => 'Ryan Kowalick', + :email => 'rkowalick@math.osu.edu', + :link => 'http://www.math.osu.edu/people/kowalick.1' + } + + @people << { + :name => 'Roman Holowinsky', + :photo => 'roman-holowinsky', + :description => 'Roman Holowinsky advises.', + :email => 'romanh@math.osu.edu', + :link => 'http://www.math.osu.edu/~romanh/' + } + + @people << { + :name => 'Sean Corey', + :photo => 'sean-corey', + :description => 'Sean Corey', + :email => 'corey.osumath@gmail.com', + } + + @people << { + :name => 'Isaac Smith', +# :photo => 'isaac-smith', + :description => 'Isaac is an undergraduate at Ohio State; he is a teaching assistant in this course.', + :email => 'smith.7914@osu.edu', + } + + @people << { + :name => 'Sean Collins', +# :photo => 'sean-collins', + :description => 'Sean is an undergraduate at Ohio State; he is a teaching assistant in this course.', + :email => 'collins.999@osu.edu', + } + + @people.shuffle! + + end end diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index e7e17a4..c975d6d 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,14 +1,22 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController - def google_oauth2 - # You need to implement the method below in your model (e.g. app/models/user.rb) - @user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user) - if @user.persisted? - flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" - sign_in_and_redirect @user, :event => :authentication - else - session["devise.google_data"] = request.env["omniauth.auth"] - redirect_to new_user_registration_url - end - end + def coursera + @user = User.find_for_coursera(request.env["omniauth.auth"], current_user) + + if @user.persisted? + flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Coursera" + sign_in_and_redirect @user, :event => :authentication + else + session["devise.coursera_data"] = request.env["omniauth.auth"] + redirect_to new_user_registration_url + end + end + + # This is necessary since Rails 3.0.4 + # See https://github.com/intridea/omniauth/issues/185 + # and http://www.arailsdemo.com/posts/44 + protected + def handle_unverified_request + true + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index de6be79..3e15eb2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,2 +1,5 @@ module ApplicationHelper + def html_logo + return 'mooculus' + end end diff --git a/app/models/exercise.rb b/app/models/exercise.rb index b100bd8..6830041 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -1,4 +1,5 @@ class Exercise < ActiveRecord::Base attr_accessible :title, :description, :page, :problem_number has_many :scores, :dependent => :destroy + has_many :problems, :dependent => :destroy end diff --git a/app/models/problem.rb b/app/models/problem.rb new file mode 100644 index 0000000..4ce993d --- /dev/null +++ b/app/models/problem.rb @@ -0,0 +1,4 @@ +class Problem < ActiveRecord::Base + belongs_to :exercise + attr_accessible :name +end diff --git a/app/models/score.rb b/app/models/score.rb index aafaa93..a6bb403 100644 --- a/app/models/score.rb +++ b/app/models/score.rb @@ -1,6 +1,6 @@ class Score < ActiveRecord::Base attr_accessible :time_taken, :attempt_number, :complete, :count_hints, :seed, :attempt_content - belongs_to :exercise + belongs_to :problem belongs_to :user end diff --git a/app/models/user.rb b/app/models/user.rb index 29d7223..d41ae18 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,33 +6,36 @@ class User < ActiveRecord::Base :recoverable, :rememberable, :trackable, :validatable devise :omniauthable + # Coursera doesn't provide us with an email address + def email_required? + false + end + # Setup accessible (or protected) attributes for your model - attr_accessible :email, :password, :password_confirmation, :remember_me + attr_accessible :email, :password, :coursera_id, :password_confirmation, :remember_me attr_accessible :name has_many :authentications, :dependent => :delete_all has_many :scores, :dependent => :destroy def apply_omniauth(auth) - puts auth - self.email = auth['info']['email'] - self.name = auth['info']['name'] - # should use this line probably in the future - #self.email = auth['extra']['raw_info']['email'] + puts "Apply omniauth!" + self.email ||= auth['info']['email'] + self.name ||= auth['info']['name'] # Again, saving token is optional. If you haven't created the column in authentications table, this will fail authentications.build(:provider => auth['provider'], :uid => auth['uid'], :token => auth['credentials']['token']) end - def self.find_for_google_oauth2(access_token, signed_in_resource=nil) + def self.find_for_coursera(access_token, signed_in_resource=nil) data = access_token.info - user = User.where(:email => data["email"]).first + user = User.where(:coursera_id => data["id"]).first unless user - user = User.create(:name => data["name"], - :email => data["email"], - :password => Devise.friendly_token[0,20] - ) + user = User.create!(:coursera_id => data["id"], + :name => data["name"], + :password => Devise.friendly_token[0,20] + ) end user end diff --git a/app/views/home/_person.html.erb b/app/views/home/_person.html.erb new file mode 100644 index 0000000..dc7e85b --- /dev/null +++ b/app/views/home/_person.html.erb @@ -0,0 +1,9 @@ + +

<%= @person[:name] %>

+<% unless @person[:email].nil? %> + <%= @person[:email] %> +<% end %> +<% unless @person[:link].nil? %> + <%= @person[:link] %> +<% end %> +

<%= @person[:description] %>

diff --git a/app/views/home/about.html.erb b/app/views/home/about.html.erb new file mode 100644 index 0000000..1da72a0 --- /dev/null +++ b/app/views/home/about.html.erb @@ -0,0 +1,6 @@ +
+
+

About <%=raw html_logo %>

+

<%=raw html_logo %> is an experiment in mathematics.

+
+ diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 0b2c759..8cf3522 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -5,7 +5,7 @@

Help with math?

Need help with a math course at Ohio State? Looking for lecture videos? Looking for practice exams? This is the place. <%= @course %>

-

<%= link_to 'Login', user_omniauth_authorize_path(:google_oauth2), +

<%= link_to 'Login', user_omniauth_authorize_path(:coursera), { :class => "btn btn-primary btn-large" }%>

diff --git a/app/views/home/people.html.erb b/app/views/home/people.html.erb new file mode 100644 index 0000000..eae48e0 --- /dev/null +++ b/app/views/home/people.html.erb @@ -0,0 +1,29 @@ +
+
+

People

+

<%=raw html_logo %> was produced by a bunch of people. Here are some of them.

+
+
+<% people_per_row = 2 %> + +<% for i in 0..(@people.length / people_per_row) do %> +
+ <% for j in 0...people_per_row do %> + <% @person = @people[people_per_row*i + j] %> +
+ <% unless @person.nil? %> + <%= render :partial => "person" %> + <% end %> +
+ <% end %> +
+<% end %> + +
+
+

Acknowledgments

+

<%=raw html_logo %> could not have been produced without the generous support of the mathematics department at The Ohio State University.

+ +

Uses Twitter’s bootstrap and Khan Academy’s exercise framework. Built on Rails.

+
+
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 10243b1..1a7e5a2 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -6,10 +6,10 @@ <%= javascript_include_tag "application" %> <%= favicon_link_tag '/favicon.ico' %> <%= csrf_meta_tags %> + - <% if user_signed_in? %>
-
-
-

Given that f(INITIALX) = INITIALY, and f(FINALX) = FINALY, - approximate f'(INITIALX). -

-
- +
+

Suppose that f(INITIALX) = INITIALY, and f(FINALX) = FINALY. +

+

Approximate f'(INITIALX). +

SLOPE

-

Remember that f'(INITIALX) is the slope of the best linear approximation - to f near x = INITIALX

+

Remember that f'(INITIALX) is the slope of the best linear approximation to f near x = INITIALX.

We only have enough information to get the slope of the secant line passing through the points (INITIALX,INITIALY) and (FINALX,FINALY), but this should be close to the slope of the tangent line to f at x = INITIALX because INITIALX and FINALX are close.

-

The slope of a line is the ratio of the change in ordinates (\Delta y) to the change in abscissas (\Delta x)

-

The change in ordinates is \Delta y = FINALY - INITIALY = DELTAY

-

The change in abscissas is \Delta x = FINALX - INITIALX = DELTAX

+

The slope of a line is the ratio of the change in ordinates (\Delta y) to the change in abscissas (\Delta x).

+

The change in ordinates is \Delta y = FINALY - INITIALY = DELTAY.

+

The change in abscissas is \Delta x = FINALX - INITIALX = DELTAX.

The slope of the secant line from (INITIALX,INITIALY) to (FINALX,FINALY) - is \frac{\Delta y}{\Delta x} = \frac{DELTAY}{DELTAX} = SLOPE

-

Since the slope of the tangent line is close to the slope of the secant line, f'(INITIALX) \approx SLOPE + is \frac{\Delta y}{\Delta x} = \frac{DELTAY}{DELTAX} = SLOPE.

+

Since the slope of the tangent line is close to the slope of the secant line, f'(INITIALX) \approx SLOPE.

diff --git a/curriculum/khanExercise/exercises/approxLimitGraphical.html b/curriculum/khanExercise/exercises/approxLimitGraphical.html index 6509abd..d9c4eec 100644 --- a/curriculum/khanExercise/exercises/approxLimitGraphical.html +++ b/curriculum/khanExercise/exercises/approxLimitGraphical.html @@ -1,9 +1,9 @@ - - Approximating Limits Graphically - + + Approximating Limits Graphically +
@@ -33,18 +33,9 @@
-
- -
- -

- Consider the function f(x) graphed below. Find - the value of each of the indicated limits with an error of at most \frac{1}{2}. - -

- - -
+
+

Consider the function f(x) graphed below. +

graphInit({ range: 10, scale: 20, @@ -87,42 +78,38 @@ $('#nameField').keyup( updateNameDisplay ); $('#nameField').keypress( updateNameDisplay ); })() -
- -
- -
+
+

+

Find the value of each of the indicated limits with an error of at most \frac{1}{2}. +

+ + -

+ +

\displaystyle\lim_{x \to LIMITX^{-}}f(x): ANSWER
+
\displaystyle\lim_{x \to LIMITX^{+}}f(x): ANSWER +

\displaystyle\lim_{x \to LIMITX}f(x): ANSWER -

- -
+ +

-
+
-
- -
- -

- Consider the function f(x) graphed below. Find - the value of each of the indicated limits with an error of at most \frac{1}{2}. - -

- +
+

Consider the function f(x) graphed below. +

graphInit({ range: 10, @@ -169,8 +156,10 @@ })()
- -
+ +

+

Find the value of each of the indicated limits with an error of at most \frac{1}{2}. +

@@ -178,9 +167,11 @@ \displaystyle\lim_{x \to LIMITX^{-}}f(x): ANSWER
+
\displaystyle\lim_{x \to LIMITX^{+}}f(x): ANSWER+JUMP
+
\displaystyle\lim_{x \to LIMITX}f(x): DNE

@@ -188,9 +179,9 @@
-
+
-
+
@@ -201,6 +192,6 @@
-
+ diff --git a/curriculum/khanExercise/exercises/approxLimitsOracle.html b/curriculum/khanExercise/exercises/approxLimitsOracle.html index 230827e..54c6770 100644 --- a/curriculum/khanExercise/exercises/approxLimitsOracle.html +++ b/curriculum/khanExercise/exercises/approxLimitsOracle.html @@ -17,20 +17,20 @@
-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ + Find{}^* the value of each of the indicated limits by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

f()= ?

@@ -53,9 +53,9 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

-
+

\displaystyle\lim_{x \to LIMITX^{-}}f(x): @@ -72,22 +72,22 @@

-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = POLY.evalOf(LIMITX-.1)

f(LIMITX-.001) = POLY.evalOf(LIMITX-.001)

f(LIMITX-.000001) = POLY.evalOf(LIMITX-.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = POLY.evalOf(LIMITX+.1)

f(LIMITX+.001) = POLY.evalOf(LIMITX+.001)

f(LIMITX+.000001) = POLY.evalOf(LIMITX+.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

Since the limits from both the right and the left exist and are equal, \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER

@@ -95,20 +95,18 @@
-
- -
- -

- Consider a function f(x). While +

+

Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

Find{}^* the value of each of the indicated limits by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -136,7 +134,7 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

@@ -155,42 +153,42 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = POLY.evalOf(LIMITX-.1)

f(LIMITX-.001) = POLY.evalOf(LIMITX-.001)

f(LIMITX-.000001) = POLY.evalOf(LIMITX-.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = JUMP+POLY.evalOf(LIMITX+.1)

f(LIMITX+.001) = JUMP+POLY.evalOf(LIMITX+.001)

f(LIMITX+.000001) = JUMP+POLY.evalOf(LIMITX+.000001)

It looks like f(x) is approaching JUMP+ANSWER as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER.

The limits from both the right and the left exist, but they are not equal, so \displaystyle\lim_{x \to LIMITX}f(x) does not exist (DNE).

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ Find{}^* the value of each of the indicated limits by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -218,7 +216,7 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

@@ -237,15 +235,15 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = POLY.evalOf(LIMITX-.1)

f(LIMITX-.001) = POLY.evalOf(LIMITX-.001)

f(LIMITX-.000001) = POLY.evalOf(LIMITX-.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = ANSWER+FACTOR*Math.sin(1/(.1))

f(LIMITX+.01) = ANSWER+FACTOR*Math.sin(1/(.01))

@@ -255,7 +253,7 @@

f(LIMITX+.000001) = ANSWER+FACTOR*Math.sin(1/(.000001))

It appears that f(x) is not settling down to any one value as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE)

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE).

Even though the limit exists as x approaches LIMITX from the left, the limit from the right does not exist, so the two sided limit \displaystyle\lim_{x \to LIMITX}f(x) also does not exist (DNE). @@ -263,20 +261,20 @@

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ Find{}^* the value of each of the indicated limits by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -304,7 +302,7 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

@@ -323,7 +321,7 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = ANSWER+FACTOR*Math.sin(-1/(0.1))

f(LIMITX-.01) = ANSWER+FACTOR*Math.sin(-1/(.01))

f(LIMITX-.001) = ANSWER+FACTOR*Math.sin(-1/(.001)) @@ -332,36 +330,36 @@

f(LIMITX-.000001) = ANSWER+FACTOR*Math.sin(-1/(.000001))

It appears that f(x) is not settling down to any one value as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE)

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE).

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = POLY.evalOf(LIMITX+.1)

f(LIMITX+.001) = POLY.evalOf(LIMITX+.001)

f(LIMITX+.000001) = POLY.evalOf(LIMITX+.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

Even though the limit exists as x approaches LIMITX from the right, the limit from the left does not exist, so the two sided limit - \displaystyle\lim_{x \to LIMITX}f(x) also does not exist (DNE). -

+ \displaystyle\lim_{x \to LIMITX}f(x) also does not exist (DNE).

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ + Find{}^* the value of each of the indicated limits by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -386,7 +384,7 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

@@ -405,7 +403,7 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = ANSWER+FACTOR*Math.sin(-1/(0.1))

f(LIMITX-.01) = ANSWER+FACTOR*Math.sin(-1/(.01))

f(LIMITX-.001) = ANSWER+FACTOR*Math.sin(-1/(.001)) @@ -414,8 +412,8 @@

f(LIMITX-.000001) = ANSWER+FACTOR*Math.sin(-1/(.000001))

It appears that f(x) is not settling down to any one value as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE)

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE).

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = ANSWER+FACTOR*Math.sin(1/(.1))

f(LIMITX+.01) = ANSWER+FACTOR*Math.sin(1/(.01))

f(LIMITX+.001) = ANSWER+FACTOR*Math.sin(1/(.001)) @@ -424,7 +422,7 @@

f(LIMITX+.000001) = ANSWER+FACTOR*Math.sin(1/(.000001))

It appears that f(x) is not settling down to any one value as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE)

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE).

Both the limit from the left and the right fail to exist, so the two sided limit \displaystyle\lim_{x \to LIMITX}f(x) also does not exist (DNE).

diff --git a/curriculum/khanExercise/exercises/approxLimitsOracleGraphical.html b/curriculum/khanExercise/exercises/approxLimitsOracleGraphical.html index 5727d86..d7dd7aa 100644 --- a/curriculum/khanExercise/exercises/approxLimitsOracleGraphical.html +++ b/curriculum/khanExercise/exercises/approxLimitsOracleGraphical.html @@ -33,20 +33,20 @@
-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ Find{}^* the value of each of the indicated limits to at least 3 digits of accuracy by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -100,7 +100,7 @@ })()
-
+

@@ -119,43 +119,44 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = f(LIMITX-.1)

f(LIMITX-.001) = f(LIMITX-.001)

f(LIMITX-.000001) = f(LIMITX-.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = f(LIMITX+.1)

f(LIMITX+.001) = f(LIMITX+.001)

f(LIMITX+.000001) = f(LIMITX+.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

Hence \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

Since the limits from both the right and the left exist and are equal, - \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER.

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given values of x, provided that x - \ne LIMITX. Find{}^* + \ne LIMITX. +

+

+ + Find{}^* the value of each of the indicated limits to at least 3 digits of accuracy by evaluating f(x) at various values, or state that the limit does not exist (DNE). -

+

f()= ?

@@ -209,9 +210,8 @@ $('#nameField').keypress( updateNameDisplay ); })()
- -
+

@@ -230,22 +230,22 @@
-

Try values of x close to LIMITX but not equal to LIMITX

+

Try values of x close to LIMITX but not equal to LIMITX.

f(LIMITX-.1) = f(LIMITX-.1)

f(LIMITX-.001) = f(LIMITX-.001)

f(LIMITX-.000001) = f(LIMITX-.000001)

It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

-

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

-

Now repeat the process for values of x which are greater than LIMITX

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

+

Now repeat the process for values of x which are greater than LIMITX.

f(LIMITX+.1) = JUMP+f(LIMITX+.1)

f(LIMITX+.001) = JUMP+f(LIMITX+.001)

f(LIMITX+.000001) = JUMP+f(LIMITX+.000001)

It looks like f(x) is approaching JUMP+ANSWER as x approaches LIMITX from the right.

-

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER

+

Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER.

The limits from both the right and the left exist, but they are not equal, so \displaystyle\lim_{x \to LIMITX}f(x) does not exist (DNE).

diff --git a/curriculum/khanExercise/exercises/bisectionOracle.html b/curriculum/khanExercise/exercises/bisectionOracle.html new file mode 100644 index 0000000..81de643 --- /dev/null +++ b/curriculum/khanExercise/exercises/bisectionOracle.html @@ -0,0 +1,94 @@ + + + + + Finding roots of continuous functions with the bisection method + + + +
+
+ makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + locateZeros(f,Xs) + zeroXs[randRange(0,zeroXs.length-1)] + roundTo(0,zero - 1) + roundTo(0,zero + 1) + steveBisectionList(f,leftBound,rightBound) +
+ +
+
+ +

f is a continuous function. While you don't have + a formula for f, you can evaluate f for various values below. + f(leftBound) \approx roundTo(3,f(leftBound)) and + f(rightBound) \approx roundTo(3,f(rightBound)). By the intermediate value theorem, there must be + at least one root of f between leftBound and rightBound. We have insured that their is + only one zero in that interval. +

+ +
+ +

+ Use the bisection method to give 3 consecutively better approximations of the zero. + Each approximation should be the midpoint of the interval you choose. +

+ +

+

f()= ?
+

+ +
+ + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if ( !isNaN(input)){ + $('#nameDisplay').text(f(input)); + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ First approximation: + ANSWERS[0] +
+ Second approximation: + ANSWERS[1] +
+ Third approximation: + ANSWERS[2] +

+ +
+ + +
+

hint

+ +
+
+ + + +
+ + +
+ + diff --git a/curriculum/khanExercise/exercises/continuityGraphical.html b/curriculum/khanExercise/exercises/continuityGraphical.html new file mode 100644 index 0000000..2dec033 --- /dev/null +++ b/curriculum/khanExercise/exercises/continuityGraphical.html @@ -0,0 +1,332 @@ + + + + + Understanding Continuity Numerically With Graphical Assistance + + + +
+
+ + + randRangeNonZero(0,3) + randRangeNonZero(-1,1)*randRange(40,67)/7 + randRangeNonZero(-8,8) + randRange(2,4) + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + (function(x){return f(LIMITX)+FACTOR*Math.sin(1/(x-LIMITX))}) + f + (function(x){ + if (x < LIMITX){ + return f(x) + } + else { + return JUMP + f(x) + } + }) + + f(LIMITX) + randRange(-8,8) +
+ +
+
+ +
+ +

+ The function f is graphed below. Is f continuous at + x=LIMITX? If not, why not? +

+ +
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( f(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, f(LIMITX)], 4 / 20, { fill: "RED" } ); + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ +
+ circle( [input,f(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +

Continuous

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = f(LIMITX+.1)

+

f(LIMITX+.001) = f(LIMITX+.001)

+

f(LIMITX+.000001) = f(LIMITX+.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

Since the limits from both the right and the left exist and are equal, + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER +

+ +
+
+ +
+ +
+ +

+ The function f is graphed below. Is f continuous at + x=LIMITX? If not, why not? +

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( f(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, f(LIMITX)], 4 / 20, { fill: "WHITE" } ); + + circle( [LIMITX, notANSWER], 4 / 20, { fill: "RED" } ); + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + +
+ circle( [input,f(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else if (input == LIMITX){ + +
+ circle( [input,notANSWER], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = f(LIMITX+.1)

+

f(LIMITX+.001) = f(LIMITX+.001)

+

f(LIMITX+.000001) = f(LIMITX+.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

Since the limits from both the right and the left exist and are equal, + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER +

+ +
+
+ +
+ +
+ +

+ The function f is graphed below. Is f continuous at + x=LIMITX? If not, why not? +

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( F1(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( F1(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, F1(LIMITX-.0001)], 4 / 20, { fill: "white" } ); + + circle( [LIMITX, F1(LIMITX+.01)], 4 / 20, { fill: "white" } ); + + circle( [LIMITX, notANSWER], 4 / 20, { fill: "red" } ); + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + +
+ circle( [input,F1(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else if (input == LIMITX){ + +
+ circle( [input,notANSWER], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ + +
+ +

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = JUMP+f(LIMITX+.1)

+

f(LIMITX+.001) = JUMP+f(LIMITX+.001)

+

f(LIMITX+.000001) = JUMP+f(LIMITX+.000001)

+

It looks like f(x) is approaching JUMP+ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER

+

The limits from both the right and the left exist, but they are not equal, so + \displaystyle\lim_{x \to LIMITX}f(x) does not exist (DNE). +

+
+
+ + + + + + +
+ + +
+ + diff --git a/curriculum/khanExercise/exercises/continuityOracle.html b/curriculum/khanExercise/exercises/continuityOracle.html index d2dbedf..b8e8d11 100644 --- a/curriculum/khanExercise/exercises/continuityOracle.html +++ b/curriculum/khanExercise/exercises/continuityOracle.html @@ -51,17 +51,19 @@
-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?
@@ -86,7 +88,7 @@ })()
-
+

Continuous

    @@ -99,43 +101,45 @@
    -

    We need to see if \displaystyle \lim_{x \to LIMITX} f(x) = f(LIMITX)

    +

    We need to see if \displaystyle \lim_{x \to LIMITX} f(x) = f(LIMITX).

    f(LIMITX)= ANSWER

    -

    Now we need to see if \displaystyle \lim_{x \to LIMITX} f(x) exists and is equal to f(LIMITX)

    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Now we need to see if \displaystyle \lim_{x \to LIMITX} f(x) exists and is equal to f(LIMITX).

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = f(LIMITX-.1)

    f(LIMITX-.001) = f(LIMITX-.001)

    f(LIMITX-.000001) = f(LIMITX-.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = f(LIMITX+.1)

    f(LIMITX+.001) = f(LIMITX+.001)

    f(LIMITX+.000001) = f(LIMITX+.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

    +

    Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

    Since the limits from both the right and the left exist and are equal, - \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER.

    <><>
-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?
@@ -163,7 +167,7 @@ })()
-
+

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)

    @@ -176,39 +180,41 @@
    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = f(LIMITX-.1)

    f(LIMITX-.001) = f(LIMITX-.001)

    f(LIMITX-.000001) = f(LIMITX-.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = f(LIMITX+.1)

    f(LIMITX+.001) = f(LIMITX+.001)

    f(LIMITX+.000001) = f(LIMITX+.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

    +

    Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

    Since the limits from both the right and the left exist and are equal, - \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER.

-
- -
-

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?

@@ -229,7 +235,7 @@
-
+

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

    @@ -242,39 +248,41 @@
    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = F1(LIMITX-.1)

    f(LIMITX-.001) = F1(LIMITX-.001)

    f(LIMITX-.000001) = F1(LIMITX-.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = F1(LIMITX+.1)

    f(LIMITX+.001) = F1(LIMITX+.001)

    f(LIMITX+.000001) = F1(LIMITX+.000001)

    It looks like f(x) is approaching JUMP+ANSWER as x approaches LIMITX from the right.

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER

    +

    Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER.

    Even though the limits from the left and right both exist, they are not equal.

    - \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE) + \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE).

-
- -
-

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?

@@ -295,7 +303,7 @@
-
+

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

    @@ -308,40 +316,42 @@
    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = F2(LIMITX-.1)

    f(LIMITX-.001) = F2(LIMITX-.001)

    f(LIMITX-.000001) = F2(LIMITX-.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the left.

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER.

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = F2(LIMITX+.1)

    f(LIMITX+.001) = F2(LIMITX+.001)

    f(LIMITX+.000001) = F2(LIMITX+.000001)

    f(x) does not appear to be approaching any one value as x approaches LIMITX from the right. (try other values even closer to LIMITX)

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist. (DNE)

    +

    Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE).

    If either of the one sided limits do not exist, the limit does not exist.

    - \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE) + \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE).

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?

@@ -365,7 +375,7 @@
-
+

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

    @@ -378,40 +388,42 @@
    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = F3(LIMITX-.1)

    f(LIMITX-.001) = F3(LIMITX-.001)

    f(LIMITX-.000001) = F3(LIMITX-.000001)

    f(x) does not appear to be approaching any one value as x approaches LIMITX from the left. (try other values even closer to LIMITX)

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist. (DNE)

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE).

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = F3(LIMITX+.1)

    f(LIMITX+.001) = F3(LIMITX+.001)

    f(LIMITX+.000001) = F3(LIMITX+.000001)

    It looks like f(x) is approaching ANSWER as x approaches LIMITX from the right.

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

    +

    Hense \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER.

    If either of the one sided limits do not exist, the limit does not exist.

    - \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE) + \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE).

-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Does f appear to be continuous or discontinuous at + values of x. +

+

+ + + Does f appear to be continuous or discontinuous at x=LIMITX, and why? -

+

f()= ?

@@ -438,7 +450,7 @@
-
+

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

    @@ -451,25 +463,25 @@
    -

    Try values of x close to LIMITX but not equal to LIMITX

    +

    Try values of x close to LIMITX but not equal to LIMITX.

    f(LIMITX-.1) = F3(LIMITX-.1)

    f(LIMITX-.001) = F3(LIMITX-.001)

    f(LIMITX-.000001) = F3(LIMITX-.000001)

    f(x) does not appear to be approaching any one value as x approaches LIMITX from the left. (try other values even closer to LIMITX)

    -

    so \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist. (DNE)

    -

    Now repeat the process for values of x which are greater than LIMITX

    +

    Hense \displaystyle\lim_{x \to LIMITX^{-}}f(x) does not exist (DNE).

    +

    Now repeat the process for values of x which are greater than LIMITX.

    f(LIMITX+.1) = F2(LIMITX+.1)

    f(LIMITX+.001) = F2(LIMITX+.001)

    f(LIMITX+.000001) = F2(LIMITX+.000001)

    f(x) does not appear to be approaching any one value as x approaches LIMITX from the right. (try other values even closer to LIMITX)

    -

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist. (DNE)

    +

    so \displaystyle\lim_{x \to LIMITX^{+}}f(x) does not exist (DNE).

    If either of the one sided limits do not exist, the limit does not exist.

    - \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE) + \displaystyle\lim_{x \to LIMITX}f(x) Does Not Exist (DNE).

diff --git a/curriculum/khanExercise/exercises/continuityOracleGraphical.html b/curriculum/khanExercise/exercises/continuityOracleGraphical.html new file mode 100644 index 0000000..9632e4e --- /dev/null +++ b/curriculum/khanExercise/exercises/continuityOracleGraphical.html @@ -0,0 +1,376 @@ + + + + + Understanding Continuity Numerically With Graphical Assistance + + + +
+
+ + + randRangeNonZero(0,3) + randRangeNonZero(-1,1)*randRange(40,67)/7 + randRangeNonZero(-8,8) + randRange(2,4) + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + (function(x){return f(LIMITX)+FACTOR*Math.sin(1/(x-LIMITX))}) + f + (function(x){ + if (x < LIMITX){ + return f(x) + } + else { + return JUMP + f(x) + } + }) + + f(LIMITX) + randRange(-8,8) +
+ +
+
+ +
+ +

+ Consider a function f(x). While + you don't know the formula for f(x) + you can nevertheless still evaluate it for given + values of x, provided that x + \ne LIMITX. Find{}^* + the value of each of the indicated limits to at least 3 digits of accuracy + by evaluating f(x) at various values, + or state that the limit does not exist (DNE). +

+

+

f()= ?
+

+

+ {}^*You can't really be sure whether you are finding the limit from + only a finite amount of data, but the function is "reasonable" enough that your experimental data + will not lead you astray. +

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( f(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, f(LIMITX)], 4 / 20, { fill: "RED" } ); + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( f(input)); +
+ circle( [input,f(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +

Continuous

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = f(LIMITX+.1)

+

f(LIMITX+.001) = f(LIMITX+.001)

+

f(LIMITX+.000001) = f(LIMITX+.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

Since the limits from both the right and the left exist and are equal, + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER +

+ +
+
+ +
+ +
+ +

+ Consider a function f(x). While + you don't know the formula for f(x) + you can nevertheless still evaluate it for given + values of x, provided that x + \ne LIMITX. Find{}^* + the value of each of the indicated limits to at least 3 digits of accuracy + by evaluating f(x) at various values, + or state that the limit does not exist (DNE). +

+

+

f()= ?
+

+

+ {}^*You can't really be sure whether you are finding the limit from + only a finite amount of data, but the function is "reasonable" enough that your experimental data + will not lead you astray. +

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( f(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, f(LIMITX)], 4 / 20, { fill: "WHITE" } ); + + circle( [LIMITX, notANSWER], 4 / 20, { fill: "RED" } ); + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f(input)); +
+ circle( [input,f(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else if (input == LIMITX){ + $('#nameDisplay').text( notANSWER); +
+ circle( [input,notANSWER], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = f(LIMITX+.1)

+

f(LIMITX+.001) = f(LIMITX+.001)

+

f(LIMITX+.000001) = f(LIMITX+.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = ANSWER

+

Since the limits from both the right and the left exist and are equal, + \displaystyle\lim_{x \to LIMITX}f(x) = ANSWER +

+ +
+
+ +
+ +
+ +

+ Consider a function f(x). While + you don't know the formula for f(x) + you can nevertheless still evaluate it for given + values of x, provided that x + \ne LIMITX. Find{}^* + the value of each of the indicated limits to at least 3 digits of accuracy + by evaluating f(x) at various values, + or state that the limit does not exist (DNE). +

+

+

f()= ?
+

+

+ {}^*You can't really be sure whether you are finding the limit from + only a finite amount of data, but the function is "reasonable" enough that your experimental data + will not lead you astray. +

+
+ graphInit({ + range: 10, + scale: 20, + tickStep: 1, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( F1(x)); + }, [-10, LIMITX-.0001], { + stroke: RED, + strokeWidth: 1 + }); + plot(function( x ) { + return ( F1(x)); + }, [ LIMITX+.0001,10], { + stroke: RED, + strokeWidth: 1 + }); + + circle( [LIMITX, F1(LIMITX-.0001)], 4 / 20, { fill: "white" } ); + + circle( [LIMITX, F1(LIMITX+.01)], 4 / 20, { fill: "white" } ); + + circle( [LIMITX, notANSWER], 4 / 20, { fill: "red" } ); + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( F1(input)); +
+ circle( [input,F1(input)], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else if (input == LIMITX){ + $('#nameDisplay').text( notANSWER); +
+ circle( [input,notANSWER], 1/8, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ + +
+ +

Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist

+
    +
  • Continuous
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) \neq f(LIMITX)
  • +
  • Discontinuous, because \displaystyle \lim_{x \to LIMITX} f(x) does not exist
  • + +
+ + +
+

Try values of x close to LIMITX but not equal to LIMITX

+

f(LIMITX-.1) = f(LIMITX-.1)

+

f(LIMITX-.001) = f(LIMITX-.001)

+

f(LIMITX-.000001) = f(LIMITX-.000001)

+

It looks like f(x) is approaching ANSWER as x approaches LIMITX + from the left. +

+

so \displaystyle\lim_{x \to LIMITX^{-}}f(x) = ANSWER

+

Now repeat the process for values of x which are greater than LIMITX

+

f(LIMITX+.1) = JUMP+f(LIMITX+.1)

+

f(LIMITX+.001) = JUMP+f(LIMITX+.001)

+

f(LIMITX+.000001) = JUMP+f(LIMITX+.000001)

+

It looks like f(x) is approaching JUMP+ANSWER as x approaches LIMITX + from the right. +

+

so \displaystyle\lim_{x \to LIMITX^{+}}f(x) = JUMP+ANSWER

+

The limits from both the right and the left exist, but they are not equal, so + \displaystyle\lim_{x \to LIMITX}f(x) does not exist (DNE). +

+
+
+ + + + + + +
+ + +
+ + diff --git a/curriculum/khanExercise/exercises/derivativeOracle.html b/curriculum/khanExercise/exercises/derivativeOracle.html index 81ba921..2557e28 100644 --- a/curriculum/khanExercise/exercises/derivativeOracle.html +++ b/curriculum/khanExercise/exercises/derivativeOracle.html @@ -24,23 +24,23 @@
-
- -
- -

- Consider a function f(x). While +

+

+ Consider a function f(x). While you don't know the formula for f(x) you can nevertheless still evaluate it for given - values of x. Given that f'(X) is an integer, + values of x. +

+

+ + Given that f'(X) is an integer, approximate f'(X).

- A calculator may be necessary -

+

f()= ?

- + A calculator may be necessary
(function(){ updateNameDisplay = function() { @@ -52,14 +52,14 @@ $('#nameField').keypress( updateNameDisplay ); })()
-
+

ANS

The definition of f'(X) is - \displaystyle\lim_{h \to 0} \frac{f(X + h)-f(X)}{h}

+ \displaystyle\lim_{h \to 0} \frac{f(X + h)-f(X)}{h}.

Try values of h which are close to, but not equal to zero.

diff --git a/curriculum/khanExercise/exercises/infiniteLimitsGraphical.html b/curriculum/khanExercise/exercises/infiniteLimitsGraphical.html new file mode 100644 index 0000000..edf8776 --- /dev/null +++ b/curriculum/khanExercise/exercises/infiniteLimitsGraphical.html @@ -0,0 +1,250 @@ + + + + + Understanding Infinite Limits Graphically + + + +

+
+ + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + randRange(-6,6) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + else { + return R/(x-LIMITX) + g(x); + } + }) + + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + if (x > LIMITX){ + return g(x); + } + }) + + (function(x){ + if (x < LIMITX){ + return g(x); + } + if (x > LIMITX){ + return R/(x-LIMITX)+g(x); + } + }) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(-L) + sol(R) + + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits to within \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + + +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f1(x)); + }, [-12, 12], { + stroke: RED, + strokeWidth: 2 + }); + + + + +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + + +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f2(x)); + }, [-12, 12], { + stroke: RED, + strokeWidth: 2 + }); + + circle( [LIMITX, g(LIMITX)], 4 / 20, { fill: "white" } ); + + +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + g(LIMITX) +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + + +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f3(x)); + }, [-12, LIMITX-.01], { + stroke: RED, + strokeWidth: 2 + }); + plot(function( x ) { + return ( f3(x)); + }, [LIMITX+.01, 12], { + stroke: RED, + strokeWidth: 2 + }); + + circle( [LIMITX, g(LIMITX)], 4 / 20, { fill: "white" } ); + + +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + g(LIMITX) +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/infiniteLimitsOracle.html b/curriculum/khanExercise/exercises/infiniteLimitsOracle.html new file mode 100644 index 0000000..3b35aa6 --- /dev/null +++ b/curriculum/khanExercise/exercises/infiniteLimitsOracle.html @@ -0,0 +1,244 @@ + + + + + Understanding Infinite Limits Numerically + + + +
+
+ + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + randRange(-6,6) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + else { + return R/(x-LIMITX) + g(x); + } + }) + + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + if (x > LIMITX){ + return g(x); + } + }) + + (function(x){ + if (x < LIMITX){ + return g(x); + } + if (x > LIMITX){ + return R/(x-LIMITX)+g(x); + } + }) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(-L) + sol(R) + + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits to three decimal places of accuracy. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f1(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f2(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + g(LIMITX) +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f3(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + g(LIMITX) +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/infiniteLimitsOracleGraphical.html b/curriculum/khanExercise/exercises/infiniteLimitsOracleGraphical.html new file mode 100644 index 0000000..940944e --- /dev/null +++ b/curriculum/khanExercise/exercises/infiniteLimitsOracleGraphical.html @@ -0,0 +1,307 @@ + + + + + Understanding Infinite Limits Numerically with Graphical Assistance + + + +
+
+ + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + randRange(-6,6) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + else { + return R/(x-LIMITX) + g(x); + } + }) + + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + if (x > LIMITX){ + return g(x); + } + }) + + (function(x){ + if (x < LIMITX){ + return g(x); + } + if (x > LIMITX){ + return R/(x-LIMITX)+g(x); + } + }) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(-L) + sol(R) + + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits to three decimal places of accuracy. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f1(x)); + }, [-12, 12], { + stroke: RED, + strokeWidth: 2 + }); + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f1(input)); +
+ ellipse( [input,f1(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f2(x)); + }, [-12, 12], { + stroke: RED, + strokeWidth: 2 + }); + + circle( [LIMITX, g(LIMITX)], 4 / 20, { fill: "white" } ); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f2(input)); +
+ ellipse( [input,f2(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + g(LIMITX) +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: 12, + scale: 16, + labelStep: 1, + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f3(x)); + }, [-12, LIMITX-.01], { + stroke: RED, + strokeWidth: 2 + }); + plot(function( x ) { + return ( f3(x)); + }, [LIMITX+.01, 12], { + stroke: RED, + strokeWidth: 2 + }); + + circle( [LIMITX, g(LIMITX)], 4 / 20, { fill: "white" } ); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f3(input)); +
+ ellipse( [input,f3(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + g(LIMITX) +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/infinityLimitOracle.html b/curriculum/khanExercise/exercises/infinityLimitOracle.html new file mode 100644 index 0000000..3b35aa6 --- /dev/null +++ b/curriculum/khanExercise/exercises/infinityLimitOracle.html @@ -0,0 +1,244 @@ + + + + + Understanding Infinite Limits Numerically + + + +
+
+ + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){return niceFunction(x,points)}) + randRange(-6,6) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + else { + return R/(x-LIMITX) + g(x); + } + }) + + (function(x){ + if (x <= LIMITX){ + return L/(x-LIMITX) + g(x); + } + if (x > LIMITX){ + return g(x); + } + }) + + (function(x){ + if (x < LIMITX){ + return g(x); + } + if (x > LIMITX){ + return R/(x-LIMITX)+g(x); + } + }) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(-L) + sol(R) + + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits to three decimal places of accuracy. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f1(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f2(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + leftSol +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + g(LIMITX) +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (input !== LIMITX && !isNaN(input)){ + $('#nameDisplay').text( f3(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to LIMITX^{-}}f(x): + g(LIMITX) +
+ \displaystyle\lim_{x \to LIMITX^{+}}f(x): + rightSol +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/inventory.txt b/curriculum/khanExercise/exercises/inventory.txt new file mode 100644 index 0000000..24876b6 --- /dev/null +++ b/curriculum/khanExercise/exercises/inventory.txt @@ -0,0 +1,80 @@ +Functions - Conceptual + + abscissaOrdinate.html (define the abscissa and ordinate) + graphingFromEquation.html ---> [needs better directions] + identifyConcavity.html (graph concave up or dawn) + identifyIncreaseDecrease.html (graph increasing or dec on interval) + identifyMaxMin.html (local max/ min at a point?) + identifyPosNeg.html ---> (students may be unclear what a "positive" function is. + For instance if f(x) is increasing with negative values) + plotPoint.html (plot a point on a coord grid) + pointOnFunction.html (evaluate a function at a point) + pointOnFunction2.html (plot a point given f(x)=y) + signedDistances.html (horizontal and vertical distance) + +Function - Computational + + evaluatingFunctions.html ---> (needs bold, evaluate 3rd degree poly) + functionTransformationPointwise.html (determine a point on composition of functions) + isThisAFunctionPoints.html ---> (needs bold, definition of function) + linearOracle.html ---> (needs bold, find equation of line) + +Limits at points - Conceptual + + approxLimitGraphical.html (left, right and standard limit) + approxLimitsOracle.html (left, right and standard limit) + approxLimitsOracleGraphical.html (left, right and standard limit) + limitsGraphical.html ---> (needs bold, solution box crowded, needs hint) + limitsOracle.html ---> (needs bold, solution box crowded) + imitsOracleGraphical.html ---> (needs bold, solution box crowded, needs bold) + +Limits at points - Computational + + limitsFactoring.html ---> (needs hint and re-posing of the task) + +Limit Laws + + limitsSymbolic.html ---> (needs bold, needs Hint) + +Limits at infinity - Conceptual + + infinityLimitOracle.html ---> (needs bold, solution box crowded, needs hint) + limitsAtInfinityGraphical.html ---> (needs bold, solution box crowded, needs hint) + limitsAtInfinityOracle.html ---> (needs bold, solution box crowded, needs hint) + limitsAtInfinityOracleGraphical.html ---> (needs bold, solution box crowded, needs hint) + + +Limits at infinity - Computational + +Infinite Limits - Conceptual + + infiniteLimitOracle.html ---> (empty doc) + infiniteLimitsGraphical.html ---> (needs bold, solution box crowded, needs hint) + infiniteLimitsOracle.html ---> (needs bold, solution box crowded, needs hint) + infiniteLimitsOracleGraphical.html ---> (needs bold, solution box crowded, needs hint) + +Infinite Limits-Computational + +Continuity - Conceptual + + continuityGraphical.html ---> (needs bold, Lim DNE, point discount, continuous) + continuityOracle.html (Lim DNE, point discont, continuous) + continuityOracleGraphical.html ---> (needs bold, Lim DNE, point discont, continuous) + +Continuity - Computational + +Intermediate Value Theorem + + bisectionOracle.html ---> ( needs bold, find roots with bisect method) + +Derivative - Conceptual + + approxDeriv.html (definition of derivative) + intuitiveCurveSketch.html (Inc/ dec/ concave up/ down) + linearApprox.html ---> (needs bold, linear approx, needs bold) + + +Derivative Computational + derivativeOracle.html (definition of derivative) + numChainRule.html ---> (needs bold, linear approx and chain rule) + repeatedLinApprox.html (needs bold) diff --git a/curriculum/khanExercise/exercises/limitsAtInfinityGraphical.html b/curriculum/khanExercise/exercises/limitsAtInfinityGraphical.html new file mode 100644 index 0000000..342861b --- /dev/null +++ b/curriculum/khanExercise/exercises/limitsAtInfinityGraphical.html @@ -0,0 +1,293 @@ + + + + + Approximating Limits at Infinity Numerically with Graphical Assistance + + + +
+
+ + + new Polynomial(0,4) + randRange(0,2) + randRange(1,9) + randRangeExclude(-4,4,[p.coefs[4]]) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+(C-p.coefs[4])*x*x/(x*x+1) + } + } + ) + + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10; + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x <0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10 + } + } + ) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(E) + sol(D) + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + C +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( g(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( h(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ + +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( k(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + p.coefs[4] +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/limitsAtInfinityOracle.html b/curriculum/khanExercise/exercises/limitsAtInfinityOracle.html index 754449e..9f5e575 100644 --- a/curriculum/khanExercise/exercises/limitsAtInfinityOracle.html +++ b/curriculum/khanExercise/exercises/limitsAtInfinityOracle.html @@ -1,35 +1,311 @@ - - + + - Limits at Infinity + Approximating Limits at Infinity Graphically - -
- + + + new Polynomial(0,4) + randRange(0,2) + randRange(1,9) + randRangeExclude(-4,4,[p.coefs[4]]) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+(C-p.coefs[4])*x*x/(x*x+1) + } + } + ) + + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10; + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x <0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10 + } + } + ) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(E) + sol(D) + +
-
+
+
+ +

+ Consider the function f(x). Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ - + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( f(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+
-

+
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + C +

+ +
+ + +
+ +

hint

+
-
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+

+

f()= ?
+

+ +
+ + + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( g(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( h(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( k(input)); + + } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
-
- +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + p.coefs[4] +

+ +
+ + +
+ +

hint

+
+
+ + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/limitsAtInfinityOracleGraphical.html b/curriculum/khanExercise/exercises/limitsAtInfinityOracleGraphical.html new file mode 100644 index 0000000..f121eb7 --- /dev/null +++ b/curriculum/khanExercise/exercises/limitsAtInfinityOracleGraphical.html @@ -0,0 +1,380 @@ + + + + + Approximating Limits at Infinity Graphically + + + +
+
+ + + new Polynomial(0,4) + randRange(0,2) + randRange(1,9) + randRangeExclude(-4,4,[p.coefs[4]]) + randRangeNonZero(-1,1) + randRangeNonZero(-1,1) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+(C-p.coefs[4])*x*x/(x*x+1) + } + } + ) + + makeXList() + makeYList(-8,8,Xs.length) + makeCoordinates(Xs,Ys) + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10; + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x >0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+E*x*x/10 + } + } + ) + + (function(x){ + if (x <0){ + return p.evalOf(x)/(x*x*x*x+A*x*x+B); + } + else { + return p.evalOf(x)/(x*x*x*x+A*x*x+B)+D*x*x/10 + } + } + ) + + (function(A){ + if (A > 0){ + return "infinity" + } + else { + return "-infinity" + } + }) + + + sol(E) + sol(D) + + +
+ +
+
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( f(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 2 + }); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( f(input)); +
+ ellipse( [input,f(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + C +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+

+

f()= ?
+

+ +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( g(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( g(input)); +
+ ellipse( [input,g(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( h(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( h(input)); +
+ ellipse( [input,h(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + p.coefs[4] +
+ \displaystyle\lim_{x \to -\infty}f(x): + negSol +

+ +
+ + +
+ +

hint

+
+
+ +
+ +
+ +

+ Consider the function f(x) graphed below. Find + the value of each of the indicated limits with an error of at most \frac{1}{2}. + If one of the limits appears to be \infty or -\infty, just type "infinity" + or "-infinity". +

+ +

+

f()= ?
+

+ +
+ graphInit({ + range: [20,10], + scale: [12,20], + labelStep: [2,1], + gridOpacity: 0, + axisArrows: "<->" + }); + + plot(function( x ) { + return ( k(x)); + }, [-20, 20], { + stroke: RED, + strokeWidth: 1 + }); + + (function(){ + updateNameDisplay = function() { + var input = parseFloat(this.value) + if (!isNaN(input)){ + $('#nameDisplay').text( k(input)); +
+ ellipse( [input,k(input)], 1/4, { + stroke: "none", + fill: GREEN + }); +
+ } + else {$('#nameDisplay').text("?")}; + }; + $('#nameField').keydown( updateNameDisplay ); + $('#nameField').keyup( updateNameDisplay ); + $('#nameField').keypress( updateNameDisplay ); + })() +
+ +
+ +
+ +

+ \displaystyle\lim_{x \to +\infty}f(x): + posSol +
+ \displaystyle\lim_{x \to -\infty}f(x): + p.coefs[4] +

+ +
+ + +
+ +

hint

+
+
+ + + + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/curriculum/khanExercise/exercises/limitsFactoring.html b/curriculum/khanExercise/exercises/limitsFactoring.html new file mode 100644 index 0000000..85fab95 --- /dev/null +++ b/curriculum/khanExercise/exercises/limitsFactoring.html @@ -0,0 +1,105 @@ + + + + + Limits at a Value + + + +
+
+
+
+ randRange(2, 10) + randFromArray([-1, 1]) + randFromArrayExclude([2, 3, 4, 5, 6, 7, 8, 9, 10], [a]) + b_sign*b_abs + randFromArrayExclude(getFactors(a * b_abs), [1]) + a + b + a * b / A + getGCD(A, a) + b_sign * getGCD(b_abs, C) + fractionReduce( - F2, F1 ) + - F2 / F1 + b_abs * ( - F2 / F1 ) + a + simplify(polynomial([A, B, C], "x"), simplifyOptions.basic) + simplify(polynomial([F1, F2], "x"), simplifyOptions.basic) + + parse("(" + F1 + "x+" + F2 + ")(" + A / F1 + "x+" + a / F1 + ")") + parse(F1 + "x(" + A / F1 + "x+" + a / F1 + ")+" + F2 + "(" + b / F2 + "x+" + C / F2 + ")}") + [parse("#{ab} &=& #{A}*#{C} &=& " + (A*C), [GREEN, BLUE, ORANGE]), + parse("#{a}+#{b} &=& #{B} &=& #{" + B, [GREEN, GREEN, PINK])] + ((A / F1) * LIMITXSOL ) + ( a / F1 ) + +
+
+

+ Find +

+

+ \displaystyle\lim_{x\toLIMITX}\frac{format(PROBLEM, "large")}{format(PROBLEM2, "large")} +

+
+
+ +

+ \displaystyle\lim_{x\toLIMITX}f(x): + roundTo(2, SOL) + +

+
+
+
+

The expression is of the form + parseFormat("#{A}x^2+#{B}x+#{C}}", [BLUE, PINK, ORANGE]). + You can factor this trinomial by grouping. In this case, + \blue{A}=\blue{A}, \pink{B}=\pink{B}, + \orange{C}=\orange{C} +

+
+
+

To do this, the first step is to find two values + \green{a} and + \green{b}, such that:

+

parseFormat("#{ab} = #{A}*#{C}", [GREEN, BLUE, ORANGE])

+

parseFormat("#{a}+#{b} = #{B}", [GREEN, GREEN, PINK])

+

The next step is to rewrite the + expression as parseFormat("#{A}x^2 + #{a}x + #{b}x + #{C}", [BLUE, GREEN, GREEN, ORANGE]) or + parseFormat("(#{A}x^2 + #{a}x) + (#{b}x + #{C})", [BLUE, GREEN, GREEN, ORANGE]), and factor each term, to + find a common factor.

+
+
+

To apply the first step, you need to find + \green{a} and \green{b} such that:

+

formatGroup(GROUP1, [0,1])

+
+
+

The following values can be used:

+

parseFormat("#{a}=#{" + a + "}", [GREEN, GREEN])
+ parseFormat("#{b}=#{" + b + "}", [GREEN, GREEN])

+
+
+

For the second step, rewrite the expression as:

+

parseFormat("#{" + A + "}x^2+#{" + a + "}x+#{" + b + "}x+#{" + C + "}}", [BLUE, GREEN, GREEN, ORANGE])

+

or

parseFormat("(#{" + A + "}x^2+#{" + a + "}x)+(#{" + b + "}x+#{" + C + "})", [BLUE, GREEN, GREEN, ORANGE])

+

The next step is to factor both terms of the above expression:

+
+
+

+ format(HINT1, {del1factors:true, evalBasicNumOps:true}) +

+
+
+

+ Redistribute the common term to get the answer: +

+

+ format(, simplifyOptions.basic, false, "large") +

+
+
+
+
+
+ + diff --git a/curriculum/khanExercise/exercises/limitsSymbolic.html b/curriculum/khanExercise/exercises/limitsSymbolic.html new file mode 100644 index 0000000..f962684 --- /dev/null +++ b/curriculum/khanExercise/exercises/limitsSymbolic.html @@ -0,0 +1,273 @@ + + + + + Approximating the Derivative Numerically + + + +
+ + +
+
+ +
+ randRangeNonZero(-9,9) + randRangeExclude(-9,9,[A]) + randRangeExclude(-9,9,[A,B]) + randRangeNonZero(-9,9) + randRangeNonZero(-9,9) + new Polynomial(0,1,[-A,1]) + new Polynomial(0,1,[-B*D,D]) + new Polynomial(0,1,[-C*E,E]) + lin1.multiply(lin2) + lin1.multiply(lin3) + \frac{num.text()}{denom.text()} +
+ +

+ + A fully completed limit computation is presented below. Carefully check each step of the calculation, and either say which + limit law justifies the step, or that a mistake has been made. Note that we use the abbreviation "nbhd" for the word "neighborhood" + +

+ + + \displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + = \displaystyle\displaystyle\lim_{x \to A}\frac{(lin1.text())(lin2.text())}{(lin1.text())(lin3.text())} + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + = \displaystyle\lim_{x \to A}\frac{lin2.text()}{lin3.text()} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{\displaystyle\lim_{x \to A}(lin2.text())}{\displaystyle\lim_{x \to A}(lin3.text())} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{\displaystyle\lim_{x \to A}(Dx)+\displaystyle\lim_{x \to A}(-B*D)} + {\displaystyle\lim_{x \to A}(Ex)+\displaystyle\lim_{x \to A}(-C*E)} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{D\displaystyle\lim_{x \to A}(x)+\displaystyle\lim_{x \to A}(-B*D)} + {E\displaystyle\lim_{x \to A}(x)+\displaystyle\lim_{x \to A}(-C*E)} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{(D)(A)+\displaystyle\lim_{x \to A}(-B*D)} + {(E)(A)+\displaystyle\lim_{x \to A}(-C*E)} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{(D)(A)+-B*D} + {(E)(A)+-C*E} + + + +

+ + \hphantom{\displaystyle\lim_{x \to A}\frac{num.text()}{denom.text()=}} + + + +

+ + + + + = \displaystyle\frac{D*A-B*D} + {E*A-C*E} + + + + + +

+

+ + +

+
+ +
+ [$('#0 :selected').val(),$('#1 :selected').val(),$('#2 :selected').val(),$('#3 :selected').val(),$('#4 :selected').val(),$('#5 :selected').val(),$('#6 :selected').val(),$('#7 :selected').val() ] +
+
+ return guess[0]=="equivalent" && guess[1]=="equivalent" + && guess[2]=="quotient" && guess[3]=="sum" + && guess[4]=="product" && guess[5]=="identity" + && guess[6]=="constant" && guess[7]=="arithmetic" +
+ +
+
+
+ +
+ +
+
+ + + + diff --git a/curriculum/khanExercise/exercises/orderOfExercises.txt b/curriculum/khanExercise/exercises/orderOfExercises.txt index 1d60095..46fc8ed 100644 --- a/curriculum/khanExercise/exercises/orderOfExercises.txt +++ b/curriculum/khanExercise/exercises/orderOfExercises.txt @@ -1,14 +1,19 @@ --Review (points, graphing, lines)-- +C = complete with or without hints +H = has hints +I = Incomplete +P = complete, with hints, and throughly checked over. + *POINTS* -C abscissaOrdinate -C plotPoint +CH abscissaOrdinate +CH plotPoint I signedDistances *FUNCTIONS* -C pointOnFunction -C pointOnFunction2 +CH pointOnFunction +CH pointOnFunction2 C isThisAFunctionPoints I isThisAFunctionGraph C evaluatingFunctions @@ -65,16 +70,18 @@ I coolInfinityLimitOracle I infiniteLimitGraphical I infiniteLimitSymbolic -I limitsAtInfinityOracle +C limitsAtInfinityOracle I coolLimitsAtInfinityOracle -I limitsAtInfinityGraphical +C limitsAtInfinityGraphical +C limitsAtInfinityOracleGraphical I limitsAtInfinitySymbolic -I continuityOracle -I continuityGraphical +C continuityOracle +C continuityOracleGraphical +C continuityGraphical I continuitySymbolic -I bisectionOracle +C bisectionOracle --Differentiation-- diff --git a/curriculum/khanExercise/utils/steveMath8.js b/curriculum/khanExercise/utils/steveMath8.js index be7a638..2e3bc6f 100644 --- a/curriculum/khanExercise/utils/steveMath8.js +++ b/curriculum/khanExercise/utils/steveMath8.js @@ -19,6 +19,21 @@ $.extend(KhanUtil, { return z }, + steveBisectionList: function(f,xmin,xmax){ + var l = xmin + var r = xmax + var z = 0 + var list = [] + for (var i=0;i<10;i++){ + z = (l + r)/2 + list.push(z) + if (KhanUtil.steveSign(f(l)) == KhanUtil.steveSign(f(z))){ l = z} + else{r = z} + + } + return list + }, + goober: function(n,f){ var list = [] for (var i=0;i<10;i++){ @@ -46,7 +61,7 @@ $.extend(KhanUtil, { if (KhanUtil.steveSign(y0) !== KhanUtil.steveSign(y1)){ z = KhanUtil.steveRoot(f,x0,x1) - list.push(KhanUtil.roundTo(1,z)) + list.push(z) } } diff --git a/curriculum/photos/roman-holowinsky.jpg b/curriculum/photos/roman-holowinsky.jpg deleted file mode 100644 index 66820e4..0000000 Binary files a/curriculum/photos/roman-holowinsky.jpg and /dev/null differ diff --git a/db/migrate/20121223191316_add_coursera_id_to_user.rb b/db/migrate/20121223191316_add_coursera_id_to_user.rb new file mode 100644 index 0000000..618a9ee --- /dev/null +++ b/db/migrate/20121223191316_add_coursera_id_to_user.rb @@ -0,0 +1,5 @@ +class AddCourseraIdToUser < ActiveRecord::Migration + def change + add_column :users, :coursera_id, :string + end +end diff --git a/db/migrate/20121226224552_create_problems.rb b/db/migrate/20121226224552_create_problems.rb new file mode 100644 index 0000000..a2ea340 --- /dev/null +++ b/db/migrate/20121226224552_create_problems.rb @@ -0,0 +1,11 @@ +class CreateProblems < ActiveRecord::Migration + def change + create_table :problems do |t| + t.string :name + t.references :exercise + + t.timestamps + end + add_index :problems, :exercise_id + end +end diff --git a/db/migrate/20121226224935_remove_problem_numbers.rb b/db/migrate/20121226224935_remove_problem_numbers.rb new file mode 100644 index 0000000..5b933a2 --- /dev/null +++ b/db/migrate/20121226224935_remove_problem_numbers.rb @@ -0,0 +1,9 @@ +class RemoveProblemNumbers < ActiveRecord::Migration + def up + remove_column :exercises, :problem_number + end + + def down + add_column :exercises, :problem_number, :integer + end +end diff --git a/db/migrate/20121226225736_scores_link_to_problems_not_exercises.rb b/db/migrate/20121226225736_scores_link_to_problems_not_exercises.rb new file mode 100644 index 0000000..5ceca31 --- /dev/null +++ b/db/migrate/20121226225736_scores_link_to_problems_not_exercises.rb @@ -0,0 +1,11 @@ +class ScoresLinkToProblemsNotExercises < ActiveRecord::Migration + def up + remove_column :scores, :exercise_id + add_column :scores, :problem_id, :integer + end + + def down + add_column :scores, :exercise_id, :integer + remove_column :scores, :problem_id + end +end diff --git a/lib/omniauth-coursera.rb b/lib/omniauth-coursera.rb new file mode 100644 index 0000000..f07ce30 --- /dev/null +++ b/lib/omniauth-coursera.rb @@ -0,0 +1,101 @@ +require 'omniauth-oauth' + +module OmniAuth + module Strategies + class Coursera < OmniAuth::Strategies::OAuth + option :name, "coursera" + + # This is where you pass the options you would pass when + # initializing your consumer from the OAuth gem. + option :client_options, { + :site => 'https://authentication.coursera.org', + :request_token_path => '/auth/oauth/api/request_token', + :access_token_path => '/auth/oauth/api/access_token', + :authorize_url => nil # this will be set during the request_phase + } + + option :fields, ["id", "name", "subtitles_access"] + + # These are called after authentication has succeeded. If + # possible, you should try to set the UID without making + # additional calls (if the user id is returned with the token + # or as a URI parameter). This may not be possible with all + # providers. + uid{ raw_info['id'] } + + info do + { + 'id' => raw_info['id'], + 'name' => raw_info['full_name'], + 'subtitles_access' => raw_info['subtitles_access'] + } + end + + extra do + { + 'raw_info' => raw_info + } + end + + + def request_phase + request_token = consumer.get_request_token({:oauth_callback => callback_url}, options.request_params) + session['oauth'] ||= {} + + token = request_token.params['oauth_token'] + secret = request_token.params['oauth_secret'] + + session['oauth'][name.to_s] = { + 'callback_confirmed' => request_token.callback_confirmed?, + 'request_token' => token, + 'request_secret' => secret} + + # Coursera apparently doesn't have a fixed authentication_url and instead sends us one here + authentication_url = request_token.params['authentication_url'] + params = { :oauth_token => request_token.token } + + uri = URI.parse(authentication_url) + uri.query = params.map { |k,v| [k, CGI.escape(v)] * "=" } * "&" + redirect uri.to_s + + rescue ::Timeout::Error => e + fail!(:timeout, e) + rescue ::Net::HTTPFatalError, ::OpenSSL::SSL::SSLError => e + fail!(:service_unavailable, e) + end + + + def callback_phase + raise OmniAuth::NoSessionError.new("Session Expired") if session['oauth'].nil? + + request_token = ::OAuth::RequestToken.new(consumer, + session['oauth'][name.to_s].delete('request_token'), + session['oauth'][name.to_s].delete('request_secret')) + + opts = {} + opts[:oauth_verifier] = request['oauth_verifier'] + + @access_token = request_token.get_access_token(opts) + + self.env['omniauth.auth'] = auth_hash + call_app! + + rescue ::Timeout::Error => e + fail!(:timeout, e) + rescue ::Net::HTTPFatalError, ::OpenSSL::SSL::SSLError => e + fail!(:service_unavailable, e) + rescue ::OAuth::Unauthorized => e + fail!(:invalid_credentials, e) + rescue ::MultiJson::DecodeError => e + fail!(:invalid_response, e) + rescue ::OmniAuth::NoSessionError => e + fail!(:session_expired, e) + end + + def raw_info + # FIXME: multiJSON is recommended over JSON for some reason? + @raw_info ||= JSON.parse(access_token.get('/auth/oauth/api/get_identity').body) + end + end + end +end diff --git a/curriculum/photos/Makefile b/public/photos/Makefile similarity index 100% rename from curriculum/photos/Makefile rename to public/photos/Makefile diff --git a/curriculum/photos/bart-snapp.jpg b/public/photos/bart-snapp.jpg similarity index 100% rename from curriculum/photos/bart-snapp.jpg rename to public/photos/bart-snapp.jpg diff --git a/curriculum/photos/jim-fowler.jpg b/public/photos/jim-fowler.jpg similarity index 100% rename from curriculum/photos/jim-fowler.jpg rename to public/photos/jim-fowler.jpg diff --git a/public/photos/roman-holowinsky.jpg b/public/photos/roman-holowinsky.jpg new file mode 100644 index 0000000..6b6c830 Binary files /dev/null and b/public/photos/roman-holowinsky.jpg differ diff --git a/curriculum/photos/ryan-kowalick.jpg b/public/photos/ryan-kowalick.jpg similarity index 100% rename from curriculum/photos/ryan-kowalick.jpg rename to public/photos/ryan-kowalick.jpg diff --git a/public/photos/sean-corey.jpg b/public/photos/sean-corey.jpg new file mode 100644 index 0000000..c4f2abc Binary files /dev/null and b/public/photos/sean-corey.jpg differ diff --git a/curriculum/photos/steve-gubkin.jpg b/public/photos/steve-gubkin.jpg similarity index 100% rename from curriculum/photos/steve-gubkin.jpg rename to public/photos/steve-gubkin.jpg diff --git a/public/textbook/limits.tex b/public/textbook/limits.tex index 35ffeb4..6f32bb2 100644 --- a/public/textbook/limits.tex +++ b/public/textbook/limits.tex @@ -1036,7 +1036,41 @@ \section{Infinite Limits} \begin{exercises} -FILL IN +\noindent Compute the limits. If a limit does not exist, explain why. +\twocol +\begin{exercise} +$\lim_{x\to 1-} \frac{1}{x^2-1}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to 4-} \frac{3}{x^2-2}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to -1+} \frac{1+2x}{x^3-1}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to 3+} \frac{x-9}{x^2-6x+9}$ +\end{exercise} + +\endtwocol + + +\begin{exercise} +Find the vertical asymptotes of +\[ +f(x) = \frac{x-3}{x^2+2x-3}. +\] +\end{exercise} + + +\begin{exercise} +Find the vertical asymptotes of +\[ +f(x) = \frac{x^2-x-6}{x+4}. +\] +\end{exercise} \end{exercises} @@ -1234,7 +1268,25 @@ \section{Limits at Infinity} \begin{exercises} -FILL IN +\noindent Compute the limits. If a limit does not exist, explain why. +\twocol +\begin{exercise} +$\lim_{x\to \infty} \frac{1}{x}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to \infty} \frac{-x}{\sqrt{4+x^2}}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to \infty} \frac{2x^2-x+1}{4x^2-3x-1}$ +\end{exercise} + +\begin{exercise} +$\lim_{x\to -\infty} \frac{x^3-4}{3x^2+4x-1}$ +\end{exercise} + +\endtwocol \end{exercises} diff --git a/test/fixtures/problems.yml b/test/fixtures/problems.yml new file mode 100644 index 0000000..f20ef69 --- /dev/null +++ b/test/fixtures/problems.yml @@ -0,0 +1,9 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + name: MyString + exercise: + +two: + name: MyString + exercise: diff --git a/test/unit/problem_test.rb b/test/unit/problem_test.rb new file mode 100644 index 0000000..2b9ec4e --- /dev/null +++ b/test/unit/problem_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class ProblemTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end