sympyで行列式の結果を分数でだす方法を教えて下さい。


①sympyで行列式の結果を分数56/5でだす方法を教えて下さい。  
②x−y+2=0，3 _x+y−18=0，2_ x+3*y−12=0から、係数を取り出して、リストl1l2l3をつくる方法を教えて下さい。  
③プログラムが短くなりますか？

sympyで「3直線で作られる三角形の面積計算」やってみた  
(抜粋)【数学ⅡB】3直線で作られる三角形の面積【明治学院大】  
x−y+2=0，3x+y−18=0，2x+3y−12=0  
<https://methodology.site/the-area-of-a-triangle-formed-by-three-lines/>  
(参考)平面上の異なる３点を頂点とする三角形の面積  
<https://blog.goo.ne.jp/mh0920-yh/e/b30c1f8f34b298345a2551cc31a02797>

[code]

    from sympy import *
    def myKoten_LineLine(a,b,c,d,e,f):
        ans = solve([a*x+b*y+c, d*x+e*y+f], x, y)
        return ans[x],ans[y]
    var('a b c d e f x y my_ans')
    var('a1 b1 c1 a2 b2 c2 a3 b3 c3')
    my_ans=myKoten_LineLine(a,b,c,d,e,f)
    x=my_ans[0]
    y=my_ans[1]
    x1=x.subs([(a,a2), (b,b2), (c,c2),(d,a3), (e,b3), (f,c3)])
    y1=y.subs([(a,a2), (b,b2), (c,c2),(d,a3), (e,b3), (f,c3)])
    x2=x.subs([(a,a3), (b,b3), (c,c3),(d,a1), (e,b1), (f,c1)])
    y2=y.subs([(a,a3), (b,b3), (c,c3),(d,a1), (e,b1), (f,c1)])
    x3=x.subs([(a,a1), (b,b1), (c,c1),(d,a2), (e,b2), (f,c2)])
    y3=y.subs([(a,a1), (b,b1), (c,c1),(d,a2), (e,b2), (f,c2)])
    print("# 頂点1",x1,y1)
    print("# 頂点2",x2,y2)
    print("# 頂点3",x3,y3)
    area=1/2*abs(det(
            Matrix([[x1, y1, 1],
                    [x2, y2, 1],
                    [x3, y3, 1]])
                 ))
    print("# 面積 ",area)
    print("# 代入後---------------------------------------------------------------------------")
    l1=[(a1,1), (b1,-1), (c1,  2)]
    l2=[(a2,3), (b2, 1), (c2,-18)]
    l3=[(a3,2), (b3, 3), (c3,-12)]
    if denom(x1).subs(l2+l3) == 0 or denom(x2).subs(l3+l1) == 0 or denom(x3).subs(l1+l2) == 0 :
        print("三角形できない")
    else:
        print("# 代入頂点1", Float(x1.subs(l2 + l3), 3), Float(y1.subs(l2 + l3), 3))
        print("# 代入頂点2", Float(x2.subs(l3 + l1), 3), Float(y2.subs(l3 + l1), 3))
        print("# 代入頂点3", Float(x3.subs(l1 + l2), 3), Float(y3.subs(l1 + l2), 3))
        print("# 代入面積 ", area.subs(l1 + l2 + l3))
    # 頂点1 (b2*c3 - b3*c2)/(a2*b3 - a3*b2) (-a2*c3 + a3*c2)/(a2*b3 - a3*b2)
    # 頂点2 (-b1*c3 + b3*c1)/(-a1*b3 + a3*b1) (a1*c3 - a3*c1)/(-a1*b3 + a3*b1)
    # 頂点3 (b1*c2 - b2*c1)/(a1*b2 - a2*b1) (-a1*c2 + a2*c1)/(a1*b2 - a2*b1)
    # 面積  0.5*Abs((a1**2*b2**2*c3**2 - 2*a1**2*b2*b3*c2*c3 + a1**2*b3**2*c2**2 - 2*a1*a2*b1*b2*c3**2 + 2*a1*a2*b1*b3*c2*c3 + 2*a1*a2*b2*b3*c1*c3 - 2*a1*a2*b3**2*c1*c2 + 2*a1*a3*b1*b2*c2*c3 - 2*a1*a3*b1*b3*c2**2 - 2*a1*a3*b2**2*c1*c3 + 2*a1*a3*b2*b3*c1*c2 + a2**2*b1**2*c3**2 - 2*a2**2*b1*b3*c1*c3 + a2**2*b3**2*c1**2 - 2*a2*a3*b1**2*c2*c3 + 2*a2*a3*b1*b2*c1*c3 + 2*a2*a3*b1*b3*c1*c2 - 2*a2*a3*b2*b3*c1**2 + a3**2*b1**2*c2**2 - 2*a3**2*b1*b2*c1*c2 + a3**2*b2**2*c1**2)/(a1**2*a2*b2*b3**2 - a1**2*a3*b2**2*b3 - a1*a2**2*b1*b3**2 + a1*a3**2*b1*b2**2 + a2**2*a3*b1**2*b3 - a2*a3**2*b1**2*b2))
    # 代入後---------------------------------------------------------------------------
    # 代入頂点1 6.00 0.0
    # 代入頂点2 1.20 3.20
    # 代入頂点3 4.00 6.00
    # 代入面積  11.2000000000000
    
[/code]




行列式の値は分数になっていると思いますよ。代入面積が小数表示なのは、面積の計算式に浮動小数点数が含まれているためです。

それはどこかというと、先頭にある`1/2`です。これは先に計算されて0.5になってしまいます。

代わりに式の最後に2で割るようにするか、これを`Rational(1,2)`に置き換えるかすればいいでしょう。




行列式の値は分数になっていると思いますよ。代入面積が小数表示なのは、面積の計算式に浮動小数点数が含まれているためです。

それはどこかというと、先頭にある`1/2`です。これは先に計算されて0.5になってしまいます。

代わりに式の最後に2で割るようにするか、これを`Rational(1,2)`に置き換えるかすればいいでしょう。

