Difference between revisions of "Newton's root finding method"
From JSXGraph Wiki
Jump to navigationJump to searchA WASSERMANN (talk | contribs) |
A WASSERMANN (talk | contribs) |
||
Line 1: | Line 1: | ||
<html> | <html> | ||
− | <table width=" | + | <table width="600" border="0" cellpadding="0" cellspacing="0"> |
x<sub>o</sub> is the start value. Drag it. | x<sub>o</sub> is the start value. Drag it. | ||
<p></p> | <p></p> | ||
Line 8: | Line 8: | ||
<td> | <td> | ||
<form> | <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 | + | <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> | </form> | ||
</td> | </td> | ||
Line 70: | Line 70: | ||
===The underlying JavaScript code=== | ===The underlying JavaScript code=== | ||
+ | <source lang="xml"> | ||
+ | <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> </td></tr> | ||
+ | <script type="text/javascript"> | ||
+ | // Initial function term | ||
+ | var term = function(x) { return x*x*x/5; }; | ||
+ | var graph = function(x) { return term(x); }; | ||
+ | |||
+ | // Recursion depth | ||
+ | var steps = 11; | ||
+ | // Start value | ||
+ | var s = 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> | ||
+ | <jsxgraph width="600" height="500"> | ||
+ | </source> | ||
+ | <source lang="javascript"> | ||
+ | var i; | ||
+ | var board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,10,5,-2], axis:true}); | ||
+ | var ax = board.create('axis', [[0,0], [1,0]], {strokeColor: 'black'}); | ||
+ | var ay = board.create('axis', [[0,0], [0,1]], {strokeColor: 'black'}); | ||
+ | |||
+ | var g = board.create('functiongraph', [function(x){return graph(x);}],{strokeWidth: 2, dash:0}); | ||
+ | var x = board.create('glider',[s,0,ax], {name: 'x_{0}', strokeColor: 'magenta', fillColor: 'yellow'}); | ||
+ | |||
+ | newGraph(document.getElementById('graphterm').value); | ||
+ | newton(x,steps); | ||
+ | function xval(board) { | ||
+ | for (i = 0; i < steps; i++) | ||
+ | document.getElementById('xv' + i).innerHTML = board.round(JXG.getReference(board, 'x_{' + i + '}').X(),14); | ||
+ | } | ||
+ | |||
+ | board.addHook(xval); | ||
+ | |||
+ | function newton(p, i) { | ||
+ | if(i>0) { | ||
+ | var f = board.create('glider',[function(){return p.X();}, function(){return graph(p.X())},g], {name: '', style: 3, strokeColor: 'green', fillColor: 'yellow'}); | ||
+ | var l = board.create('line', [p,f],{strokeWidth: 0.5, dash: 1, straightFirst: false, straightLast: false, strokeColor: 'black'}); | ||
+ | var t = board.create('tangent',[f],{strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0}); | ||
+ | var x = board.create('point',[board.intersection(ax,t,0)],{name: 'x_{'+(steps-i+1) + '}', style: 4, strokeColor: 'magenta', fillColor: 'yellow'}); | ||
+ | newton(x,--i); | ||
+ | } | ||
+ | } | ||
+ | function newGraph(v) { | ||
+ | eval("term = function(x){ return "+v+";}"); | ||
+ | graph = function(x) { return term(x); }; | ||
+ | g.Y = function(x){ return term(x); }; | ||
+ | g.updateCurve(); | ||
+ | board.update(); | ||
+ | } | ||
+ | </source> | ||
+ | <source lang="xml"> | ||
+ | </jsxgraph> | ||
+ | </source> | ||
+ | |||
+ | |||
+ | [[Category:Examples]] | ||
+ | [[Category:Calculus]] |
Revision as of 16:22, 3 February 2010
xo is the start value. Drag it. You may change the function term here:
You also may try the following function terms:
- [math]Math.sin(x)[/math]
- [math]Math.exp(x)[/math]
- [math]Math.pow(2,x)[/math]
- [math]1-2/(x*x)[/math]
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> </td></tr>
<script type="text/javascript">
// Initial function term
var term = function(x) { return x*x*x/5; };
var graph = function(x) { return term(x); };
// Recursion depth
var steps = 11;
// Start value
var s = 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>
<jsxgraph width="600" height="500">
var i;
var board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,10,5,-2], axis:true});
var ax = board.create('axis', [[0,0], [1,0]], {strokeColor: 'black'});
var ay = board.create('axis', [[0,0], [0,1]], {strokeColor: 'black'});
var g = board.create('functiongraph', [function(x){return graph(x);}],{strokeWidth: 2, dash:0});
var x = board.create('glider',[s,0,ax], {name: 'x_{0}', strokeColor: 'magenta', fillColor: 'yellow'});
newGraph(document.getElementById('graphterm').value);
newton(x,steps);
function xval(board) {
for (i = 0; i < steps; i++)
document.getElementById('xv' + i).innerHTML = board.round(JXG.getReference(board, 'x_{' + i + '}').X(),14);
}
board.addHook(xval);
function newton(p, i) {
if(i>0) {
var f = board.create('glider',[function(){return p.X();}, function(){return graph(p.X())},g], {name: '', style: 3, strokeColor: 'green', fillColor: 'yellow'});
var l = board.create('line', [p,f],{strokeWidth: 0.5, dash: 1, straightFirst: false, straightLast: false, strokeColor: 'black'});
var t = board.create('tangent',[f],{strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0});
var x = board.create('point',[board.intersection(ax,t,0)],{name: 'x_{'+(steps-i+1) + '}', style: 4, strokeColor: 'magenta', fillColor: 'yellow'});
newton(x,--i);
}
}
function newGraph(v) {
eval("term = function(x){ return "+v+";}");
graph = function(x) { return term(x); };
g.Y = function(x){ return term(x); };
g.updateCurve();
board.update();
}
</jsxgraph>