2017年5月15日月曜日

学習環境

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


  1. dy dx = 1 4 x 3 4 + 3 2 x 1 4 y( 2+2· 2 3 )=( 1 4 · 1 8 + 3 2 · 1 2 )( x16 ) y18=( 1 32 + 3 4 )( x16 ) y18= 25 32 ( x16 )

  2. dy dx =6 x 2 y( 2 8 +3 )= 3 2 ( x 1 2 ) y 26 8 = 3 2 ( x 1 2 )

  3. dy dx =( x3 )( x4 )+( x1 )( x4 )+( x1 )( x3 ) y+12=( 12+4+3 )x y+12=19x

  4. dy dx =4x+5 y17=13( x2 )

  5. dy dx =2x( 2x+3 )+( x 2 +1 )2 y10=14( x1 )

  6. dy dx = x+5( x1 ) ( x+5 ) 2 y 1 7 = 6 49 ( x2 )

  7. dy dx = 2x( x 3 +1 ) x 2 ·3 x 2 ( x 3 +1 ) 2 y 4 9 = 364·12 81 ( x2 ) y 4 9 = 1216 27 ( x2 ) y 4 9 = 4 27 ( x2 )

  8. dy dx = 2x( x 3 +1 )( x 2 +1 )·3 x 2 ( x 3 +1 ) 2 y 5 9 = 24 81 ( x2 ) y 5 9 = 8 37 ( x2 )

  9. dy dx = 2x( x 2 1 ) x 2 ·2x ( x 2 1 ) 2 y 4 3 = 1216 9 ( x2 ) y 4 3 = 4 9 ( x2 )

  10. dy dx = x 2 +1( x1 )·2x ( x 2 +1 ) 2 y= 1 2 ( x1 )

コード(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="41" max="50" step="1" value="41">
<br>
<label for="x1">x1 = </label>
<input id="x1" type="number" value="0">
<label for="x2">x2 = </label>
<input id="x2" type="number" value="20">
<br>
<label for="y1">y1 = </label>
<input id="y1" type="number" value="0">
<label for="y2">y2 = </label>
<input id="y2" type="number" value="20">

<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="sample41.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 ** (1 / 4) + 2 * x ** (3 / 4),
    f11 = (x) => 25 / 32 * (x - 16) + 18,
    f20 = (x) => 2 * x ** 3 + 3,
    f21 = (x) => 3 / 2 * (x - 1 / 2) + 26 / 8,
    f30 = (x) => (x - 1) * (x - 3) * (x - 4),
    f31 = (x) => 19 * x - 12,
    f40 = (x) => 2 * x ** 2 + 5 * x - 1,
    f41 = (x) => 13 * (x - 2) + 17,
    f50 = (x) => (x ** 2 + 1) * (2 * x + 3),
    f51 = (x) => 14 * (x - 1) + 10,
    f60 = (x) => (x - 1) / (x + 5),
    f61 = (x) => 6 / 49 * (x - 2) + 1 / 7,
    f70 = (x) => x ** 2 / (x ** 3 + 1),
    f71 = (x) => - 4 / 27 * (x - 2) + 4 / 9,
    f80 = (x) => (x ** 2 + 1) / (x ** 3 + 1),
    f81 = (x) => - 8 / 37 * (x - 2) + 5 / 9,
    f90 = (x) => x ** 2 / (x ** 2 - 1),
    f91 = (x) => -4 / 9 * (x - 2) + 4 / 3,
    f00 = (x) => (x - 1) / (x ** 2 + 1),
    f01 = (x) => 1 / 2 *(x - 1)
    fns = [[f10, f11],
           [f20, f21],
           [f30, f31],
           [f40, f41],
           [f50, f51],
           [f60, f61],
           [f70, f71],
           [f80, f81],
           [f90, f91],
           [f00, f01]];

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

    let r = parseFloat(input_r.value),
        dx = parseFloat(input_dx.value),
        n = parseInt(input_n.value, 10) - 41,
        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 = [],
        [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);
}

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









0 コメント:

コメントを投稿