Difference between revisions of "Newton's root finding method"
From JSXGraph Wiki
Jump to navigationJump to searchA WASSERMANN (talk | contribs) |
A WASSERMANN (talk | contribs) |
||
(23 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
Try also the following function terms: | Try also the following function terms: | ||
<ul> | <ul> | ||
− | <li> < | + | <li> <code>sin(x)</code> |
− | <li> < | + | <li> <code>exp(x)</code> |
− | <li> < | + | <li> <code>2^x</code> |
− | <li> < | + | <li> <code>1-2/(x*x)</code> |
</ul> | </ul> | ||
<br> | <br> | ||
Line 16: | Line 16: | ||
<form> | <form> | ||
<input style="border:none; background-color:#efefef;padding:5px;margin-left:2px;" type="text" id="graphterm" value="(x-2)*(x+1)*x*0.2" size="30"/> | <input style="border:none; background-color:#efefef;padding:5px;margin-left:2px;" type="text" id="graphterm" value="(x-2)*(x+1)*x*0.2" size="30"/> | ||
− | <input type="button" value="set term" onClick="newGraph(document.getElementById('graphterm').value);"> | + | <input type="button" value="set function term" onClick="newGraph(document.getElementById('graphterm').value);"> |
</form> | </form> | ||
</td> | </td> | ||
<tr><td> </td></tr> | <tr><td> </td></tr> | ||
+ | |||
<script type="text/javascript"> | <script type="text/javascript"> | ||
− | // | + | // Get initial function term |
− | var term = | + | var term = document.getElementById('graphterm').value; |
− | + | ||
− | |||
// Recursion depth | // Recursion depth | ||
var steps = 11; | var steps = 11; | ||
− | // Start value | + | |
− | var | + | // Start value for x |
+ | var x_0 = 3; | ||
for (i = 0; i < steps; i++) { | for (i = 0; i < steps; i++) { | ||
Line 38: | Line 39: | ||
<jsxgraph width="600" height="500"> | <jsxgraph width="600" height="500"> | ||
var i; | var i; | ||
− | var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,5,5,-5], axis: | + | var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5, 5, 5, -5], axis:true}); |
− | var ax = brd. | + | var ax = brd.defaultAxes.x; |
− | |||
− | var g = brd.create('functiongraph', [ | + | var g = brd.create('functiongraph', [term], {strokeWidth: 2}); |
− | var x = brd.create('glider',[ | + | var x = brd.create('glider', [x_0, 0, ax], {name: 'x_{0}', color: 'magenta', size: 4}); |
newGraph(document.getElementById('graphterm').value); | newGraph(document.getElementById('graphterm').value); | ||
Line 49: | Line 49: | ||
function xval() { | function xval() { | ||
− | + | for (i = 0; i < steps; i++) { | |
− | for (i = 0; i < steps; i++) | + | document.getElementById('xv' + i).innerHTML = (brd.select('x_{' + i + '}').X()).toFixed(14); |
− | document.getElementById('xv' + i).innerHTML = brd. | + | } |
} | } | ||
− | brd. | + | brd.on('update', xval); |
+ | // Initial call of xval() | ||
+ | xval(); | ||
function newton(p, i, board) { | function newton(p, i, board) { | ||
board.suspendUpdate(); | board.suspendUpdate(); | ||
− | if(i>0) { | + | if (i > 0) { |
− | var f = board.create('glider',[function(){return p.X();}, function(){return | + | var f = board.create('glider', [function(){ return p.X(); }, function(){ return g.Y(p.X()) }, g], { |
− | var l = board.create(' | + | name: '', style: 3, color: 'green'}); |
− | var t = board.create('tangent',[f],{strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0}); | + | var l = board.create('segment', [p, f], {strokeWidth: 0.5, dash: 1, strokeColor: 'black'}); |
− | var x = board.create(' | + | var t = board.create('tangent', [f], {strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0}); |
− | newton(x,--i, board); | + | var x = board.create('intersection', [ax, t, 0],{name: 'x_{' + (steps - i + 1) + '}', style: 4, color: 'red'}); |
+ | newton(x, --i, board); | ||
} | } | ||
board.unsuspendUpdate(); | board.unsuspendUpdate(); | ||
− | } | + | } |
+ | |||
function newGraph(v) { | function newGraph(v) { | ||
− | + | g.generateTerm('x', 'x', v); | |
− | + | //g.updateCurve(); | |
− | + | brd.update(); | |
− | |||
− | |||
} | } | ||
</jsxgraph> | </jsxgraph> | ||
===The underlying JavaScript code=== | ===The underlying JavaScript code=== | ||
+ | |||
<source lang="xml"> | <source lang="xml"> | ||
<table width="600" border="0" cellpadding="0" cellspacing="0"> | <table width="600" border="0" cellpadding="0" cellspacing="0"> | ||
Line 92: | Line 95: | ||
<tr><td> </td></tr> | <tr><td> </td></tr> | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
− | // | + | // Get initial function term |
− | var term = | + | var term = document.getElementById('graphterm').value; |
− | + | ||
− | |||
// Recursion depth | // Recursion depth | ||
var steps = 11; | var steps = 11; | ||
− | // Start value | + | |
− | var | + | // Start value for x |
+ | var x_0 = 3; | ||
for (i = 0; i < steps; i++) { | 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>'); | document.write('<tr><td><nobr>x<sub>' + i + '</sub> = </nobr></td><td><font id="xv' + i + '"></font></td></tr>'); | ||
} | } | ||
− | </script> | + | <</script> |
</table> | </table> | ||
</source> | </source> | ||
Line 110: | Line 113: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
var i; | var i; | ||
− | var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,5,5,-5], axis: | + | var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5, 5, 5, -5], axis:true}); |
− | var ax = brd. | + | var ax = brd.defaultAxes.x; |
− | |||
− | var g = brd.create('functiongraph', [ | + | var g = brd.create('functiongraph', [term], {strokeWidth: 2}); |
− | var x = brd.create('glider',[ | + | var x = brd.create('glider', [x_0, 0, ax], {name: 'x_{0}', color: 'magenta', size: 4}); |
newGraph(document.getElementById('graphterm').value); | newGraph(document.getElementById('graphterm').value); | ||
Line 121: | Line 123: | ||
function xval() { | function xval() { | ||
− | for (i = 0; i < steps; i++) | + | for (i = 0; i < steps; i++) { |
− | document.getElementById('xv' + i).innerHTML = brd. | + | document.getElementById('xv' + i).innerHTML = (brd.select('x_{' + i + '}').X()).toFixed(14); |
+ | } | ||
} | } | ||
− | brd. | + | brd.on('update', xval); |
+ | // Initial call of xval() | ||
+ | xval(); | ||
function newton(p, i, board) { | function newton(p, i, board) { | ||
board.suspendUpdate(); | board.suspendUpdate(); | ||
− | if(i>0) { | + | if (i > 0) { |
− | var f = board.create('glider',[function(){return p.X();}, function(){return | + | var f = board.create('glider', [function(){ return p.X(); }, function(){ return g.Y(p.X()) }, g], { |
− | var l = board.create(' | + | name: '', style: 3, color: 'green'}); |
− | var t = board.create('tangent',[f],{strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0}); | + | var l = board.create('segment', [p, f], {strokeWidth: 0.5, dash: 1, strokeColor: 'black'}); |
− | var x = board.create(' | + | var t = board.create('tangent', [f], {strokeWidth: 0.5, strokeColor: '#0080c0', dash: 0}); |
− | newton(x,--i, board); | + | var x = board.create('intersection', [ax, t, 0],{name: 'x_{' + (steps - i + 1) + '}', style: 4, color: 'red'}); |
+ | newton(x, --i, board); | ||
} | } | ||
board.unsuspendUpdate(); | board.unsuspendUpdate(); | ||
− | } | + | } |
+ | |||
function newGraph(v) { | function newGraph(v) { | ||
− | + | g.generateTerm('x', 'x', v); | |
− | + | //g.updateCurve(); | |
− | + | brd.update(); | |
− | |||
− | |||
} | } | ||
</source> | </source> |
Latest revision as of 15:54, 15 January 2021
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)
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">
// 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();
}