비행기


10

블로우 업 대수 기하학에서 강력한 도구입니다. 그것은 나머지 구조를 보존하면서 대수 세트 에서 특이점 을 제거 할 수 있습니다 .

걱정하지 않는 것에 익숙하지 않으면 실제 계산을 이해하기 어렵지 않습니다 (아래 참조).

다음에서 우리는 포인트 의 폭파를 고려하고 있습니다.(0,0)2D에서 대수 곡선의 2D의 대수 곡선은 두 변수에서 다항식의 영점에 의해 주어진다 (예 :(엑스,와이)=엑스2+와이21 단위 원 또는 (엑스,와이)=와이엑스2포물선을 위해). 그 곡선 의 폭발(0,0))는 두 개의 다항식으로 제공됩니다. 아르 자형,에스아래에 정의 된대로. 양자 모두아르 자형에스 설명하다 (가능한) 특이점으로 (0,0) 제거되었습니다.

도전

다항식이 주어지면 , 찾기 아르 자형에스 아래에 정의 된대로.

정의

우선 내가 여기서 말하는 모든 것은 단순화되었으며 실제 정의와 완전히 일치하지는 않습니다.

다항식이 주어짐 두 변수로 엑스,와이파열은 두 다항식 주어진다아르 자형,에스 다시 두 변수에 각각.

얻기 위해 아르 자형 우리는 먼저 정의 아르 자형(엑스,V): =(엑스,V엑스). 그때아르 자형(엑스,V) 아마 배수 엑스아르 자형(엑스,V)=엑스아르 자형(엑스,V) 일부 어디 엑스 나누지 않는다 아르 자형(엑스,V). 그때아르 자형(엑스,V) 기본적으로 분할 후 남은 것입니다.

다른 다항식은 정확히 동일하게 정의되지만 변수를 전환합니다 : 첫 번째 쓰기 에스(,와이): =(와이,와이). 그때에스 다음과 같이 정의됩니다 에스(,와이)=와이미디엄에스(,와이) 일부 미디엄 어디 와이 나누지 않는다 s(u,y).

명확하게하기 위해 다음을 고려하십시오.

제로 로커스에 의해 주어진 곡선을 고려하십시오 p(x,y)=y2(1+x)x2. (에 특이점이 있습니다.(0,0)이 시점에서 잘 정의 된 탄젠트가 없기 때문입니다. )

그런 다음 우리는 발견

R(x,v)=p(x,vx)=v2x2(1+x)x2=x2(v21x)

그때 r(x,v)=v21엑스 첫 번째 다항식입니다.

비슷하게

에스(,와이)=(와이,와이)=와이2(1+와이)2와이2=와이2(1(1+와이)2)

그때 에스(,와이)=1(1+와이)2=12+와이.

아르 자형에스

입출력 형식

( 여기서 와 동일 ) 다항식은 (m+1) x (n+1)정수 계수 목록의 행렬 / 목록으로 표시됩니다. 아래 예에서 계수의 항은 해당 위치에 제공됩니다.

[   1 * 1,   1 * x,   1 * x^2,   1 * x^3,  ... , 1 * x^n ]
[   y * 1,   y * x,   y * x^2,   y * x^4,  ... , y * x^n ]
[   ...  ,   ...   ,   ...   ,    ...   ,  ... ,   ...   ]
[ y^m * 1, y^m * x, y^m * x^2, y^m * x^3 , ..., y^m * x^n]

타원 0 = x^2 + 2y^2 -1

[[-1, 0, 1],
 [ 0, 0, 0],
 [ 2, 0, 0]]

원하는 경우 x및 을 교환 할 수도 있습니다 y. 각 방향에서 후행 0을 가질 수 있습니다 (즉, 단지 0 인 더 높은 도의 계수). 더 편리한 경우 모든 하위 하위 배열에 후행 0이 포함되지 않도록 직사각형 배열 대신 배열을 엇갈리게 배치 할 수도 있습니다.

  • 출력 형식은 입력 형식과 동일합니다.

더 추가 ( 더 많은 소스 )

Trifolium
p(x,y) = (x^2 + y^2)^2 - (x^3 - 3xy^2)
r(x,v) = v^4  x + 2  v^2  x + x + 3  v^2 - 1
s(u,y) = u^4  y + 2  u^2  y + y - u^3 + 3  u

피 아르 자형 에스

Descartes Folium
p(x,y) = y^3 - 3xy + x^3
r(x,v) = v^3  x + x - 3v
s(u,y) = u^3  y + y - 3u

피 아르 자형 에스

그림이없는 예

Trifolium:
p:
[[0,0,0,-1,1],
 [0,0,0, 0,0],
 [0,3,2, 0,0],
 [0,0,0, 0,0],
 [1,0,0, 0,0]]
r: (using the "down" dimension for v instead of y)
[[-1,1],
 [ 0,0],
 [ 3,2],
 [ 0,0],
 [ 0,1]]
s: (using the "right" dimension for u instead of x)
[[0,3,0,-1,0],
 [1,0,2, 0,1]]

