// Numbas version: exam_results_page_options {"name": "Interactive Newton-Raphson method", "extensions": ["jsxgraph"], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"variable_groups": [], "contributors": [{"name": "Christian Lawson-Perfect", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/7/"}, {"name": "Chris Graham", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/369/"}], "parts": [{"marks": 0, "stepsPenalty": 0, "showFeedbackIcon": true, "type": "gapfill", "showCorrectAnswer": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "adaptiveMarkingPenalty": 0, "prompt": "\n\t\t\t

This equation has a root in the range $0 \\lt x \\lt 1$.

\n\t\t\t

Using the Newton-Raphson formula, if $x_n$ is the $n$th estimate for this root, show that the next estimate can be written in the form \$x_{n+1}= \\frac{p(x_n)}{g'(x_n)}\$
Enter $p(x_n)$ and $g'(x_n)$ in the boxes below.

\n\t\t\t

Please note that if you enter a function of the form $xe^{ax}$, then you must input it as $x*e^{ax}$.

\n\t\t\t

$p(x_n)=\\;\\;$[] In your answer use $x$ instead of $x_n$.

\n\t\t\t

$g'(x_n)=\\;\\;$[] In your answer use $x$ instead of $x_n$.

\n\t\t\t

If you have forgotten the Newton-Raphson formula you can click on Steps to see it. You will not lose any marks in doing so.

\n\t\t\t \n\t\t\t", "unitTests": [], "extendBaseMarkingAlgorithm": true, "customMarkingAlgorithm": "", "steps": [{"variableReplacementStrategy": "originalfirst", "adaptiveMarkingPenalty": 0, "checkingType": "absdiff", "valuegenerators": [], "answer": "", "checkingAccuracy": 0.001, "prompt": "

Recall that the Newton-Raphson method is defined by:
\$x_{n+1}=x_n-\\frac{g(x_n)}{g'(x_n)}\$
where we would like to find the root of the equation $g(x)=0$

If $x_0=2\\;\\;\\;$what is $x_1$ correct to $4$ decimal places?

\n\t\t\t

$x_1=\\;\\;$ []

\n\t\t\t

Enter your answer to 4 decimal places.

\n\t\t\t", "unitTests": [], "extendBaseMarkingAlgorithm": true, "customMarkingAlgorithm": "", "scripts": {}, "sortAnswers": false, "useCustomName": false, "customName": "", "gaps": [{"notationStyles": ["plain", "en", "si-en"], "adaptiveMarkingPenalty": 0, "variableReplacementStrategy": "originalfirst", "allowFractions": false, "correctAnswerStyle": "plain", "correctAnswerFraction": false, "mustBeReducedPC": 0, "useCustomName": false, "customName": "", "marks": 1, "mustBeReduced": false, "showFeedbackIcon": true, "type": "numberentry", "showCorrectAnswer": true, "maxValue": "ans+tol", "variableReplacements": [], "minValue": "ans-tol", "unitTests": [], "extendBaseMarkingAlgorithm": true, "customMarkingAlgorithm": "", "scripts": {}, "showFractionHint": true}]}], "rulesets": {"std": ["all", "!collectNumbers", "!noLeadingMinus"]}, "functions": {"nr": {"definition": "if(n=5,l+[fun(m,b,a,c)]+[fun(m,b,a,fun(m,b,a,c))],nr(m,b,a,fun(m,b,a,c),n-1,l+[c]))", "type": "list", "language": "jme", "parameters": [["m", "number"], ["b", "number"], ["a", "number"], ["c", "number"], ["n", "number"], ["l", "list"]]}, "test": {"definition": "\n\t\t\tvar div = Numbas.extensions.jsxgraph.makeBoard('600px','400px', {boundingbox:[0,maxy,3,-30], axis:false});\n\t\t\t var brd=div.board;\n\t\t\t // Initial function term\n\t\t\t var term = function(x) { return Math.exp(m*x)+b*x-a; };\n\t\t\t var graph = function(x) { return term(x); };\n\t\t\t // Recursion depth\n\t\t\t var steps = 4;\n\t\t\t // Start value\n\t\t\t var s = 2;\n\t\t\t \n\t\t\t //for (i = 0; i < steps; i++) {\n\t\t\t //document.write('x' + i + ' = ');\n\t\t\t //}\n\t\t\t \n\t\t\t var i;\n\t\t\t var ax = brd.create('axis', [[0,0], [1,0]], {strokeColor: 'black'});\n\t\t\t var ay = brd.create('axis', [[0,0], [0,1]], {strokeColor: 'black'});\n\t\t\t \n\t\t\t var g = brd.create('functiongraph', [function(x){return graph(x);}],{strokeWidth: 2, dash:0});\n\t\t\t var x = brd.create('glider',[s,0,ax], {name: 'x_{0}', strokeColor: 'magenta', fillColor: 'yellow'});\n\t\t\t \n\t\t\t newton(x, steps, brd);\t\n\t\t\t \n\t\t\t //function xval() {\n\t\t\t //for (i = 0; i < steps; i++)\n\t\t\t //document.getElementById('xv' + i).innerHTML = (brd.select('x_{' + i + '}').X()).toFixed(14);\n\t\t\t //}\n\t\t\t \n\t\t\t //brd.addHook(xval);\n\t\t\t \n\t\t\t function newton(p, i, board) {\t\n\t\t\t board.suspendUpdate();\t\n\t\t\t if(i>0) {\n\t\t\t var f = board.create('glider',[function(){return p.X();}, function(){return graph(p.X())},g], {name: '', style: 3, strokeColor: 'green', fillColor: 'yellow'});\n\t\t\t var l = board.create('line', [p,f],{strokeWidth: 0.5, dash: 1, straightFirst: false, straightLast: false, strokeColor: 'black'});\n\t\t\t var t = board.create('tangent',[f],{strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0});\n\t\t\t var x = board.create('intersection',[ax,t,0],{name: 'x_{'+(steps-i+1) + '}', style: 4, strokeColor: 'magenta', fillColor: 'yellow'});\n\t\t\t newton(x,--i, board);\n\t\t\t }\n\t\t\t board.unsuspendUpdate(); \n\t\t\t \n\t\t\t \n\t\t\t }\t\n\t\t\t return div;\n\t\t\t", "type": "html", "language": "javascript", "parameters": [["m", "number"], ["b", "number"], ["a", "number"], ["maxy", "number"]]}, "fun": {"definition": "((m*c-1)*e^(m*c)+a)/(m*e^(m*c)+b)", "type": "number", "language": "jme", "parameters": [["m", "number"], ["b", "number"], ["a", "number"], ["c", "number"]]}, "funfornr": {"definition": "\n\t\t\tvar div = Numbas.extensions.jsxgraph.makeBoard('600px','200px',{boundingBox:[0,10,1,-8],grid:false});\n\t\t\t var board = div.board;\n\t\t\t var m = Numbas.jme.unwrapValue(scope.variables.m);\n\t\t\t var be = Numbas.jme.unwrapValue(scope.variables.b);\n\t\t\t var al = Numbas.jme.unwrapValue(scope.variables.a);\n\t\t\t var ans = Numbas.jme.unwrapValue(scope.variables.ans1)\n\t\t\t var a = board.create('point',[ans,0],'$A$');\n\t\t\t \n\t\t\t var graph = board.create('functiongraph',function(x){return Math.exp(m*x)+be*x-al});\n\t\t\t \n\t\t\t return div;\n\t\t\t \n\t\t\t", "type": "html", "language": "javascript", "parameters": []}}, "preamble": {"js": "", "css": ""}, "name": "Interactive Newton-Raphson method", "tags": ["exponential functions", "iterative method", "JSXgraph", "jsxgraph", "Jsxgraph", "Newton-Raphson method", "newton-raphson method", "numerical methods", "numerical solution", "solving equations", "Solving equations", "Steps", "steps"], "extensions": ["jsxgraph"], "metadata": {"licence": "Creative Commons Attribution 4.0 International", "description": "\n\t\t

Write down the Newton-Raphson formula for finding a numerical solution to the equation $e^{mx}+bx-a=0$. If $x_0=1$ find $x_1$.

\n\t\t

Included in the Advice of this question are:

\n\t\t

6 iterations of the method.

\n\t\t

Graph of the NR process using jsxgraph. Also user interaction allowing change of starting value and its effect on the process.

a)

\n\t

Recall that the Newton-Raphson method is defined by:
\$x_{n+1}=x_n-\\frac{g(x_n)}{g'(x_n)}\$
where we would like to find the root of the equation $g(x)=0$

\n\t

In this question we have:
\$\\simplify[std]{g(x) = Exp({m} * x) + {b} * x + { -a}} \\Rightarrow \\simplify[std]{g'(x) = {m}*Exp({m} * x) + {b}}\$
Substituting these expressions into the formula we have:
\$x_{n+1} =\\simplify[std]{ x_n -((Exp({m} * x_n) + {b} * x_n + { -a}) / ({m} * Exp({m} * x _n) + {b}))}\$

\n\t

which can be rearranged to give:
\$x _{n + 1} = \\simplify[std]{(({m} * x_n -1) * Exp({m} * x _n) + {a}) / ({m} * Exp({m} * x _n) + {b})}\$

\n\t

(In your answers you would input $x$ rather than $x_n$.)

\n\t

In the following let $\\displaystyle f(x)=\\simplify[std]{ (({m} * x -1) * Exp({m} * x ) + {a}) / ({m} * Exp({m} * x ) + {b})}$

\n\t

b)

\n\t

If $x_0=2$ then $x_1$ is simply given by:
\$\\simplify[std]{x_1 = (({2*m} -1) * Exp({2*m}) + {a}) / ({m} * Exp({2*m}) + {b})}\$

\n\t

which to 4 decimal places is: $\\;\\;x_1= \\var{ans}$

\n\t

We find on running the iteration that the first six values are:

\n\t

\\\begin{align}x_1&=f(x_0)=f(2)&=\\var{results}\\\\x_2&=f(x_1)=f(\\var{results})&=\\var{results}\\\\x_3&=f(x_2)=f(\\var{results})&=\\var{results}\\\\x_4&=f(x_3)=f(\\var{results})&=\\var{results}\\\\x_5&=f(x_4)=f(\\var{results})&=\\var{results}\\\\x_6&=f(x_5)=f(\\var{results})&=\\var{results}\\end{align}\

\n\t

So the solution to the equation to four decimal places for $0 \\le x \\le 1$ is $x=\\var{precround(ans1,4)}$

\n\t

Here we see the graph of $\\simplify{e^({m}*x)+{b}*x-{a}}$ and the first four successive approximations to the root:

\n\t

{test(m,b,a,maxy)}

\n\t

\n\t

Note that you can slide the first approximation $x_0$ along the x-axis to see the effect of changing the starting value.

\n\t", "variablesTest": {"condition": "", "maxRuns": 100}, "variables": {"maxy": {"templateType": "anything", "definition": "ceil(e^(2*m)+2*b-a)+5", "description": "", "name": "maxy", "group": "Ungrouped variables"}, "ans1": {"templateType": "anything", "definition": "precround(results,4)", "description": "", "name": "ans1", "group": "Ungrouped variables"}, "ans": {"templateType": "anything", "definition": "precround(tans,4)", "description": "", "name": "ans", "group": "Ungrouped variables"}, "b": {"templateType": "anything", "definition": "random((a+1)..9)", "description": "", "name": "b", "group": "Ungrouped variables"}, "tol": {"templateType": "anything", "definition": "0", "description": "", "name": "tol", "group": "Ungrouped variables"}, "tans": {"templateType": "anything", "definition": "((2*m-1)*exp(2*m)+a)/(m*exp(2*m)+b)", "description": "", "name": "tans", "group": "Ungrouped variables"}, "m": {"templateType": "anything", "definition": "random(1.5..2#0.1)", "description": "", "name": "m", "group": "Ungrouped variables"}, "results": {"templateType": "anything", "definition": "nr(m,b,a,2,10,[])", "description": "", "name": "results", "group": "Ungrouped variables"}, "a": {"templateType": "anything", "definition": "random(8..15)", "description": "", "name": "a", "group": "Ungrouped variables"}}, "statement": "\n\t

Consider the following equation.

\n\t

\$\\simplify[std]{e^({m}x)+{b}x-{a}=0}\$

\n\t

Find the approximate solution in the range $0 \\le x \\le 1$ by using the Newton-Raphson method.

\n\t

The following diagram demonstrates the method.

\n\t

$x_0$ is the starting value, you can slide it along the x-axis to see the effect of changing it.

\n\t

\n\t

{test(m,b,a,maxy)}

\n\t

\n\t

\n\t

\n\t", "ungrouped_variables": ["a", "m", "ans1", "ans", "b", "tol", "tans", "maxy", "results"]}]}], "contributors": [{"name": "Christian Lawson-Perfect", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/7/"}, {"name": "Chris Graham", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/369/"}]}