# Difference between revisions of "Newton's root finding method"

Jump to navigationJump to search

xo is the start value. Drag it.

You may change the function term here, Try also the following function terms:
• sin(x)
• exp(x)
• 2^x
• 1-2/(x*x)

 f(x) =

### The underlying JavaScript code

<table width="600" border="0" cellpadding="0" cellspacing="0">
x<sub>o</sub> is the start value. Drag it.
<p></p>
You may change the function term here:
<br>
<td><nobr>f(x) = </nobr></td>
<td>
<form>
<input style="border:none; background-color:#efefef;padding:5px;margin-left:2px;" type="text" id="graphterm" value="x*x*x/5" size="30"/>
<input type="button" value="set term" onClick="newGraph(document.getElementById('graphterm').value);">
</form>
</td>
<tr><td>&nbsp;</td></tr>
<script type="text/javascript">
// Get initial function term
var term = document.getElementById('graphterm').value;

// Recursion depth
var steps = 11;

// Start value for x
var x_0 = 3;

for (i = 0; i < steps; i++) {
document.write('<tr><td><nobr>x<sub>' + i + '</sub> = </nobr></td><td><font id="xv' + i + '"></font></td></tr>');
}
<</script>
</table>

var i;
var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5, 5, 5, -5], axis:true});
var ax = brd.defaultAxes.x;

var g = brd.create('functiongraph', [term], {strokeWidth: 2});
var x = brd.create('glider', [x_0, 0, ax], {name: 'x_{0}', color: 'magenta', size: 4});

newGraph(document.getElementById('graphterm').value);
newton(x, steps, brd);

function xval() {
for (i = 0; i < steps; i++) {
document.getElementById('xv' + i).innerHTML = (brd.select('x_{' + i + '}').X()).toFixed(14);
}
}

brd.on('update', xval);
// Initial call of xval()
xval();

function newton(p, i, board) {
board.suspendUpdate();
if (i > 0) {
var f = board.create('glider', [function(){ return p.X(); }, function(){ return g.Y(p.X()) }, g], {
name: '', style: 3, color: 'green'});
var l = board.create('segment', [p, f], {strokeWidth: 0.5, dash: 1, strokeColor: 'black'});
var t = board.create('tangent', [f], {strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0});
var x = board.create('intersection', [ax, t, 0],{name: 'x_{' + (steps - i + 1) + '}', style: 4, color: 'red'});
newton(x, --i, board);
}
board.unsuspendUpdate();
}

function newGraph(v) {
g.generateTerm('x', 'x', v);
//g.updateCurve();
brd.update();
}