Descartes Folium:
p:
[[0, 0,0,1],
 [0,-3,0,0],
 [0, 0,0,0],
 [1, 0,0,0]]
r:
[[ 0,1],
 [-3,0],
 [ 0,0],
 [ 0,1]]
s:
[[0,-3,0,0],
 [1, 0,0,1]]

Lemniscate:
p: 
[[0,0,-1,0,1],
 [0,0, 0,0,0],
 [1,0, 0,0,0]]
r:
[[-1,0,1],
 [ 0,0,0],
 [ 1,0,0]]
s:
[[1,0,-1,0,0],
 [0,0, 0,0,0],
 [0,0, 0,0,1]]

Powers:
p:
[[0,1,1,1,1]]

r:
[[1,1,1,1]]

s:
[[0,1,0,0,0],
 [0,0,1,0,0],
 [0,0,0,1,0],
 [0,0,0,0,1]]

7
이 제목은 제가 생각했던 것과는
negative seven

권장 테스트 케이스 :0+x+x^2+x^3+x^4
user41805

@Cowsquack 추가했습니다!
flawr

답변:


5

파이썬 3 + NumPy와, 165 134 바이트

lambda p:(r(p),r(p.T).T)
from numpy import*
def r(p):w,l=where(p);s=w+l;n=min(s);o=zeros((len(p),max(s)-n+1));o[w,s-n]=p[w,l];return o

온라인으로 사용해보십시오!

이 함수는 하나의 numpy2D 배열을 사용합니다p 을 입력으로 받아서 (r,s)두 개의 튜플을 반환합니다.numpy 2D 배열 합니다.

솔루션의 분석은 다음과 같습니다. 다항식을 계산하려면아르 자형각 용어를 다시 작성합니다 엑스제이와이나는 으로 엑스제이+나는(와이엑스)나는그리고 엑스제이+나는나는(엑스,엑스). 입력을 다시 정렬 할 수 있습니다(미디엄+1)×(+1) 매트릭스 (미디엄+1)×(미디엄+1) 매트릭스 에 해당하는 (엑스,엑스) 설정하여 [나는,제이+나는]=[나는,제이]. 그런 다음 시작과 끝에서 모두 0 열을 제거합니다. 축소를 수행하고 출력 행렬을 얻는 방법 아르 자형 ...에 대한 아르 자형.

계산하기 에스우리는 단순히 교환 엑스와이동일한 프로세스를 반복 한 다음 다시 바꿉니다. 이것은 컴퓨팅에 해당합니다아르 자형 ...에 대한 그런 다음 결과를 바꿉니다.

다음 ungolfed 코드는 위의 계산 프로세스를 보여줍니다.

언 골프 (기본)

import numpy as np

def r(p):
    num_rows, num_cols = p.shape
    deg_mat = np.zeros((num_rows, num_rows + num_cols - 1))
    for i, row in enumerate(p):
        deg_mat[i, i:i+num_cols] = row
    non_zero_col_idx, = np.where(deg_mat.any(axis=0))
    return deg_mat[:,non_zero_col_idx.min():non_zero_col_idx.max()+1]

def rs(p):
    return r(p), r(p.T).T

온라인으로 사용해보십시오!

솔루션의 추가 개선은 매트릭스를 계산 아르 자형 한 번의 패스로 아르 자형[나는,제이+나는]=[나는,제이], 어디 =[나는,제이]0나는+제이.

언 골프 (개선)

import numpy as np

def r(p):
    y_deg, x_deg = np.where(p)  # Retrieve degrees of y and x for non-zero elements in p
    total_deg = y_deg + x_deg
    min_total_deg = total_deg.min()
    max_total_deg = total_deg.max()
    out = np.zeros((p.shape[0], max_total_deg - min_total_deg + 1))
    out[y_deg, y_deg + x_deg - min_total_deg] = p[y_deg, x_deg]
    return out

def rs(p):
    return r(p), r(p.T).T

온라인으로 사용해보십시오!


3

APL (Dyalog Unicode) , 38 37 바이트

더미 리터럴 대신 사용하여 ngn 덕분에 1 바이트 절약+/∘⍴0

⊢∘⍉\+/∘⍴{q↓⍨⊃⍸×∨/q←(-⍳≢⍉⍵)⊖⍺↑⍵}¨⊂,⊂∘⍉

온라인으로 사용해보십시오!

( ⎕io(인덱스 원점)이 0으로 설정된 열차 )

옳은 논쟁

, 연결

  • ⊂∘ 에워싸는

  • 바른 주장

에스 전자에서 계산 된 아르 자형 후자에서

¨ 각각에

+/∘⍴{ ... } 왼쪽 인수로 다음 기능을 수행하십시오.

  • +/ 합집합

      • 올바른 인수의 형태, 즉 행 + 열을 얻는다

올바른 인수는 각각의 동봉 된 행렬입니다.

⍺↑⍵행 에 부족한 경우 (행 + 열> 행이기 때문에) 왼쪽 인수를 오른쪽 인수에서 여러 행으로 가져옵니다. 충분한 0으로 채워집니다

