# solve() need solution pre-chewed

HI

why do i have to square the two terms of the equation so that solve gives me the solution?

why it does not alow him to do square both sides ?

vL=['x','y','r','x_0','y_0','x_p','y_p','x_t','y_t','atg','btg','alpha']
varL=var(vL)
x_0Num=-1/3 ;y_0Num=-1/4 ;rNum=1

numL=[x_0==x_0Num ,y_0==y_0Num ,r==rNum]

assume(x,'real')
assume(abs(x_0)<1)
assume(abs(y_0)<1)
assume(r>=1)

C_u(x)= sqrt(r^2-x^2)
C_d(x)= -sqrt(r^2-x^2)

delta_p(x)=-x_0/y_0*x + y_0+(x_0^2)/y_0 #perpendicular to circle radial delta_0
assume(delta_p>0)
# numerical solution
SupNum=solve((C_u(x)==delta_p(x)).substitute(numL), x, to_poly_solve=True)

# literal solutions which do not work
SupLit1=solve(C_u(x)== delta_p(x), x, to_poly_solve=True)
SupLit2=solve(C_u(x)== delta_p(x), x,  algorithm='sympy')

# literal solutions ok
SupLit3=solve(C_u(x)^2== (delta_p(x))^2, x,  algorithm='sympy')
SupLit4=solve(C_u(x)^2== (delta_p(x))^2, x, to_poly_solve=True)

show("Sup num : ",SupNum)
show("Sup lit 1 : ", LatexExpr(r" \huge \color{red}  {?? }"),SupLit1)
show("Sup lit 2 : ", LatexExpr(r" \huge \color{red}  {?? }"),SupLit2)
show("Sup lit 3 : ",SupLit3, LatexExpr(r" \huge \color{green}  {OK }"))
show("Sup lit 4 : ",SupLit4, LatexExpr(r" \huge \color{green}  {OK }"))


projection in the other side is easy, but unfortunately the projection matrix is not invertible.

pointInsideCircle=False # projection from outside circle to intside

# alpha is angle between radial vector([(x_0,y_0),(0,0) ]) and tangente line from x_0,y_0 to circle
# (the sides  V_R,V_tg,r form a rectangle triangle)
sin(alpha)=r/sqrt(x_0^2+y_0^2)
cos(alpha)=sqrt(1-sin(alpha)^2)
# we want it directed to the center of the circle so it is multiplyed by -1
V_R0=matrix(SR,[x_0,y_0]).transpose()*-1
#reduction factor because (||V_R||*cos(alpha)=||V_tg||)
reductFactor=cos(alpha)
# rotation matrix and shrink to get tangent vector V_tg
rotM=matrix(SR,[[cos(alpha),-sin(alpha)],[sin(alpha),cos(alpha)]])*reductFactor
# projection Matrix on radial Vector
projectOnRadialVectorM=matrix(SR,[(x_0^2/(x_0^2 + y_0^2), x_0*y_0/(x_0^2 + y_0^2)),
(x_0*y_0/(x_0^2 + y_0^2), y_0^2/(x_0^2 + y_0^2))])

# V_tg is the tangent vector
V_tg=rotM*V_R0

# vector ([[0,0],[x_t,y_t]) from (0,0) to tangent point
V_r=-v_R0+V_tg

# now project the tangent vector on radial Vector

# projected point ProjectPt of [x_0,y_0]= projected vector - radial vector [[x_0,y_0][0,0]
ProjectPt=V_p-V_R

edit retag close merge delete

this is a somewhat strange problem, it is a question of finding the abscissa x_t which corresponds to the point common to the upper semicircle of known radius and has a known line of equation that comes from inside the circle. There is therefore only one point x_t. But to solve the equation we have to square the two sides of the equation and therefore we lose the information that we are looking for the solution in the upper circle and we are left with two solutions. is that probably why the solve () function does not allow itself to be squared?

( 2020-06-22 02:04:31 +0200 )edit

oops no! my comment above is stupid, because if my point x_0 y_0 is in the upper part there could be two possible solutions. finally I don't know why solve doesn't know how to solve literally this equation.

( 2020-06-22 02:17:37 +0200 )edit

blue vector is on delta_p line.

( 2020-06-22 09:13:20 +0200 )edit

Well, I don't know if the function solve () has a problem or not, but I just noticed that my way of proceeding is unnecessarily complicated! It is actually a simple right triangle with a small side sqrt(x_0² + y_0²) and a hypotenuse of length 1 and therefore we deduce the point [x_t, y_t ], where do we take the tangent.

fortunately I have known for a very long time that ridicule does not kill.

( 2020-06-22 13:57:19 +0200 )edit