学習環境
- 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
ラング線形代数学(上)(S.ラング (著)、芹沢 正三 (翻訳)、ちくま学芸文庫)の1章(R^nにおけるベクトル)、6(複素数)、練習問題7.を取り組んでみる。
コード(Emacs)
HTML5
<pre id="output0"></pre> θ = <input id="theta0" type="number" value="1.2"> θ_1 = <input id="theta1" type="number" value="2.3"> θ_2 = <input id="theta2" type="number" value="3.4"> <br> z = <input id="a0" type="number" value="5.6"> + <input id="b0" type="number" value="7.8">i <br> r_1 = <input id="r1" type="number" min="0" value="9.0"> r_2 = <input id="r2" type="number" min="0" value="1.2"> <br> n = <input id="n0" type="number" min="1" step="1" value="5"> <br> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample7.js"></script>
JavaScript
let pre0 = document.querySelector('#output0'), input_0 = document.querySelector('#theta0'), input_1 = document.querySelector('#theta1'), input_2 = document.querySelector('#theta2'), input_a = document.querySelector('#a0'), input_b = document.querySelector('#b0'), input_r1 = document.querySelector('#r1'), input_r2 = document.querySelector('#r2'), input_n = document.querySelector('#n0'), inputs = [input_0, input_1, input_2, input_a, input_b, input_r1, input_r2, input_n], btn0 = document.querySelector('#run0'), btn1 = document.querySelector('#clear0'), p = (x) => pre0.textContent += x + '\n', range = (start, end, step=1) => { let result = []; for (let i = start; i < end; i += step) { result.push(i); } return result; }; let Complex = (x, y) => { let that = {}, toString = () => `${x} + ${y}i`, real = () => x, imag = () => y, add = (z) => Complex(x + z.real(), y + z.imag()), mul = (z) => Complex(x * z.real() - y * z.imag(), x * z.imag() + y * z.real()), conjugate = () => Complex(x, -y), inv = () => { let den = Math.pow(x, 2) + Math.pow(y, 2); return Complex(x / den, -y / den); }, mag = () => Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), isEqual = (z) => x === z.real() && y === z.imag(); that.toString = toString; that.real = real; that.imag = imag; that.add = add; that.mul = mul; that.conjugate = conjugate; that.inv = inv; that.mag = mag; that.isEqual = isEqual; return that; }; let f = (theta) => Complex(Math.cos(theta), Math.sin(theta)); let output = () => { let theta = parseFloat(input_0.value), theta1 = parseFloat(input_1.value), theta2 = parseFloat(input_2.value); p('a.'); let left= f(theta1 + theta2), right = f(theta1).mul(f(theta2)); p(left.isEqual(right)); p(left); p(right); p('b.'); let a = parseFloat(input_a.value), b = parseFloat(input_b.value), r = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)), theta_b = Math.acos(a / r); p(`r = ${r}, θ = ${theta_b}`); left = Complex(a, b); right = Complex(r, 0).mul(f(theta_b)); p(left.isEqual(right)); p(left); p(right); p('c.'); let r1 = parseFloat(input_r1.value), r2 = parseFloat(input_r2.value), z1 = Complex(r1, 0).mul(f(theta1)), z2 = Complex(r2, 0).mul(f(theta2)); left = z1.mul(z2); right = Complex(r1 * r2, 0).mul(f(theta1 + theta2)); p(left.isEqual(right)); p(left); p(right); p('d.'); let z = Complex(a, b), n = parseInt(input_n.value, 10), w = Complex(Math.pow(z.mag(), 1 / n), 0).mul(f(Math.acos(a / z.mag()) / n)); let wn = w; for (let i = 2; i <= n; i += 1) { wn = wn.mul(w); } p(wn.isEqual(z)); p(wn); p(z); }; inputs.forEach((input) => input.onchange = output); btn0.onclick = output; btn1.onclick = () => pre0.textContent = ''; output();θ = θ_1 = θ_2 =
z = + i
r_1 = r_2 =
n =
0 コメント:
コメントを投稿