オリジナル
sympyで
問題1 内積と、それらがなす角 θ
from sympy import *
import sympy
var('ax ay bx by')
a = sympy.Matrix([ax, ay])
b = sympy.Matrix([bx, by])
ab = a.dot(b)
theta = sympy.acos(a.dot(b)/(a.norm()*b.norm()))
myValue={ax:2, ay:-3,bx:-4,by:6}
print(f'# 問題1(1)の解答 内積は {ab} 、角度θは {theta}')
print(f'# 問題1(1)の解答 内積は {ab.subs(myValue)}、角度θは {theta.subs(myValue)}')
from sympy import *
import sympy
var('ax ay bx by')
a = sympy.Matrix([ax, ay])
b = sympy.Matrix([bx, by])
ab = a.dot(b)
theta = sympy.acos(sympy.simplify(a.dot(b)/(a.norm()*b.norm())))
myValue={ax:1, ay:1,bx:1-sympy.sqrt(3), by:1+sympy.sqrt(3)}
print(f'# 問題1(2)の解答 内積は {ab} 、角度θは {theta}')
print(f'# 問題1(2)の解答 内積は {ab.subs(myValue)}、角度θは {theta.subs(myValue).simplify()}')
# 問題1(1)の解答 内積は ax*bx + ay*by 、角度θは acos((ax*bx + ay*by)/(sqrt(Abs(ax)**2 + Abs(ay)**2)*sqrt(Abs(bx)**2 + Abs(by)**2)))
# 問題1(1)の解答 内積は -26、角度θは pi
# 問題1(2)の解答 内積は ax*bx + ay*by 、角度θは acos((ax*bx + ay*by)/(sqrt(Abs(ax)**2 + Abs(ay)**2)*sqrt(Abs(bx)**2 + Abs(by)**2)))
# 問題1(2)の解答 内積は 2、角度θは pi/3
問題2 平行四辺形の面積
from sympy import *
import sympy
var('ax ay bx by')
a = sympy.Matrix([ax, ay])
b = sympy.Matrix([bx, by])
S = sympy.sqrt(a.norm()**2 * b.norm()**2 - a.dot(b)**2)
S = sympy.simplify(S)
myValue={ax:1, ay:1,bx:1-sympy.sqrt(3), by:1+sympy.sqrt(3)}
print(f'# 問題2の解答 面積は {S}')
print(f'# 問題2の解答 面積は {S.subs(myValue).simplify()}')
# 問題2の解答 面積は sqrt(-(ax*bx + ay*by)**2 + (Abs(ax)**2 + Abs(ay)**2)*(Abs(bx)**2 + Abs(by)**2))
# 問題2の解答 面積は 2*sqrt(3)
問題3 垂直な単位ベクトル
別解は、sympy2Dで
from sympy import *
import sympy
x, y = sympy.symbols('x y')
var('ax ay')
a = sympy.Matrix([ax,ay])
u = sympy.Matrix([x,y])
u_norm = sympy.sqrt(x**2+y**2)
sol = sympy.solve([a.dot(u),u_norm-1],[x,y])
myValue={ax:3,ay:4}
print("# 問題3の解答",sol)
print("# 問題3の解答",[[ans.subs(myValue) for ans in sol[i]] for i in range(len(sol))])
from sympy import *
def myMatrixtoList(myMatrix):
return [[ans for ans in myMatrix] for i in range(len(myMatrix)-1)]
def myPoint2DtoMatrix(myPoint2D):
return Matrix([myPoint2D.x,myPoint2D.y])
def myUnitVector(myPoint):
myL=myPoint.distance((0, 0))
return Point2D(myPoint.x/myL,myPoint.y/myL)
var('ax ay')
print("# 問題3の別解",myMatrixtoList( myUnitVector(Point2D(ax,ay).rotate(pi/2))),
myMatrixtoList(-myUnitVector(Point2D(ax,ay).rotate(pi/2))))
myValue={ax:3,ay:4}
print("# 問題3の別解",myMatrixtoList( myUnitVector(Point2D(ax,ay).rotate(pi/2)).subs(myValue)),
myMatrixtoList(-myUnitVector(Point2D(ax,ay).rotate(pi/2)).subs(myValue)))
# 問題3の解答 [(-ay*sqrt(1/(ax**2 + ay**2)), ax*sqrt(1/(ax**2 + ay**2))), (ay*sqrt(1/(ax**2 + ay**2)), -ax*sqrt(1/(ax**2 + ay**2)))]
# 問題3の解答 [[-4/5, 3/5], [4/5, -3/5]]
# 問題3の別解 [[-ay/sqrt(ax**2 + ay**2), ax/sqrt(ax**2 + ay**2)]] [[ay/sqrt(ax**2 + ay**2), -ax/sqrt(ax**2 + ay**2)]]
# 問題3の別解 [[-4/5, 3/5]] [[4/5, -3/5]]
問題4 直線の方程式
別解は、sympy2Dで
from sympy import *
import sympy
var('ax ay')
c1, c2 = sympy.symbols('c1 c2')
a = sympy.Matrix([ax, ay])
u = sympy.Matrix([c1, c2])
u_norm = sympy.sqrt(c1**2+c2**2)
sol = sympy.solve([a.dot(u),u_norm-1],[c1,c2])
c1 = sol[0][0]
c2 = sol[0][1]
x, y = sympy.symbols('x y')
ans = sympy.solve((x-3)/c1 - (y-2)/c2, y)
myValue={ax:3,ay:4}
print(f'# 問題4の解答 直線の式は y = {ans[0]}')
print(f'# 問題4の解答 直線の式は y = {ans[0].subs(myValue)}')
from sympy import *
import sympy
var('x y')
var('ax ay')
c1, c2 = sympy.symbols('c1 c2')
a = Point([ax, ay])
u = Point([c1, c2])
l_eq=solve(Line(u,u+a.rotate(pi/2)).equation(x=x, y=y),y)[0]
myValue={ax:3,ay:4,c1:3, c2:2}
print(f'# 問題4の別解 直線の式は y = {l_eq}')
print(f'# 問題4の別解 直線の式は y = {l_eq.subs(myValue)}')
# 問題4の解答 直線の式は y = (-ax*x + 3*ax + 2*ay)/ay
# 問題4の解答 直線の式は y = 17/4 - 3*x/4
# 問題4の別解 直線の式は y = (ax*c1 - ax*x + ay*c2)/ay
# 問題4の別解 直線の式は y = 17/4 - 3*x/4
参考
問題3の別解 垂直な単位ベクトル
問題4の別解 直線の方程式