प्लेन उड़ा


10

ब्लो-अप बीजीय ज्यामिति में एक शक्तिशाली उपकरण है। यह उनकी संरचना के बाकी हिस्सों को संरक्षित करते हुए बीजीय सेट से विलक्षणताओं को हटाने की अनुमति देता है ।

यदि आप किसी से परिचित नहीं हैं, तो चिंता न करें, वास्तविक गणना समझना मुश्किल नहीं है (नीचे देखें)।

निम्नलिखित में हम बिंदु के उड़ा-अप पर विचार कर रहे हैं(0,0)2 डी में एक बीजीय वक्र की। 2 डी में एक बीजीय वक्र एक बहुपद के शून्य-स्थान द्वारा दो चर में दिया जाता है (जैसेp(x,y)=x2+y21 यूनिट सर्कल के लिए, या p(x,y)=yx2एक parabola के लिए)। उस वक्र का प्रहार (में(0,0)) दो बहुपदों द्वारा दिया जाता है आर,रोंजैसा कि नीचे परिभाषित किया गया है। दोनोंआर तथा रों वर्णन करो पी (संभव) विलक्षणता के साथ (0,0) हटा दिया।

चुनौती

कुछ बहुपद को देखते हुए पी, खोजें आर तथा रों जैसा कि नीचे परिभाषित किया गया है।

परिभाषा

सबसे पहले ध्यान दें कि मैं जो कुछ भी कहता हूं, वह सरल है, और वास्तविक परिभाषाओं से पूरी तरह मेल नहीं खाता है।

एक बहुपद को देखते हुए पी दो चर में एक्स,yविस्फोट दो बहुआयामी पद द्वारा दिया जाता हैआर,रों फिर से दो चर में।

लेना आर हम पहले परिभाषित करते हैं आर(एक्स,v): =पी(एक्स,vएक्स)। फिरआर(एक्स,v) शायद का एक बहु है एक्स, अर्थात R(x,v)=xnr(x,v) कुछ के लिए n कहाँ पे x बंटता नहीं है r(x,v)। फिरr(x,v) मूल रूप से विभाजन के बाद क्या रहता है।

अन्य बहुपद को समान रूप से परिभाषित किया गया है, लेकिन हम चर को बदलते हैं: पहला लिखें S(u,y):=p(uy,y)। फिररों इस तरह परिभाषित किया गया है S(u,y)=yms(u,y) कुछ के लिए m कहाँ पे y बंटता नहीं है s(u,y)

इसे स्पष्ट करने के लिए निम्नलिखित पर विचार करें

उदाहरण

के शून्य स्थान द्वारा दिए गए वक्र पर विचार करें पी(एक्स,y)=y2-(1+एक्स)एक्स2। (इसमें एक विलक्षणता है(0,0)क्योंकि उस बिंदु पर कोई अच्छी तरह से परिभाषित स्पर्शरेखा नहीं है। )

तब हम पाते हैं

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

फिर r(x,v)=v21x पहला बहुपद है।

उसी प्रकार

S(u,y)=p(uy,y)=y2(1+uy)u2y2=y2(1(1+uy)u2)

फिर रों(यू,y)=1-(1+यूy)यू2=1-यू2+यू3y

आररों

इनपुट / आउटपुट प्रारूप

