## 2016年12月2日金曜日

### 数学 - 解析学 - JavaScript - 数列と級数 - 数列の収束条件(部分列極限、単調増加、単調減少、有界)

1. $\begin{array}{l}{a}_{n}-{a}_{n+2}\\ ={a}_{n}-\frac{{a}_{n+1}+\alpha }{{a}_{n+1}+1}\\ ={a}_{n}-\frac{\frac{{a}_{n}+\alpha }{{a}_{n}+1}+\alpha }{\frac{{a}_{n}+\alpha }{{a}_{n}+1}+1}\\ ={a}_{n}-\frac{{a}_{n}+\alpha +\alpha \left({a}_{n}+1\right)}{{a}_{n}+1}·\frac{{a}_{n}+1}{{a}_{n}+\alpha +{a}_{n}+1}\\ ={a}_{n}-\frac{\left(1+\alpha \right){a}_{n}+2\alpha }{2{a}_{n}+\alpha +1}\\ =\frac{2{a}_{n}{}^{2}+\left(\alpha +1\right){a}_{n}-\left(\alpha +1\right){a}_{n}-2\alpha }{2{a}_{n}+\alpha +1}\\ =\frac{2\left({a}_{n}{}^{2}-\alpha \right)}{2{a}_{n}+\alpha +1}\\ \\ {a}_{n+1}-\sqrt{\alpha }\\ =\frac{{a}_{n}+\alpha }{{a}_{n}+1}-\sqrt{\alpha }\\ =\frac{{a}_{n}+\alpha -\sqrt{\alpha }{a}_{n}-\sqrt{\alpha }}{{a}_{n}+1}\\ =\frac{\left(1-\sqrt{\alpha }\right){a}_{n}+\sqrt{\alpha }\left(\sqrt{\alpha }-1\right)}{{a}_{n}+1}\\ =\frac{\left(\sqrt{\alpha }-1\right)\left(\sqrt{\alpha }-{a}_{n}\right)}{{a}_{n}+1}\\ \\ {a}_{n}<\sqrt{\alpha }⇒{a}_{n}<{a}_{n+2}\\ {a}_{n}>\sqrt{a}⇒{a}_{n}>{a}_{n+2}\\ \\ {a}_{1}<\sqrt{\alpha }\\ {a}_{2}-\sqrt{\alpha }=\frac{\left(\sqrt{\alpha }-1\right)\left(\sqrt{\alpha }-{a}_{1}\right)}{{a}_{1}+1}>0\\ {a}_{2}>\sqrt{\alpha }\end{array}$

2. $\begin{array}{l}{a}_{2n-1}<\sqrt{\alpha }\\ {a}_{2n}>\sqrt{\alpha }\\ \\ {a}_{n+2}=\frac{\frac{{a}_{n}+\alpha }{{a}_{n}+1}+\alpha }{\frac{{a}_{n}+\alpha }{{a}_{n}+1}+1}\\ \beta =\frac{\frac{\beta +\alpha }{\beta +1}+\alpha }{\frac{\beta +\alpha }{\beta +1}+1}\\ \beta =\frac{\left(1+\alpha \right)\beta +2\alpha }{2\beta +\alpha +1}\\ 2{\beta }^{2}+\alpha \beta +\beta =\beta +\alpha \beta +2\alpha \\ {\beta }^{2}=\alpha \\ \beta =\sqrt{\alpha }\end{array}$

HTML5

<div id="graph0"></div>
<div id="output0"></div>
<label for="alpha0">α = </label>
<input id="alpha0" type="number" min="1" value="5">
<label for="a1">a1 = </label>
<input id="a1" type="number" min="0" 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="sample4.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,

let f = (alpha, prev) => {
return (prev + alpha) / (prev + 1);
};
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 (alpha > 1 && 0 < a1 && 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])
let yscale = d3.scaleLinear()
.domain([points[0][1] * 0.9, points[1][1] * 1.1])

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 = '注意: α > 1, 0 < a1 < √α';
}
};

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

}