치환의 계산 V엑스 또는 와이 대신에 와이 또는 엑스인덱스는 인덱스를 기준으로 열을 회전하여 수행되며 0으로 채워 지므로 원하는 양의 0이 열 앞에 효과적으로 추가됩니다.

열을 회전

  • ⍉⍵ 전치

  • 행 수를 모두 합하여 ≢⍉⍵열 수를 가져옵니다.

  • 범위 0 .. 카운트 -1

  • -부정적으로, 다른 방향으로 회전하고 기본값을 0으로 설정 하면 궁극적으로 0 ¯1 ¯2 ...-(count-1)이되며, 이는 0 번째 열이 0만큼 회전하도록 각 열에서 자동으로 벡터화됩니다. 1 일 1 일 ...

q← 이것을 변수에 할당 q

이제 다항식을 최대의 거듭 제곱으로 나눕니다. 엑스 또는 와이, 선행 0 행을 모두 제거해야합니다.

∨/ 행이 모두 0 인 경우 각 행에서 LCM으로 줄이면 0이되고 그렇지 않으면 양수가됩니다.

×부호를 확인 0→ → 0양수 → 1

진리의 지표, 즉 1의 지수

첫 번째 요소를 선택하고 ⊃⍸단순히 첫 번째 요소 의 색인을 가져옵니다 1

q↓⍨에서 많은 행을 삭제하고 q다시 ⎕io←0도움이됩니다. 모든 0 행을 삭제하기위한 올바른 값을 반환하는

(종료 기능)

에스 이미 달성했다 아르 자형 두 번째 값은 ⊢∘⍉\


다른 접근 방식은 다음과 같습니다.

⍝(⊢∘⍉\+/∘⍴{q↓⍨⊃⍸×∨/q←(-⍳≢⍉⍵)⊖⍺↑⍵}¨⊂,⊂∘⍉)¨a
⍝(⊢∘⍉\∘⌽⍴{q↓⍨⊃⍸×∨/q←(-⍳⍺)⊖⍵↑⍨+/⍴⍵}¨⊂∘⍉,⊂)¨a
⍝(⊢∘⍉\⌽∘⍴{q↓⍨⊃⍸×∨/q←(-⍳⍺)⊖⍵↑⍨+/⍴⍵}¨⊂,⊂∘⍉)¨a
⍝(⊢∘⍉\0{q↓⍨⊃⍸×∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⊂,⊂∘⍉)¨a
⍝(⊢∘⍉\+/∘⍴({⍵↓⍨⊃⍸×∨/⍵}(-∘⍳1⊃⊢∘⍴)⊖↑)¨⊂,⊂∘⍉)¨a
⍝(⊂∘⍉∘⊃@0⍴{q↓⍨⊃⍸×∨/q←(-⍳⍺)⊖⍵↑⍨+/⍴⍵}¨⊂∘⍉,⊂)¨a
⍝{⊢∘⍉\{q↓⍨⊃⍸×∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
⍝(⊢∘⍉\(({⍵↓⍨⊃⍸×∨/⍵}(-∘⍳1⊃⍴)⊖⊢↑⍨1⊥⍴)¨⊂,⊂∘⍉))¨a
⍝(0 1{⍉⍣⍺⊢q↓⍨⊃⍸×∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⊂,⊂∘⍉)¨a
⍝{⊢∘⍉\{q[;⍸×∨\∨q←↑(,\0⍴⍨≢⍵),¨↓⍵]}¨⍵(⍉⍵)}¨a
⍝{⊢∘⍉\{q↓⍨1⍳⍨×∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
⍝(⊢∘⍉\(((⊢↓⍨1⍳⍨0≠∨/)(-∘⍳1⊃⍴)⊖⊢↑⍨1⊥⍴)¨⊂,⊂∘⍉))¨a
⍝{⊢∘⍉\{q[⍸×∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵;]}¨⍵(⍉⍵)}¨a
⍝{⊢∘⍉\{q↓⍨+/0=∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
⍝{⊢∘⍉\{q↓⍨⌊/+⌿∧⍀0=q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
⍝(⌽∘⍉¨1↓({⊖⍉q[⍸×∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵;]}\3/⊂))¨a
⍝{⊢∘⍉\{↑(↓q)/⍨∨∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
f←⊢∘⍉\⋄{f{q[⍸×∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵;]}¨f⍵⍵}¨a
⍝{1↓⌽∘⍉¨{⊖⍉q[⍸×∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵;]}\3/⊂⍵}¨a
⍝{f←{q[⍸×∨\∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵;]}⋄(f⍵)(⍉f⍉⍵)}¨a
⍝{⊢∘⍉\{↑(↓q)/⍨∨\0≠∨/q←(-⍳≢⍉⍵)⊖⍵↑⍨+/⍴⍵}¨⍵(⍉⍵)}¨a
⍝{⊢∘⍉\{(0~⍨∊⍵)@(↓⍉(⊢-⌊/)@1+⍀⍉↑⍸0≠⍵)⊢0⍴⍨,⍨⌈/⍴⍵}¨⍵(⍉⍵)}¨a
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.