2017年8月15日火曜日

学習環境

数学読本〈5〉微分法の応用/積分法/積分法の応用/行列と行列式(松坂 和夫(著)、岩波書店)の第19章(細分による加法 - 積分法)、19.2(不定積分の計算)、置換積分法、問11.を取り組んでみる。


    1. x+2=t 1= dt dx t 10 dt = 1 11 t 11 = ( x+2 ) 11 11

    2. 15x=t 5= dt dx dx= 1 5 dt t 3 ( 1 5 )dt = 1 5 · 1 4 t 4 = ( 15x ) 4 20

    3. t=12x x= 1t 2 dx dt = 1 2 6 t 4 ( 1 2 )dt =3 1 3 t 3 = ( 12x ) 3

    4. t=2x3 x= t+3 2 dx dt = 1 2 1 t 1 2 dt = 1 2 log| t | = 1 2 log| 2x3 |

    5. 4x=t x=4t dx dt =1 t 1 2 ( 1 )dt = 2 3 t 3 2 = 2 3 ( 4x ) 3 2

    6. t=2x+3 x= t3 2 dx dt = 1 2 t 1 2 1 2 dt = 1 2 1 2 t 1 2 = 1 4 ( 2x+3 ) 1 2

    7. t=ax+b x= tb a dx dt = 1 a t n 1 a dt = t n+1 ( n+1 )a = ( ax+b ) n+1 a( n+1 )

    8. 5x=t x= t 5 dx dt = 1 5 1 5 sint dt = 1 5 cost = 1 5 cos( 5x )

    9. t= π 3 x 2 x=2( π 3 t ) dx dt =2 2 cost dt =2sint =2sin( π 3 x 2 )

    10. ax+b=t x= tb a dx dt = 1 a 1 a sint dt = 1 a cost = 1 a cos( ax+b )

    11. t=ax+b x= tb a dx dt = 1 a 1 a cost dt = 1 a sint = 1 a sin( ax+b )

    12. 4x=t x= t 4 dx dt = 1 4 1 4 e t dt = 1 4 e t = 1 4 e 4x

    13. ax+b=t x= tb a dx dt = 1 a e t 1 a dx = 1 a e t = e ax+b a

コード(Emacs)

Python 3

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from sympy import pprint, symbols, Integral, sin, cos, sqrt, exp, pi, plot

print('11.')
x, n, b = symbols('x n b')
a = symbols('a', nonzero=True)
fs = [(x + 2) ** 10,
      (1 - 5 * x) ** 3,
      6 / (1 - 2 * x) ** 4,
      1 / (2 * x - 3),
      sqrt(4 - x),
      1 / sqrt(2 * x + 3),
      (a * x + b) ** n,
      sin(5 * x),
      cos(pi / 3 - x / 2),
      sin(a * x + b),
      cos(a * x + b),
      exp(-4 * x),
      exp(a * x + b)]


for i, f in enumerate(fs, 1):
    print(f'({i})')
    I = Integral(f, x)
    for o in [I, I.doit()]:
        pprint(o)
        print()
    try:
        p = plot(f, show=False, legend=True)
        p.save(f'sample11_{i}.svg')
    except Exception as err:
        print(type(err), err)
    print()

入出力結果(Terminal, IPython)

$ ./sample11.py
11.
(1)
⌠             
⎮        10   
⎮ (x + 2)   dx
⌡             

 11                                                                           
x        10       9        8        7         6         5         4         3 
─── + 2⋅x   + 20⋅x  + 120⋅x  + 480⋅x  + 1344⋅x  + 2688⋅x  + 3840⋅x  + 3840⋅x  
 11                                                                           

                  
        2         
+ 2560⋅x  + 1024⋅x
                  


(2)
⌠               
⎮           3   
⎮ (-5⋅x + 1)  dx
⌡               

       4               2    
  125⋅x        3   15⋅x     
- ────── + 25⋅x  - ───── + x
    4                2      


(3)
⌠               
⎮      6        
⎮ ─────────── dx
⎮           4   
⎮ (-2⋅x + 1)    
⌡               

          -6            
────────────────────────
    3       2           
48⋅x  - 72⋅x  + 36⋅x - 6


(4)
⌠           
⎮    1      
⎮ ─────── dx
⎮ 2⋅x - 3   
⌡           

log(2⋅x - 3)
────────────
     2      


(5)
⌠              
⎮   ________   
⎮ ╲╱ -x + 4  dx
⌡              

           3/2 
-2⋅(-x + 4)    
───────────────
       3       


(6)
⌠               
⎮      1        
⎮ ─────────── dx
⎮   _________   
⎮ ╲╱ 2⋅x + 3    
⌡               

  _________
╲╱ 2⋅x + 3 


(7)
⌠              
⎮          n   
⎮ (a⋅x + b)  dx
⌡              

⎧ log(a⋅x + b)   for n = -1
⎪                          
⎪         n + 1            
⎨(a⋅x + b)                 
⎪──────────────  otherwise 
⎪    n + 1                 
⎩                          
───────────────────────────
             a             

