Loading [MathJax]/jax/output/HTML-CSS/jax.js

2016年12月1日木曜日

学習環境

解析入門〈1〉(松坂 和夫(著)、岩波書店)の第2章(数列と級数)、2.2(数列の収束条件)、問題2.2、3.を取り組んでみる。

問3


  1. anan+1=an12(an+αan)=12(anαan)=12(an2αan)an2>αa2n+1α=(12(an+αan))2α=(an2+α)24an2α=(a2n+α)24αan24an2=an4+2αan2+α24αan24an2=an42αan2+α24an2=(an2α)24an2>0an+12>αanan+1>0an>an+1an>0(an)調β=12(β+αβ)2β=β+αββ2=αβ=αlimnan=α

  2. εn+1=an+1α=12(an+αan)α=an2+α2anα2an=(anα)22an=εn22an<εn2·2α=εn2βεn+1<εn2βεn+1β<εn2β2=(εnβ)2<(εn1β)2·21<···<(ε1β)2·2n1=(εβ)2nεn+1β<(εβ)2n

HTML5

<div id="graph0"></div>
<div id="output0"></div>
<label for="alpha0">α = </label>
<input id="alpha0" type="number" min="2" value="2">
<label for="a1">a1 = </label>
<input id="a1" type="number" min="2" value="2">
<label for="n0">n = </label>
<input id="n0" type="number" min="1" step="1" value="10">


<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.6/d3.min.js" integrity="sha256-5idA201uSwHAROtCops7codXJ0vja+6wbBrZdQ6ETQc=" crossorigin="anonymous"></script>
<script src="sample3.js"></script>

JavaScript

{
    let div_graph = document.querySelector('#graph0'),
        div_output = document.querySelector('#output0'),
        input_alpha = document.querySelector('#alpha0'),
        input_a = document.querySelector('#a1'),
        input_n = document.querySelector('#n0'),
        inputs = [input_alpha, input_a, input_n],
        width = 600,
        height = 600,
        padding = 50;

    let f = (alpha, prev) => {
        return 1 / 2 * (prev + alpha / prev);
    };
    let getPoints = (alpha, a1, n) => {
        let prev = a1,
            result = [[1, prev]];

        for (let i = 2; i <= n; i += 1) {
            let next = f(alpha, prev);
            result.push([i, next]);
            prev = next;
        }
        return result;
    }
    let plot = () => {
        let alpha = parseFloat(input_alpha.value),
            a1 = parseFloat(input_a.value);

        if (a1 > Math.sqrt(alpha)) {
            let n = parseInt(input_n.value, 10),
                points = getPoints(alpha, a1, n);

            console.log(points);
            let xscale = d3.scaleLinear()
                .domain([1, n])
                .range([padding, width - padding])
            let yscale = d3.scaleLinear()
                .domain([points[points.length - 1][1] * 0.9, a1])
                .range([height - padding, padding]);

            console.log(points.map((x) => x[1]));
            div_graph.innerHTML = '';
            let svg = d3.select('#graph0')
                .append('svg')
                .attr('width', width)
                .attr('height', height);

            svg.selectAll('circle')
                .data(points)
                .enter()
                .append('circle')
                .attr('cx', (d) => xscale(d[0]))
                .attr('cy', (d) => yscale(d[1]))
                .attr('r', 2)
                .attr('color', 'green');

            let xaxis = d3.axisBottom().scale(xscale);
            let yaxis = d3.axisLeft().scale(yscale);

            svg.append('line')
                .attr('x1', xscale(1))
                .attr('y1', yscale(Math.sqrt(alpha)))
                .attr('x2', xscale(n))
                .attr('y2', yscale(Math.sqrt(alpha)))
                .attr('stroke', 'red');
            
            svg.append('g')
                .attr('transform', `translate(0, ${height - padding})`)
                .call(xaxis);
            svg.append('g')
                .attr('transform', `translate(${padding}, 0)`)
                .call(yaxis);

            div_output.innerHTML =
                points.map((x) => `${x[0]}: ${x[1]}`).join('<br>') +
                `<br>Math.sqrt(${alpha}): ${Math.sqrt(alpha)}`;
            
        } else {
            div_output.innerHTML = '注意: a1は√α より大きい数';
        }
    };

    inputs.forEach((input) => input.onchange = plot);
    plot();

}
123456789101.31.41.51.61.71.81.92.0
1: 2
2: 1.5
3: 1.4166666666666665
4: 1.4142156862745097
5: 1.4142135623746899
6: 1.414213562373095
7: 1.414213562373095
8: 1.414213562373095
9: 1.414213562373095
10: 1.414213562373095
Math.sqrt(2): 1.4142135623730951

0 コメント:

コメントを投稿