2017年5月16日火曜日

学習環境

解析入門 原書第3版 (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第2部(微分と基本的な関数)、第3章(微分係数、導関数)、補充問題 51-55.を取り組んでみる。


  1. dy dx =3 x 2 12x+8 3 x 2 12x+8=1 x 2 4x+3=0 ( x1 )( x3 )=0 x=1,3 168=13 2754+24=3 ( 3,3 )

  2. dy dx =3 x 2 3 3 x 2 3=9 3( x 2 1 )=9 x 2 1=3 x=±2 86+1=3 1815=3 8+6+1=1 1815=33 ( 2,3 )

  3. dy dx =6x dy dx =6 x 2 y3=6( x1 ) y=6x3

  4. dy dx =2( x+1 ) y=2( x 0 +1 )x ( x 0 +1 ) 2 =2( x 0 +1 ) x 0 x 0 2 +2 x 0 +1=2 x 0 2 +2 x 0 x 0 2 =1 x 0 =±1 y=4x y=0

  5. dy dx =16 x 3 16x+16 =16( x 3 x+1 ) x 3 x+1=1 x( x 2 1 )=0 x=0,±1 ( 1,13 ),( 0,7 ),( 1,19 ) y+13=16( x+1 ) y7=16x y19=16( x1 ) y=16x+3 y=16x+7 y=16x+3

コード(Emacs)

HTML5

<div id="graph0"></div>
<pre id="output0"></pre>
<label for="r0">r = </label>
<input id="r0" type="number" min="0" value="1">
<label for="dx">dx = </label>
<input id="dx" type="number" min="0" step="0.01" value="0.01">
<label for="n0">n = </label>
<input id="n0" type="number" min="51" max="55" step="1" value="51">
<br>
<label for="x1">x1 = </label>
<input id="x1" type="number" value="-10">
<label for="x2">x2 = </label>
<input id="x2" type="number" value="10">
<br>
<label for="y1">y1 = </label>
<input id="y1" type="number" value="-10">
<label for="y2">y2 = </label>
<input id="y2" type="number" value="10">

<button id="draw0">draw</button>
<button id="clear0">clear</button>

<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="sample51.js"></script>    

JavaScript

let div0 = document.querySelector('#graph0'),
    pre0 = document.querySelector('#output0'),
    width = 600,
    height = 600,
    padding = 50,
    btn0 = document.querySelector('#draw0'),
    btn1 = document.querySelector('#clear0'),
    input_r = document.querySelector('#r0'),
    input_dx = document.querySelector('#dx'),
    input_n = document.querySelector('#n0'),
    input_x1 = document.querySelector('#x1'),
    input_x2 = document.querySelector('#x2'),
    input_y1 = document.querySelector('#y1'),
    input_y2 = document.querySelector('#y2'),
    inputs = [input_r, input_dx, input_n, input_x1, input_x2, input_y1, input_y2],
    p = (x) => pre0.textContent += x + '\n';

let f10 = (x) => -x,
    f11 = (x) => x ** 3 - 6 * x ** 2 + 8 * x,
    f20 = (x) => 9 * x - 15,
    f21 = (x) => x ** 3 - 3 * x + 1,
    f30 = (x) => 3 * x ** 2,
    f31 = (x) => 2 * x ** 3 + 1,
    f32 = (x) => 6 * x - 3,
    f40 = (x) => (x + 1) ** 2,
    f41 = (x) => 0,
    f42 = (x) => 4 * x,
    f50 = (x) => 4 * x ** 4 - 8 * x ** 2 + 16 * x + 7,
    f51 = (x) => 16 * x + 3,
    f52 = (x) => 16 * x + 7,
    fns = [
        [f10, f11],
        [f20, f21],
        [f30, f31, f32],
        [f40, f41, f42],
        [f50, f51, f52]
    ];

let draw = () => {
    pre0.textContent = '';

    let r = parseFloat(input_r.value),
        dx = parseFloat(input_dx.value),
        n = parseInt(input_n.value, 10) - 51,
        x1 = parseFloat(input_x1.value),
        x2 = parseFloat(input_x2.value),
        y1 = parseFloat(input_y1.value),
        y2 = parseFloat(input_y2.value);
    
    if (r === 0 || dx === 0 || x1 > x2 || y1 > y2) {
        return;
    }

    let points = [];        

    if (fns[n].length === 2) {
        let [f0, f1] = fns[n];
        for (let x = x1; x <= x2; x += dx) {
            points.push([x, f0(x)]);
        }
        let t = points.length;
        for (let x = x1; x <= x2; x += dx) {
            points.push([x, f1(x)]);
        }
        let xscale = d3.scaleLinear()
            .domain([x1, x2])
            .range([padding, width - padding]);
        let yscale = d3.scaleLinear()
            .domain([y1, y2])
            .range([height - padding, padding]);

        let xaxis = d3.axisBottom().scale(xscale);
        let yaxis = d3.axisLeft().scale(yscale);
        div0.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', r)
            .attr('fill', (d, i) => i < t ? 'green': 'blue');
        
        svg.append('g')
            .attr('transform', `translate(0, ${yscale(0)})`)
            .call(xaxis);

        svg.append('g')
            .attr('transform', `translate(${xscale(0)}, 0)`)
            .call(yaxis);
    } else {
        let [f0, f1, f2] = fns[n];
        for (let x = x1; x <= x2; x += dx) {
            points.push([x, f0(x)]);
        }
        let t1 = points.length;
        for (let x = x1; x <= x2; x += dx) {
            points.push([x, f1(x)]);
        }
        let t2 = points.length;
        for (let x = x1; x <= x2; x += dx) {
            points.push([x, f2(x)]);
        }
        let xscale = d3.scaleLinear()
            .domain([x1, x2])
            .range([padding, width - padding]);
        let yscale = d3.scaleLinear()
            .domain([y1, y2])
            .range([height - padding, padding]);

        let xaxis = d3.axisBottom().scale(xscale);
        let yaxis = d3.axisLeft().scale(yscale);
        div0.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', r)
            .attr('fill', (d, i) =>
                  i < t1 ? 'red' :
                  i < t2 ? 'green': 'blue');
        
        svg.append('g')
            .attr('transform', `translate(0, ${yscale(0)})`)
            .call(xaxis);

        svg.append('g')
            .attr('transform', `translate(${xscale(0)}, 0)`)
            .call(yaxis);
    }
}

inputs.forEach((input) => input.onchange = draw);
btn0.onclick = draw;
btn1.onclick = () => pre0.textContent = '';
draw();









0 コメント:

コメントを投稿