<class 'ValueError'> The same variable should be used in all univariate expressions being plotted.

(8)
⌠            
⎮ sin(5⋅x) dx
⌡            

-cos(5⋅x) 
──────────
    5     


(9)
⌠              
⎮    ⎛x   π⎞   
⎮ sin⎜─ + ─⎟ dx
⎮    ⎝2   6⎠   
⌡              

      ⎛x   π⎞
-2⋅cos⎜─ + ─⎟
      ⎝2   6⎠


(10)
⌠                
⎮ sin(a⋅x + b) dx
⌡                

-cos(a⋅x + b) 
──────────────
      a       

<class 'ValueError'> The same variable should be used in all univariate expressions being plotted.

(11)
⌠                
⎮ cos(a⋅x + b) dx
⌡                

sin(a⋅x + b)
────────────
     a      

<class 'ValueError'> The same variable should be used in all univariate expressions being plotted.

(12)
⌠         
⎮  -4⋅x   
⎮ ℯ     dx
⌡         

  -4⋅x 
-ℯ     
───────
   4   


(13)
⌠            
⎮  a⋅x + b   
⎮ ℯ        dx
⌡            

 a⋅x + b
ℯ       
────────
   a    

<class 'ValueError'> The same variable should be used in all univariate expressions being plotted.

$

HTML5

<div id="graph0"></div>
<pre id="output0"></pre>
<label for="r0">r = </label>
<input id="r0" type="number" min="0" value="0.5">
<label for="dx">dx = </label>
<input id="dx" type="number" min="0" step="0.0001" value="0.001">
<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">
<br>
<label for="a0">a = </label>
<input id="a0" type="number" value="2">
<label for="b0">b = </label>
<input id="b0" type="number" value="3">
<label for="n0">n = </label>
<input id="n0" type="number" value="4">


<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="sample11.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_x1 = document.querySelector('#x1'),
    input_x2 = document.querySelector('#x2'),
    input_y1 = document.querySelector('#y1'),
    input_y2 = document.querySelector('#y2'),
    input_a0 = document.querySelector('#a0'),
    input_b0 = document.querySelector('#b0'),
    input_n0 = document.querySelector('#n0'),
    inputs = [input_r, input_dx, input_x1, input_x2, input_y1, input_y2,
              input_a0, input_b0, input_n0],
    p = (x) => pre0.textContent += x + '\n',
    range = (start, end, step=1) => {
        let res = [];
        for (let i = start; i < end; i += step) {
            res.push(i);
        }
        return res;
    };

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

    let r = parseFloat(input_r.value),
        dx = parseFloat(input_dx.value),
        x1 = parseFloat(input_x1.value),
        x2 = parseFloat(input_x2.value),
        y1 = parseFloat(input_y1.value),
        y2 = parseFloat(input_y2.value),
        a0 = parseFloat(input_a0.value),
        b0 = parseFloat(input_b0.value),
        n0 = parseFloat(input_n0.value);

    if (r === 0 || dx === 0 || x1 > x2 || y1 > y2 || a0 <= 0 || a0 === 0 ||
        n0 === -1) {
        return;
    }
    
    let points = [],
        lines = [],
        f7 = (x) => (a0 * x + b0) ** n0,
        f10 = (x) => Math.sin(a0 * x + b0),
        f11 = (x) => Math.cos(a0 * x + b0),
        f13 = (x) => Math.exp(a0 * x + b0),
        fns = [[f7, 'red'],
               [f10, 'green'],
               [f11, 'blue'],
               [f13, 'orange']],
        fns1 = [],
        fns2 = [];

    fns.forEach((o) => {
        let [fn, color] = o;
        for (let x = x1; x <= x2; x += dx) {
            let y = fn(x);

            if (Math.abs(y) < Infinity) {
                points.push([x, y, color]);
            }
        }
    });
    fns1.forEach((o) => {
        let [fn, color] = o;
        
        lines.push([x1, fn(x1), x2, fn(x2), color]);
    });
    fns2.forEach((o) => {
        let [fn, color] = o;

        for (let x = x1; x <= x2; x += dx0) {
            let g = fn(x);
            
            lines.push([x1, g(x1), x2, g(x2), color]);
        }        
    });
    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('line')
        .data([[x1, 0, x2, 0], [0, y1, 0, y2]].concat(lines))
        .enter()
        .append('line')
        .attr('x1', (d) => xscale(d[0]))
        .attr('y1', (d) => yscale(d[1]))
        .attr('x2', (d) => xscale(d[2]))
        .attr('y2', (d) => yscale(d[3]))
        .attr('stroke', (d) => d[4] || 'black');
    
    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) => d[2] || 'green');
    
    svg.append('g')
        .attr('transform', `translate(0, ${height - padding})`)
        .call(xaxis);

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

    [fns, fns1, fns2].forEach((fs) => p(fs.join('\n')));
};

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








0 コメント:

コメントを投稿