学習環境/開発環境
- Surface 3 (4G LTE)、Surface 3 タイプ カバー、Surface ペン(端末)
- Windows 10 Pro (OS)
- 数式入力ソフト(TeX, MathML): MathType
- MathML対応ブラウザ: Firefox、Safari
- MathML非対応ブラウザ(Internet Explorer, Google Chrome...)用JavaScript Library: MathJax
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- JavaScript Library
- Safari(Web browser)
- 参考書籍
- JavaScript 第6版 (David Flanagan(著)、村上 列(翻訳)、オライリージャパン)
- JavaScriptリファレンス 第6版(David Flanagan(著)、木下 哲也(翻訳)、オライリージャパン)
代数系入門 (松坂 和夫(著)、岩波書店)の第1章(整数)、2(数学的帰納法と除法の定理)、問題3.を取り組んでみる。
問題3.
JavaScript で確認。
HTML5
<label for="n0">n = </label>
<input id="n0" type="number" min="1" step="1" value="100">
<label for="x0">n = </label>
<input id="x0" type="number" value="10">
<div id="output0"></div>
<script src="array.js"></script>
<script src="number.js"></script>
<script src="sample3.js"></script>
JavaScript
コード(Emacs)
var input_n = document.querySelector('#n0'),
input_x = document.querySelector('#x0'),
inputs = [input_n, input_x],
div_output = document.querySelector('#output0'),
nl = '<br>',
accumulate,
sum,
mul,
funcs,
output;
accumulate = function (op, func, initial, a, b) {
return Array.range(a, b + 1)
.map(function (n) {
return func(n);
})
.reduce(function (x, y) {
return op(x, y);
}, initial);
};
sum = function (func, n) {
return accumulate(
function (x, y) {
return x + y;
}, func, 0, 1, n);
};
mul = function (func, n) {
return accumulate(
function (x, y) {
return x * y;
}, func, 1, 1, n);
};
funcs = [
[
function (n) {
return sum(function (n) {
return n;
}, n);
},
function (n) {
return n * (n + 1) / 2;
}
],
[
function (n) {
return sum(function (n) {
return Math.pow(n, 2);
}, n);
},
function (n) {
return n * (n + 1) * (2 * n + 1) / 6;
}
],
[
function (n) {
return sum(function (n) {
return Math.pow(n, 3);
}, n);
},
function (n) {
return Math.pow(n, 2) * Math.pow(n + 1, 2) / 4;
}
],
[
function (n) {
return sum(function (n) {
return n * (n + 1);
}, n);
},
function (n) {
return 1 / 3 * n * (n + 1) * (n + 2);
}
],
[
function (n) {
return sum(function (n) {
return 1 / (2 * n - 1) - 1 / (2 * n);
}, n);
},
function (n) {
return sum(function (i) {
return 1 / (i + n);
}, n);
}
],
[
function (n) {
return mul(function (n) {
return 2 * n;
}, n);
},
function (n) {
return Math.pow(2, n) * mul(function (n) {
return 2 * n - 1;
}, n);
}
],
[
function (n, x) {
return sum(function (n) {
return n * Math.pow(x, n -1);
}, n);
},
function (x, n) {
return (1 - Math.pow(x, n)) / Math.pow(1 - x, 2) -
n * Math.pow(x, n) / (1 - x);
}
]
];
output = function () {
var n = parseInt(input_n.value, 10),
x = parseFloat(input_x.value),
code = 'a'.charCodeAt(0);
div_output.innerHTML = '';
Array.range(7).map(
function (i) {
return String.fromCharCode(code + i);
})
.forEach(function (ch, i) {
var left = funcs[i][0](n, x),
right = funcs[i][1](n, x);
div_output.innerHTML +=
'(' + ch + ')' + nl +
' 左辺: ' + left + ', 右辺: ' + right + nl +
'左辺 = 右辺: ' + (left === right) + nl +
'|左辺 - 右辺| = ' + (left - right).abs() + nl + nl;
});
};
inputs.forEach(function (input) {
input.onchange = output;
});
output();
0 コメント:
コメントを投稿