SymPyのdefの使い方を教えて下さい。
オリジナル
wolframalphaで
方程式
z = -(11 x)/14 - (8 y)/7 + 15/14
SymPyで(2022-11-03追加)
これが、スッキリしていていいと思います。
from sympy import *
A=Point3D(1, 2,-2)
B=Point3D(3,-2, 1)
C=Point3D(5, 1,-4)
print("#",Plane(A,B,C))
print("#",Plane(A,B,C).equation())
# Plane(Point3D(1, 2, -2), (11, 16, 14))
# 11*x + 16*y + 14*z - 15
subs使用
from sympy import *
var('Ax Ay Az')
var('Bx By Bz')
var('Cx Cy Cz')
A=Point3D(Ax,Ay,Az)
B=Point3D(Bx,By,Bz)
C=Point3D(Cx,Cy,Cz)
print("#",Plane(A,B,C))
print("#",Plane(A,B,C).equation())
mySubs={Ax:1,Ay:2,Az:-2,Bx:3,By:-2,Bz:1,Cx:5,Cy:1,Cz:-4}
print("#",Plane(A,B,C).subs(mySubs))
print("#",Plane(A,B,C).equation().subs(mySubs))
# (省略)
# (省略)
# Plane(Point3D(1, 2, -2), (11, 16, 14))
# 11*x + 16*y + 14*z - 15
SymPyで(行列で)
from sympy import *
var('a b c d')
var('Ax Ay Az')
var('Bx By Bz')
var('Cx Cy Cz')
a=(By-Ay)*(Cz-Az)-(Cy-Ay)*(Bz-Az)
b=(Bz-Az)*(Cx-Ax)-(Cz-Az)*(Bx-Ax)
c=(Bx-Ax)*(Cy-Ay)-(Cx-Ax)*(By-Ay)
d=-(a*Ax+b*Ay+c*Az)
mySubs={Ax:1,Ay:2,Az:-2,Bx:3,By:-2,Bz:1,Cx:5,Cy:1,Cz:-4}
print("#",a.subs(mySubs),b.subs(mySubs),c.subs(mySubs),d.subs(mySubs))
# 11 16 14 -15
????defを使ってみました。
from sympy import *
var('a b c d')
var('Ax Ay Az')
var('Bx By Bz')
var('Cx Cy Cz')
var('x y z')
def myMat2Eq(myMat):
a=(By-Ay)*(Cz-Az)-(Cy-Ay)*(Bz-Az)
b=(Bz-Az)*(Cx-Ax)-(Cz-Az)*(Bx-Ax)
c=(Bx-Ax)*(Cy-Ay)-(Cx-Ax)*(By-Ay)
d=-(a*Ax+b*Ay+c*Az)
mySubs={Ax:myMat[0,0],Ay:myMat[0,1],Az:myMat[0,2],
Bx:myMat[1,0],By:myMat[1,1],Bz:myMat[1,2],
Cx:myMat[2,0],Cy:myMat[2,1],Cz:myMat[2,2]}
return a.subs(mySubs)*x+b.subs(mySubs)*y+c.subs(mySubs)*z+d.subs(mySubs)
myMat=Matrix([[1,2,-2],[3,-2,1],[5,1,-4]])
print("#",myMat2Eq(myMat))
# 11*x + 16*y + 14*z - 15
vbaで
Sub heimenNOsiki()
ActiveSheet.Cells.Clear
MsgBox "3点を含む平面の式を計算します。"
Range("A1") = 1
Range("B1") = 2
Range("C1") = -2
Range("A2") = 3
Range("B2") = -2
Range("C2") = 1
Range("A3") = 5
Range("B3") = 1
Range("C3") = -4
Range("A5").Formula = "=(B2-B1)*(C3-C1)-(B3-B1)*(C2-C1)"
Range("B5").Formula = "=(C2-C1)*(A3-A1)-(C3-C1)*(A2-A1)"
Range("C5").Formula = "=(A2-A1)*(B3-B1)-(A3-A1)*(B2-B1)"
Range("D5").Formula = "=-(A5*A1+B5*B1+C5*C1)"
End Sub
'結果
'11 16 14 -15
参考
equation(x=None, y=None, z=None)
The equation of the Plane.