手动展开 曲线 x * x + y * y = r * r 的泰勒级数,在x0 = 0 时, 到3阶以上,很费神费事,直接借助在线工具
https://zh.numberempire.com/taylorseriesexpansion.php 泰勒级数展开计算器
https://zh.numberempire.com/taylorseriesexpansion.php 函数求导工具
https://zs.symbolab.com/solver/derivative-calculator/\frac{d^{8}}{dx^{8}}\left(\sqrt{r^{2}-x^{2}}\right)
<html>
<head>
<meta charset="UTF-8">
<title>圆的泰勒级数在x=0处展开</title>
<style type="text/css">
.box {
/*float: left;*/
background-color: black;
}
.ctrlBox {
float: left;
/*border: 1px solid #A0F;*/
width: 400;
/*height: 700;*/
}
</style>
</head>
<body>
<canvas id="canvas" class="box">
canvas not supported, please use html5 browser.
</canvas>
<div class="ctrlBox">
<p>泰勒级数展开的阶数:<p>
<button onclick="update(-1)"> << </button>
<span id="lvlLb">1</span>
<button onclick="update(1)"> >> </button>
</div>
</body>
<script>
var radius = 100;
var x0 = Math.SQRT2 * radius / 2;
var label = document.querySelector("#lvlLb");
var arr=[1,2,4,6,8,10,12], cur = 0;
var canvas = document.querySelector(".box");
var ctx = canvas.getContext('2d');
window.onload = function() {
canvas.width = 800;
canvas.height = 600;
draw();
}
function update(val) {
var preCur = cur;
val > 0 ? cur++ : cur--;
if (cur < 0) cur = 0;
if (cur >= arr.length - 1) cur = arr.length - 1;
if (preCur != cur) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
draw();
}
}
function draw() {
var cx = 400, cy = 300;
label.innerText = arr[cur];
ctx.beginPath();
ctx.strokeStyle = "#EE9611";
ctx.arc(cx, cy, radius, Math.PI*2, false);
ctx.stroke();
ctx.moveTo(0, cy);
ctx.lineTo(canvas.width, cy);
ctx.stroke();
ctx.moveTo(cx, 0);
ctx.lineTo(cx, canvas.height);
ctx.stroke();
ctx.closePath();
var range = 150;
for (var i = -range; i < range; i++) {
var j = getTyler_Y(i, arr[cur]);
if (i === -range) {
ctx.beginPath();
ctx.strokeStyle = "#2BD56F";
ctx.moveTo(cx+i, cy-j);
} else {
ctx.lineTo(cx+i, cy-j);
}
}
ctx.stroke();
}
//自变量x, 泰勒级数展开的阶数lvl
function getTyler_Y(x, lvl) {
var exp;
if (lvl >= 1) {
exp = radius;
}
if (lvl >= 2) {
exp -= x**2 / (2 * radius);
}
if (lvl >= 4) {
exp -= x**4 / (8 * radius ** 3);
}
if (lvl >= 6) {
exp -= x**6 / (16 * radius ** 5);
}
if (lvl >= 8) {
exp -= 5 * x**8 / (128 * radius ** 7);
}
if (lvl >= 10) {
exp -= 7 * x**10 / (256 * radius ** 9);
}
if (lvl >= 12) {
exp -= 21 * x**12 / (1024 * radius ** 11);
}
return exp;
}
</script>
</html>
圆的轨迹, 也可以用参数方程来表示
x = r * cos( t )
y = r * sin( t )
一阶导数简单, 就是 (dy/dt) / (dx/dt)
二阶导数比较麻烦,参见《高等数学第五版》上册,第107页, (5)
y对t一阶导数 记作dy_t1
x对t一阶导数 记作dx_t1
y对t二阶导数 记作dy_t2
x对t二阶导数 记作dx_t2
y对x二阶导数 记作dy_x2
dy_x2 = (dy_t2 * dx_t1 - dy_t1 * dx_t2) / (dx_t1 ** 3)
就圆的轨迹,的参数方程表达来说
一阶导数 dy_x1 = -ctg( t )
二阶导数 dy_x2 = -1 / (r * sin(t) ** 3)
当x=0时,t=PI/2; sin ( t ) = 1, dy_x2 = -1 / r;
和根据 圆的隐函数表达 x * x + y * y = r * r 得出的二阶导数是一致的