学習環境
- Surface
- Windows 10 Pro (OS)
- Nebo(Windows アプリ)
- iPad
- MyScript Nebo - MyScript(iPad アプリ(iOS))
- 参考書籍
解析入門(上) (松坂和夫 数学入門シリーズ 4) (松坂 和夫(著)、岩波書店)の第10章(n次元空間)、10.1(ユークリッド空間)、問題3の解答を求めてみる。
求める垂線の足の座標を
とする。
これは平面上の点なので、
また、平面の法線ベクトルは、
原点から下ろした垂線の足なので、垂線の向きは
これが法線ベクトルの実数倍なので、
よって、
ゆえに、求める原点から問題の平面に下ろした垂線の足の座標は、
である。
コード
#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, solve, Matrix
from sympy.plotting import plot3d, plot3d_parametric_line
print('3.')
x, y, z, a, b, c, k = symbols('x, y, z, a, b, c, k', real=True)
x0, y0, z0 = [k * t / (a ** 2 + b ** 2 + c ** 2) for t in [a, b, c]]
class MyTestCase(TestCase):
def test1(self):
d = {s: t for s, t in zip([x, y, z], [x0, y0, z0])}
self.assertEqual((a * x + b * y + c * z).subs(d).simplify(), k)
def test2(self):
t = symbols('t', real=True)
ts = solve(t * Matrix([a, b, c]) - Matrix([x0, y0, z0]), t)
self.assertEqual(len(ts), 1)
d = {a: 1, b: 2, c: 3, k: -1}
p = plot3d((k - (a + x + b * y) / c).subs(d), show=False)
u = symbols('u')
p.append(plot3d_parametric_line(*[o.subs(d) * u for o in [x0, y0, z0]],
(u, -100, 100),
legend=True,
show=False)[0])
p.xlabel = x
p.ylabel = y
p.show()
p.save('sample10.png')
if __name__ == "__main__":
main()
入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))
% ./sample3.py -v
3.
test1 (__main__.MyTestCase) ... ok
test2 (__main__.MyTestCase) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.343s
OK
%
0 コメント:
コメントを投稿