The Pukulan-up adalah alat yang ampuh dalam geometri aljabar. Hal ini memungkinkan penghapusan singularitas dari set aljabar sambil mempertahankan sisa struktur mereka.
Jika Anda tidak terbiasa dengan hal itu, jangan khawatir, perhitungan yang sebenarnya tidak sulit untuk dipahami (lihat di bawah).
Berikut ini kami sedang mempertimbangkan meledakkan titik dari kurva aljabar dalam 2D. Kurva aljabar dalam 2D diberikan oleh nol-lokus polinomial dalam dua variabel (misalnya untuk lingkaran satuan, atau untuk parabola). The blowup kurva yang (di ) diberikan oleh dua polinomial seperti yang didefinisikan di bawah ini. Kedua dan menjelaskan dengan singularitas (mungkin) pada dihapus.
Tantangan
Dengan beberapa polinomial , temukan dan seperti yang didefinisikan di bawah ini.
Definisi
Pertama-tama perhatikan bahwa semua yang saya katakan di sini disederhanakan, dan tidak sepenuhnya sesuai dengan definisi yang sebenarnya.
Mengingat jumlahnya banyak di dua variabel yang blowup diberikan oleh dua polinomial lagi masing-masing dalam dua variabel.
Untuk mendapatkan pertama-tama kita mendefinisikan . Maka mungkin kelipatan , yaitu untuk beberapa mana tidak membagi . Maka pada dasarnya adalah apa yang tersisa setelah pembagian.
Polinomial lain didefinisikan persis sama, tetapi kami mengganti variabel: Pertama tulis . Kemudian didefinisikan sedemikian sehingga untuk beberapa mana tidak membagi .
Untuk membuatnya lebih jelas, pertimbangkan untuk mengikuti
Contoh
Pertimbangkan kurva yang diberikan oleh nol locus . (Ini memiliki singularitas pada karena tidak ada garis singgung yang didefinisikan dengan baik pada saat itu.)
Lalu kita temukan
Demikian pula
Format Input / Output
(Sama seperti di sini .) Polinomial diwakili diberikan sebagai (m+1) x (n+1)
matriks / daftar daftar koefisien integer, dalam contoh di bawah ini syarat-syarat koefisien diberikan dalam posisi mereka:
[ 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]
Jadi elips 0 = x^2 + 2y^2 -1
akan diwakili sebagai
[[-1, 0, 1],
[ 0, 0, 0],
[ 2, 0, 0]]
Jika mau, Anda juga dapat menukar x
dan y
. Di setiap arah Anda diizinkan memiliki angka nol (misalnya koefisien derajat lebih tinggi yang hanya nol). Jika lebih nyaman, Anda juga dapat memiliki array yang terhuyung-huyung (bukan yang persegi panjang) sehingga semua sub-array tidak mengandung nol tambahan.
- Format output sama dengan format input.
Contohnya
Lebih banyak untuk ditambahkan ( sumber untuk lebih )
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
Contohnya tanpa gambar
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]]
0+x+x^2+x^3+x^4
Jawaban:
Python 3 + numpy,
165134 byteCobalah online!
Fungsi ini mengambil satu
numpy
larik 2Dp
sebagai input dan mengembalikan tupel(r,s)
duanumpy
larik 2D.Kode ungolfed berikut menunjukkan proses perhitungan di atas.
Tidak Disatukan (Dasar)
Cobalah online!
Tidak Disatukan (Ditingkatkan)
Cobalah online!
sumber
APL (Dyalog Unicode) ,
3837 byte1 byte disimpan berkat Ngn dengan menggunakan
+/∘⍴
pengganti dummy literal0
Cobalah online!
(kereta dengan
⎕io
(indeks asal) ditetapkan sebagai 0)⊂
argumen benar terlampir,
digabungkan dengan⊂∘
tertutup⍉
argumen kanan yang dialihkan¨
pada setiap+/∘⍴{ ... }
melakukan fungsi berikut dengan argumen kiri+/
jumlah⍴
bentuk argumen yang tepat, yaitu dapatkan baris + kolomdan argumen yang tepat adalah masing-masing dari matriks terlampir.
⍺↑⍵
dan ambil argumen kiri⍺
banyak baris dari argumen kanan⍵
, jika⍵
kekurangan dalam baris (yang akan karena baris + kolom> baris), itu diisi dengan 0s cukup⍵
⍵
⍵
⊖
putar kolom dengan⍉⍵
ditransposisikan⍵
≢
hitung baris, semuanya,≢⍉⍵
mendapat jumlah kolom⍵
⍳
range 0 .. count-1-
dinegasikan, untuk memutar ke arah lain dan default untuk⊖
, untuk akhirnya menghasilkan 0 ¯ 1 ... - (hitung-1), ini secara otomatis vektor di setiap kolom sehingga kolom ke-0 diputar oleh 0, 1-st dengan 1, ...q←
tetapkan ini ke variabelq
∨/
dikurangi dengan LCM di setiap baris, jika barisnya adalah semua-0s, ini menghasilkan 0, jika tidak maka akan memberikan angka positif×
dapatkan tandanya,0
→0
dan angka positif →1
⍸
indeks kebenaran, yaitu indeks 1s⊃
pilih elemen pertama,⊃⍸
cukup dapatkan indeks dari 1 pertamaq↓⍨
turun dari banyak barisq
, sekali lagi⎕io←0
membantu⍸
mengembalikan nilai yang benar untuk menjatuhkan semua-0 baris utama(fungsi keluar)
⊢∘⍉\
Pendekatan lain tercantum di bawah ini.
sumber