Inverse Composition Rules: Difference between revisions
From JSXGraph Wiki
A WASSERMANN (talk | contribs) No edit summary  | 
				No edit summary  | 
				||
| (24 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
<html>  | <html>  | ||
<form name="input">  | <form name="input">  | ||
<table>  | <table style="padding:5px; margin:2px">  | ||
  <tr>  |   <tr style="color:blue">  | ||
    <th>f(x)</th>  |     <th>f(x)</th>  | ||
    <td>sin(x)</td>  |     <td>sin(x)</td>  | ||
| Line 13: | Line 13: | ||
  <tr>  |   <tr>  | ||
    <td> </td>  |     <td> </td>  | ||
    <td><input type="radio" name="f" value="sin" checked onChange="change(  |     <td><input type="radio" name="f" value="sin" checked onChange="change(this)"></td>  | ||
    <td><input type="radio" name="f" value="cos"         onChange="change(  |     <td><input type="radio" name="f" value="cos"         onChange="change(this)"></td>  | ||
    <td><input type="radio" name="f" value="tan"         onChange="change(  |     <td><input type="radio" name="f" value="tan"         onChange="change(this)"></td>  | ||
    <td><input type="radio" name="f" value="square"      onChange="change(  |     <td><input type="radio" name="f" value="square"      onChange="change(this)"></td>  | ||
    <td><input type="radio" name="f" value="sinh"        onChange="change(  |     <td><input type="radio" name="f" value="sinh"        onChange="change(this)"></td>  | ||
    <td><input type="radio" name="f" value="exp"         onChange="change(  |     <td><input type="radio" name="f" value="exp"         onChange="change(this)"></td>  | ||
  </tr>  |   </tr>  | ||
  <tr>  |   <tr style="color:green">  | ||
    <th>g(x)</th>  |     <th>g(x)</th>  | ||
    <td>arcsin(x)</td>  |     <td>arcsin(x)</td>  | ||
| Line 31: | Line 31: | ||
  <tr>  |   <tr>  | ||
    <td> </td>  |     <td> </td>  | ||
    <td><input type="radio" name="g" value="asin" checked onChange="change(  |     <td><input type="radio" name="g" value="asin" checked onChange="change(this)"></td>  | ||
    <td><input type="radio" name="g" value="acos"         onChange="change(  |     <td><input type="radio" name="g" value="acos"         onChange="change(this)"></td>  | ||
    <td><input type="radio" name="g" value="atan"         onChange="change(  |     <td><input type="radio" name="g" value="atan"         onChange="change(this)"></td>  | ||
    <td><input type="radio" name="g" value="sqrt"         onChange="change(  |     <td><input type="radio" name="g" value="sqrt"         onChange="change(this)"></td>  | ||
    <td><input type="radio" name="g" value="asinh"        onChange="change(  |     <td><input type="radio" name="g" value="asinh"        onChange="change(this)"></td>  | ||
    <td><input type="radio" name="g" value="log"          onChange="change(g  |     <td><input type="radio" name="g" value="log"          onChange="change(this)"></td>  | ||
 </tr>  | |||
 <tr style="color:red">  | |||
   <th>Composition</th>  | |||
   <td>f(g(x))</td>  | |||
   <td>g(f(x))</td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
 </tr>  | |||
 <tr>  | |||
   <td> </td>  | |||
   <td><input type="radio" name="fg" value="fg" checked onChange="comp(this)"></td>  | |||
   <td><input type="radio" name="fg" value="gf"         onChange="comp(this)"></td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
  </tr>  |   </tr>  | ||
</table>  | </table>  | ||
| Line 42: | Line 60: | ||
</html>  | </html>  | ||
<jsxgraph width="600" height="600" box="box">  | <jsxgraph width="600" height="600" box="box">  | ||
var brd = JXG.JSXGraph.initBoard('box', {axis:true,   | var brd = JXG.JSXGraph.initBoard('box', {axis:true, boundingbox: [-3, 3, 3, -3]});  | ||
var f, g;  | var f, g, fg;  | ||
var change = function(  | var change = function(obj) {  | ||
  var t = obj.value;    |   var t = obj.value;    | ||
  if (t=='sin') {   |   if (t=='sin')           { f = function(x) { return Math.sin(x); }    | ||
  else if (t=='cos') {   |   } else if (t=='cos')    { f = function(x) { return Math.cos(x); }  | ||
  else if (t=='tan') {   |   } else if (t=='tan')    { f = function(x) { return Math.tan(x); }  | ||
  else if (t=='square') {   |   } else if (t=='square') { f = function(x) { return x*x; }  | ||
  else if (t=='sinh') {   |   } else if (t=='sinh')   { f = function(x) { return brd.sinh(x); }  | ||
  else if (t=='exp') {   |   } else if (t=='exp')    { f = function(x) { return Math.exp(x); }  | ||
  else if (t=='asin') {   |   } else if (t=='asin')   { g = function(x) { return Math.asin(x); }  | ||
  else if (t=='acos') {   |   } else if (t=='acos')   { g = function(x) { return Math.acos(x); }  | ||
  else if (t=='atan') {   |   } else if (t=='atan')   { g = function(x) { return Math.atan(x); }  | ||
  else if (t=='sqrt') {   |   } else if (t=='sqrt')   { g = function(x) { return Math.sqrt(x); }  | ||
  else if (t=='asinh') {   |   } else if (t=='asinh')  { g = function(x) { return Math.log(x+Math.sqrt(1+x*x)); }  | ||
  else if (t=='log') {   |   } else if (t=='log')    { g = function(x) { return Math.log(x); }  | ||
 }  | |||
 plotf.Y = f; plotf.updateCurve();  | |||
 plotg.Y = g; plotg.updateCurve();  | |||
 brd.update();  | |||
}  | |||
var comp = function(obj) {  | |||
 var t = obj.value;   | |||
 if (t=='fg')           { fg = function(x) { return f(g(x)); }   | |||
 } else if (t=='gf')    { fg = function(x) { return g(f(x)); }  | |||
 }  | |||
 plotfg.Y = fg; plotfg.updateCurve();  | |||
 brd.update();  | |||
}  | }  | ||
f = function(x) { return Math.sin(x); }  | |||
g = function(x) { return Math.asin(x); }  | |||
fg = function(x) { return Math.sin(Math.asin(x)); }  | |||
plotf = brd.create('functiongraph',[f,-2,2],{dash:2, strokeColor:'blue',strokeWidth:3});  | |||
plotg = brd.create('functiongraph',[g,-2,2],{dash:3, strokeColor:'green',strokeWidth:3});  | |||
plotfg = brd.create('functiongraph',[fg,-2,2],{strokeColor:'red',strokeWidth:3});  | |||
</jsxgraph>  | </jsxgraph>  | ||
===  | ==Code==  | ||
=== HTML ===  | |||
<source lang="xml">  | <source lang="xml">  | ||
<form name="input">  | |||
<table style="background-color:background; padding:5px; margin:2px">  | |||
 <tr style="color:blue">  | |||
   <th>f(x)</th>  | |||
   <td>sin(x)</td>  | |||
   <td>cos(x)</td>  | |||
   <td>tan(x)</td>  | |||
   <td>x<sup>2</sup></td>  | |||
   <td>sinh(x)</td>  | |||
   <td>exp(x)</td>  | |||
 </tr>  | |||
 <tr>  | |||
   <td> </td>  | |||
   <td><input type="radio" name="f" value="sin" checked onChange="change(this)"></td>  | |||
   <td><input type="radio" name="f" value="cos"         onChange="change(this)"></td>  | |||
   <td><input type="radio" name="f" value="tan"         onChange="change(this)"></td>  | |||
   <td><input type="radio" name="f" value="square"      onChange="change(this)"></td>  | |||
   <td><input type="radio" name="f" value="sinh"        onChange="change(this)"></td>  | |||
   <td><input type="radio" name="f" value="exp"         onChange="change(this)"></td>  | |||
 </tr>  | |||
 <tr style="color:green">  | |||
   <th>g(x)</th>  | |||
   <td>arcsin(x)</td>  | |||
   <td>arccos(x)</td>  | |||
   <td>arctan(x)</td>  | |||
   <td>√(x)</td>  | |||
   <td>arcsinh(x)</td>  | |||
   <td>log(x)</td>  | |||
 </tr>  | |||
 <tr>  | |||
   <td> </td>  | |||
   <td><input type="radio" name="g" value="asin" checked onChange="change(this)"></td>  | |||
   <td><input type="radio" name="g" value="acos"         onChange="change(this)"></td>  | |||
   <td><input type="radio" name="g" value="atan"         onChange="change(this)"></td>  | |||
   <td><input type="radio" name="g" value="sqrt"         onChange="change(this)"></td>  | |||
   <td><input type="radio" name="g" value="asinh"        onChange="change(this)"></td>  | |||
   <td><input type="radio" name="g" value="log"          onChange="change(this)"></td>  | |||
 </tr>  | |||
 <tr style="color:red">  | |||
   <th>Composition</th>  | |||
   <td>f(g(x))</td>  | |||
   <td>g(f(x))</td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
 </tr>  | |||
 <tr>  | |||
   <td> </td>  | |||
   <td><input type="radio" name="fg" value="fg" checked onChange="comp(this)"></td>  | |||
   <td><input type="radio" name="fg" value="gf"         onChange="comp(this)"></td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
   <td> </td>  | |||
 </tr>  | |||
</table>  | |||
</form>  | |||
</source>  | |||
=== JavaScript ===  | |||
<source lang="javascript">  | |||
var brd = JXG.JSXGraph.initBoard('box', {axis:true, boundingbox: [-3, 3, 3, -3]});  | |||
var f, g, fg;  | |||
var change = function(obj) {  | |||
 var t = obj.value;   | |||
 if (t=='sin')           { f = function(x) { return Math.sin(x); }   | |||
 } else if (t=='cos')    { f = function(x) { return Math.cos(x); }  | |||
 } else if (t=='tan')    { f = function(x) { return Math.tan(x); }  | |||
 } else if (t=='square') { f = function(x) { return x*x; }  | |||
 } else if (t=='sinh')   { f = function(x) { return brd.sinh(x); }  | |||
 } else if (t=='exp')    { f = function(x) { return Math.exp(x); }  | |||
 } else if (t=='asin')   { g = function(x) { return Math.asin(x); }  | |||
 } else if (t=='acos')   { g = function(x) { return Math.acos(x); }  | |||
 } else if (t=='atan')   { g = function(x) { return Math.atan(x); }  | |||
 } else if (t=='sqrt')   { g = function(x) { return Math.sqrt(x); }  | |||
 } else if (t=='asinh')  { g = function(x) { return Math.log(x+Math.sqrt(1+x*x)); }  | |||
 } else if (t=='log')    { g = function(x) { return Math.log(x); }  | |||
 }  | |||
 plotf.Y = f; plotf.updateCurve();  | |||
 plotg.Y = g; plotg.updateCurve();  | |||
 brd.update();  | |||
}  | |||
var comp = function(obj) {  | |||
 var t = obj.value;   | |||
 if (t=='fg')           { fg = function(x) { return f(g(x)); }   | |||
 } else if (t=='gf')    { fg = function(x) { return g(f(x)); }  | |||
 }  | |||
 plotfg.Y = fg; plotfg.updateCurve();  | |||
 brd.update();  | |||
}  | |||
f = function(x) { return Math.sin(x); }  | |||
g = function(x) { return Math.asin(x); }  | |||
fg = function(x) { return Math.sin(Math.asin(x)); }  | |||
plotf = brd.create('functiongraph',[f,-2,2],{dash:2, strokeColor:'blue',strokeWidth:3});  | |||
plotg = brd.create('functiongraph',[g,-2,2],{dash:3, strokeColor:'green',strokeWidth:3});  | |||
plotfg = brd.create('functiongraph',[fg,-2,2],{strokeColor:'red',strokeWidth:3});  | |||
</source>  | </source>  | ||
[[Category:Examples]]  | [[Category:Examples]]  | ||
[[Category:Calculus]]  | [[Category:Calculus]]  | ||
Latest revision as of 07:54, 8 June 2011
Code
HTML
<form name="input">
<table style="background-color:background; padding:5px; margin:2px">
 <tr style="color:blue">
   <th>f(x)</th>
   <td>sin(x)</td>
   <td>cos(x)</td>
   <td>tan(x)</td>
   <td>x<sup>2</sup></td>
   <td>sinh(x)</td>
   <td>exp(x)</td>
 </tr>
 <tr>
   <td> </td>
   <td><input type="radio" name="f" value="sin" checked onChange="change(this)"></td>
   <td><input type="radio" name="f" value="cos"         onChange="change(this)"></td>
   <td><input type="radio" name="f" value="tan"         onChange="change(this)"></td>
   <td><input type="radio" name="f" value="square"      onChange="change(this)"></td>
   <td><input type="radio" name="f" value="sinh"        onChange="change(this)"></td>
   <td><input type="radio" name="f" value="exp"         onChange="change(this)"></td>
 </tr>
 <tr style="color:green">
   <th>g(x)</th>
   <td>arcsin(x)</td>
   <td>arccos(x)</td>
   <td>arctan(x)</td>
   <td>√(x)</td>
   <td>arcsinh(x)</td>
   <td>log(x)</td>
 </tr>
 <tr>
   <td> </td>
   <td><input type="radio" name="g" value="asin" checked onChange="change(this)"></td>
   <td><input type="radio" name="g" value="acos"         onChange="change(this)"></td>
   <td><input type="radio" name="g" value="atan"         onChange="change(this)"></td>
   <td><input type="radio" name="g" value="sqrt"         onChange="change(this)"></td>
   <td><input type="radio" name="g" value="asinh"        onChange="change(this)"></td>
   <td><input type="radio" name="g" value="log"          onChange="change(this)"></td>
 </tr>
 <tr style="color:red">
   <th>Composition</th>
   <td>f(g(x))</td>
   <td>g(f(x))</td>
   <td> </td>
   <td> </td>
   <td> </td>
   <td> </td>
 </tr>
 <tr>
   <td> </td>
   <td><input type="radio" name="fg" value="fg" checked onChange="comp(this)"></td>
   <td><input type="radio" name="fg" value="gf"         onChange="comp(this)"></td>
   <td> </td>
   <td> </td>
   <td> </td>
   <td> </td>
 </tr>
</table>
</form>
JavaScript
var brd = JXG.JSXGraph.initBoard('box', {axis:true, boundingbox: [-3, 3, 3, -3]});
var f, g, fg;
var change = function(obj) {
 var t = obj.value; 
 if (t=='sin')           { f = function(x) { return Math.sin(x); } 
 } else if (t=='cos')    { f = function(x) { return Math.cos(x); }
 } else if (t=='tan')    { f = function(x) { return Math.tan(x); }
 } else if (t=='square') { f = function(x) { return x*x; }
 } else if (t=='sinh')   { f = function(x) { return brd.sinh(x); }
 } else if (t=='exp')    { f = function(x) { return Math.exp(x); }
 } else if (t=='asin')   { g = function(x) { return Math.asin(x); }
 } else if (t=='acos')   { g = function(x) { return Math.acos(x); }
 } else if (t=='atan')   { g = function(x) { return Math.atan(x); }
 } else if (t=='sqrt')   { g = function(x) { return Math.sqrt(x); }
 } else if (t=='asinh')  { g = function(x) { return Math.log(x+Math.sqrt(1+x*x)); }
 } else if (t=='log')    { g = function(x) { return Math.log(x); }
 }
 plotf.Y = f; plotf.updateCurve();
 plotg.Y = g; plotg.updateCurve();
 brd.update();
}
var comp = function(obj) {
 var t = obj.value; 
 if (t=='fg')           { fg = function(x) { return f(g(x)); } 
 } else if (t=='gf')    { fg = function(x) { return g(f(x)); }
 }
 plotfg.Y = fg; plotfg.updateCurve();
 brd.update();
}
f = function(x) { return Math.sin(x); }
g = function(x) { return Math.asin(x); }
fg = function(x) { return Math.sin(Math.asin(x)); }
plotf = brd.create('functiongraph',[f,-2,2],{dash:2, strokeColor:'blue',strokeWidth:3});
plotg = brd.create('functiongraph',[g,-2,2],{dash:3, strokeColor:'green',strokeWidth:3});
plotfg = brd.create('functiongraph',[fg,-2,2],{strokeColor:'red',strokeWidth:3});