・斜めの楕円の勉強を開始しました。(後日投稿予定) eigenvalue,ellipse angle?
>...閉じた2次曲線...x,yの範囲に限界があるということだ。... (望星塾 様より)
>...最大でも2次だな... (math karat 様より)
オリジナル1:
(youtube 9:21) math karat 様より 以下内訳
簡単な例 0:00 勉強中
近い例題 3:55 勉強中
本解 5:23 sympyで作成済み(ページ後半)
別解 6:56 〃
オリジナル2:
望星塾 様より
上と同じです。大学入試数学問題集成 様>テキスト【1】
ChatGPT-3.5先生へ(???間違っています。。???)
入力文(一括です。)
座標平面上の点(x,y)が次の方程式をみたす.
2*x**2+4*x*y+3*y**2+4*x+5*y-4=0
このとき、xのとりうる最大の値をもとめよ.
??? 返信抜粋
与えられた方程式は2次の二項式方程式です。この方程式のグラフは楕円を表します。...
...したがって、xのとりうる最大の値は4です。
回転角度を教えて下さい
??? 返信抜粋
...回転角度は0度です。つまり、この楕円はx軸とy軸に平行です。
WolframAlphaで
「陰関数のプロット」がでます。
??? (???間違っています。。???)
sympyで(math karat 様の方法を参考に) 本解:行列式で
「陰関数のプロット」がでます。???
線の太さがでます。もしかして、作図は,最初から数値計算???
・plot_implicit < sympy DOC
https://docs.sympy.org/latest/modules/plotting.html#sympy.plotting.plot_implicit.plot_implicit
・discriminant < sympy DOC
https://docs.sympy.org/latest/modules/polys/reference.html#sympy.polys.polytools.discriminant
from sympy import *
var('x,y',real=True)
eq=Eq(2*x**2+4*x*y+3*y**2+4*x+5*y-4,0)
# plot_implicit(eq)
D=discriminant(eq,y) ;print("#",D )
ge=Ge(D,0) ;print("#",ge)
so=solve(ge) ;print("#",so)
print("#",so.args[0])
# -8*x**2 - 8*x + 73
# -8*x**2 - 8*x + 73 >= 0
# (x <= -1/2 + 5*sqrt(6)/4) & (-5*sqrt(6)/4 - 1/2 <= x)
# x <= -1/2 + 5*sqrt(6)/4
上と同じです。
x,yの最大最小。ユーザー定義関数にしました。常識??? if文がステキです。
from sympy import *
var('x,y',real=True)
def myMinMax(eq,xORy):
D=discriminant(eq,x if xORy==y else y)
ge=Ge(D,0)
so=solve(ge)
return so.args[1],so.args[0]
eq=Eq(2*x**2+4*x*y+3*y**2+4*x+5*y-4,0)
print("#",myMinMax(eq,x))
print("#",myMinMax(eq,y))
# (-5*sqrt(6)/4 - 1/2 <= x, x <= -1/2 + 5*sqrt(6)/4)
# (y <= 2, -3 <= y)
上と同じです。3行を1行にしただけです。 ← 資源の無駄使いするな。最初から、書けよ!!!
from sympy import *
var('x,y',real=True)
def myMinMax(eq,xORy):
so=solve( Ge( discriminant(eq,x if xORy==y else y) ,0) )
return so.args[1],so.args[0]
eq=Eq(2*x**2+4*x*y+3*y**2+4*x+5*y-4,0)
print("#",myMinMax(eq,x))
print("#",myMinMax(eq,y))
# (-5*sqrt(6)/4 - 1/2 <= x, x <= -1/2 + 5*sqrt(6)/4)
# (y <= 2, -3 <= y)
sympyで(math karat 様の方法を参考に) 別解:平方完成 6:56
不等式もsolve関数で。
Gt < sympy DOC
https://docs.sympy.org/latest/modules/core.html#sympy.core.relational.GreaterThan
from sympy import *
var('x,y',real=True)
var('z' ,real=True)
def myBekkai_Saidaiti(z):
a =poly(z,y) .nth(2)
b =poly(z-a*y**2,y).nth(1)/(2*a)
return solve(Ge( -(z-a*(y+b)**2).expand() ,0))
print("#",myBekkai_Saidaiti( 2*x**2+4*x*y+3*y**2+4*x+5*y-4 ) )
# (x <= -1/2 + 5*sqrt(6)/4) & (-5*sqrt(6)/4 - 1/2 <= x)
sympyで(いつものスタイルで) minimum,maximum関数で
・sympyなら、これが楽?でいいですね。手計算は、こうはいきません。
・sympy.simplify.sqrtdenest.sqrtdenest(expr, max_iter=3)
https://docs.sympy.org/latest/modules/simplify/simplify.html#sympy.simplify.sqrtdenest.sqrtdenest
このsqrtdenest関数は、ナカナカの曲者で?←無条件にやってくれよ!!!と思いましたが、
簡略化してほしくないという場合が、あるみたいです。行き過ぎ注意???
from sympy import *
var('x,y',real=True)
myInterval=Interval(-oo,oo)
z =2*x**2+4*x*y+3*y**2+4*x+5*y-4
ans_x=solve(z,x) ;print("#",ans_x)
ans_y=solve(z,y) ;print("#",ans_y)
print()
print("#x",sqrtdenest(minimum( ans_x[0],y,myInterval ) ),",",
sqrtdenest(maximum( ans_x[1],y,myInterval ) ) )
print("#y",sqrtdenest(minimum( ans_y[0],x,myInterval ) ),",",
sqrtdenest(maximum( ans_y[1],x,myInterval ) ) )
# [-y - sqrt(2)*sqrt(-y**2 - y + 6)/2 - 1, -y + sqrt(-2*y**2 - 2*y + 12)/2 - 1]
# [-2*x/3 - sqrt(-8*x**2 - 8*x + 73)/6 - 5/6, -2*x/3 + sqrt(-8*x**2 - 8*x + 73)/6 - 5/6]
#x -5*sqrt(6)/4 - 1/2 , -1/2 + 5*sqrt(6)/4
#y -3 , 2
sympyの実行環境
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
??? タブレット環境で、コピー貼り付けが実行できませんでした。???
参考
以下、いつもの?おすすめです。
以下、いつもと違うおすすめです。