( यहाँ भी वही ।) बहुपद को (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। प्रत्येक दिशा में आपको अनुगामी शून्य (उच्च स्तर के गुणांक वाले गुणक जो शून्य हैं) की अनुमति है। यदि यह अधिक सुविधाजनक है, तो आप कंपित सरणियाँ (एक आयताकार एक के बजाय) भी कर सकते हैं, जैसे कि सभी उप-सरणियों में कोई अनुगामी शून्य नहीं होता है।

  • आउटपुट स्वरूप इनपुट प्रारूप के समान है।

उदाहरण

अधिक जोड़ा जाना (अधिक के लिए स्रोत )

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

पी आर रों

उदाहरण w / o चित्र

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
यह शीर्षक निश्चित रूप से ऐसा नहीं है जो मुझे लगा कि यह था ...
नकारात्मक सात

सुझाए गए 0+x+x^2+x^3+x^4
टेस्टकेस

@Cowsquack ने इसे जोड़ा!
दोष

जवाबों:


5

पायथन 3 + सुन्न, 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

इसे ऑनलाइन आज़माएं!

फ़ंक्शन इनपुट के रूप में एक numpy2 डी सरणी लेता है pऔर (r,s)दो numpy2D सरणियों का एक टपल देता है ।

समाधान का टूटना इस प्रकार है। बहुपद की गणना करने के लिएआर, हम प्रत्येक शब्द को फिर से लिखते हैं एक्सजेyमैं का पी में एक्सजे+मैं(yएक्स)मैं, और यह बन जाता है एक्सजे+मैंयूमैं में पी(एक्स,यूएक्स)। तो हम इनपुट को पुनर्व्यवस्थित कर सकते हैं(+1)×(n+1) आव्यूह पी में (+1)×(+n-1) आव्यूह डी तदनुसार पी(एक्स,यूएक्स) व्यवस्थित करके डी[मैं,जे+मैं]=पी[मैं,जे]। तब हम शुरुआत और अंत में सभी-शून्य स्तंभों को समाप्त करते हैंडी एक कमी को पूरा करने और आउटपुट मैट्रिक्स प्राप्त करने के लिए आर के लिये आर

गणना करना रों, हम बस स्वैप करते हैं एक्स तथा yउसी प्रक्रिया को दोहराएं, और फिर उन्हें वापस स्वैप करें। यह कंप्यूटिंग से मेल खाती हैआर के लिये पीटी और फिर परिणाम का संक्रमण करता है।

निम्नलिखित असम्बद्ध कोड उपरोक्त संगणना प्रक्रिया को दर्शाता है।

अघोषित (बेसिक)

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

एपीएल (डायलॉग यूनिकोड) , 38 37 बाइट्स

1 बाइट धन्यवाद बचाया करने के लिए NGN का उपयोग करके +/∘⍴डमी शाब्दिक के स्थान पर0

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

इसे ऑनलाइन आज़माएं!

( ⎕io0 के रूप में सेट के साथ एक ट्रेन )

सही तर्क संलग्न

, के साथ सहमति व्यक्त की

  • ⊂∘ संलग्न

  • सही तर्क दिया

रों पूर्व से गणना की जाती है, आर उत्तरार्द्ध से

¨ प्रत्येक पर

+/∘⍴{ ... } बाएं तर्क के साथ निम्नलिखित कार्य करें

  • +/ योग

      • सही तर्क का आकार, अर्थात पंक्तियाँ + कॉलम प्राप्त करें

और सही तर्क प्रत्येक संलग्न मैट्रीस का होगा।

⍺↑⍵और बाएं तर्क को सही तर्क से कई पंक्तियों को लें , यदि पंक्तियों में कमी है (जो कि यह होगा क्योंकि पंक्तियाँ + स्तंभ> पंक्तियाँ), यह पर्याप्त 0 s के साथ गद्देदार है

प्रतिस्थापन की संगणना vएक्स या यूy की जगह में y या एक्सउनके सूचकांक द्वारा स्तंभों को घुमाकर किया जाता है , और चूंकि 0s के साथ गद्देदार होता है, इसलिए स्तंभों को प्रभावी रूप से 0s की वांछित राशि से पूर्व निर्धारित किया जाता है।

कॉलम घुमाएँ

  • ⍉⍵ स्थानांतरित

  • पंक्तियों को गिनें, सभी एक साथ, ≢⍉⍵स्तंभों की संख्या प्राप्त करते हैं

  • रेंज 0 .. गिनती -1

  • -नकारात्मक रूप से, दूसरी दिशा में घुमाने के लिए और डिफ़ॉल्ट रूप से , 0 ¯1 ¯2 उपजाने के लिए ... - (गिनती -1), यह स्वचालित रूप से प्रत्येक स्तंभ के पार हो जाता है, जैसे कि 0-वें कॉलम को 0 से घुमाया जाता है, 1-द्वारा 1-सेंट, ...

q← इसे वेरिएबल में असाइन करें q

अब सबसे बड़ी शक्ति द्वारा बहुपद को विभाजित करने के लिए एक्स या yअग्रणी सभी 0-पंक्तियों को निकालना होगा।

∨/ प्रत्येक पंक्ति में एलसीएम द्वारा कम करें, यदि पंक्ति सभी-0 s है, तो यह 0 देता है, अन्यथा यह एक सकारात्मक संख्या देता है

×इसका चिन्ह, 00और धनात्मक संख्या → प्राप्त करें 1

सत्य का सूचक, अर्थात 1s का सूचकांक

पहला तत्व चुनें, ⊃⍸बस पहले 1 का सूचकांक मिलता है

q↓⍨से कई पंक्तियों को छोड़ता है q, फिर से अग्रणी सभी -0 पंक्तियों को छोड़ने के लिए सही मान वापस ⎕io←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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.