Processing math: 100%

2017年4月23日日曜日

学習環境

ラング線形代数学(上)(S.ラング (著)、芹沢 正三 (翻訳)、ちくま学芸文庫)の1章(R^nにおけるベクトル)、6(複素数)、練習問題1、2、3.を取り組んでみる。


  1. α=a+biβ=c+di¯αβ=¯acbd+(ad+bc)i=acbd(ad+bc)iˉαˉβ=(abi)(cdi)=acbd(ad+bc)i¯αβ=ˉαˉβ¯α+β=¯a+c+(b+d)i=a+c(b+d)iˉαˉβ=(abi)+(cdi)=a+c(b+d)i

  2. α=a+biβ=c+di|αβ|=|acbd+(ad+bc)i|=(acbd)2+(ad+bc)2=a2c2+a2d2+b2c2+b2d2|α||β|=a2+b2c2+d2=a2c2+a2d2+b2c2+b2d2

    1. αk=ak+bkiβk=ck+dkiB,A=nk=1(ak+bki)¯(ck+dki)=nk=1(ak+bki)(ckdki)=nk=1(akck+bkdk+(bkckakdk)i)¯B,A=¯nk=1(ck+dki)¯(ak+bki)=nk=1¯(ck+dki)¯(akbki)=nk=1(ckdki)(ak+bki)=nk=1(akck+bkdk+(bkckakdk)i)

    2. γk=ek+fkiA,B+C=nk=1(ak+bki)¯((ck+ek)+(dk+fk)i)=nk=1(ak+bki)((ck+ek)(dk+fk)i)=nk=1(akck+akek+bkdk+bkfk+(bkck+bkekakdkakfk)i)A,B+A,C=nk=1((ak+bki)(ckdki)+(ak+bki)(ekfki))=nk=1((ak+bki)(ckdki)+(ak+bki)(ekfki))=nk=1(akck+akek+bkdk+bkfk+(bkck+bkekakdkakfk)i)A,B+C=A,B+A,C

    3. αA,B=nk=1((a+bi)(ak+bki)(ckdki))=(a+bi)nk=1(ak+bki)(ckdki)=αA,BA,αβ=nk=1((ak+bki)(abi)(ckdki))=(abi)nk=1(ak+bki)(ckdki)=ˉαA,β

    4. A,A=nk=1αk¯αk=nk=1|ak|2O,O=0AOA,A0

コード(Emacs)

HTML5

<pre id="output0"></pre>
<button id="run0">run</button>
<button id="clear0">clear</button>

<script src="sample4.js"></script>

JavaScript

let pre0 = document.querySelector('#output0'),
    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 innerProd = (A, B) => {
    return A.reduce((prev, next, i) => prev.add(next.mul(B[i].conjugate())),
                    Complex(0, 0));
};
let output = () => {
    let a = Complex(Math.floor(Math.random() * 100),
                    Math.floor(Math.random() * 100)),
        b = Complex(Math.floor(Math.random() * 100),
                    Math.floor(Math.random() * 100)),
        c = Complex(Math.floor(Math.random() * 100),
                    Math.floor(Math.random() * 100));
    p('4.');
    let l = a.mul(b).conjugate(),
        r = a.conjugate().mul(b.conjugate());

    p(l.isEqual(r));
    p(l);
    p(r);

    l = a.add(b).conjugate();
    r = a.conjugate().add(b.conjugate());
    p(l.isEqual(r));
    p(l);
    p(r);

    p('5.');
    l = a.mul(b).mag();
    r = a.mag() * b.mag();
    p(l === r);
    p(l);
    p(r);

    p('6.');
    let A = [],
        B = [],
        C = [],
        O = [],
        n = Math.floor(Math.random() * 100);

    for (let k = 0; k < n; k += 1) {
        A.push(Complex(Math.floor(Math.random() * 100),
                       Math.floor(Math.random() * 100)));
        B.push(Complex(Math.floor(Math.random() * 100),
                       Math.floor(Math.random() * 100)));
        C.push(Complex(Math.floor(Math.random() * 100),
                       Math.floor(Math.random() * 100)));
        O.push(Complex(0, 0));
    }
    p('6.');
    p('SP1');
    l = innerProd(A, B);
    r = innerProd(B, A).conjugate();
    p(l.isEqual(r));
    p(l);
    p(r);
    p('SP2');
    l = innerProd(A, B.map((z, i) => z.add(C[i])));
    r = innerProd(A, B).add(innerProd(A, C));
    p(l.isEqual(r));
    p(l);
    p(r);
    p('SP3');
    l = innerProd(A.map((z) => a.mul(z)), B);
    r = a.mul(innerProd(A, B));
    p(l.isEqual(r));
    p(l);
    p(r);
    l = innerProd(A, B.map((z) => a.mul(z)));
    r = a.conjugate().mul(innerProd(A, B));
    p(l.isEqual(r));
    p(l);
    p(r);
    p('SP4');
    p(innerProd(O, O));
    p(innerProd(A, A));
};

btn0.onclick = output;
btn1.onclick = () => pre0.textContent = '';

output();
4.
true
455 + -3575i
455 + -3575i
true
74 + -101i
74 + -101i
5.
false
3603.838231663569
3603.8382316635693
6.
6.
SP1
true
124226 + 5967i
124226 + 5967i
SP2
true
258059 + 33951i
258059 + 33951i
SP3
true
4288240 + 1451105i
4288240 + 1451105i
true
4407580 + -1033415i
4407580 + -1033415i
SP4
0 + 0i
168583 + 0i

0 コメント:

コメントを投稿