หมุนรูต


11

ให้พหุนามที่ไม่ใช่ศูนย์ที่มีค่าสัมประสิทธิ์จำนวนเต็มและรากที่อยู่ในจินตภาพและในเส้นจริงเช่นถ้าaเป็นรากดังนั้นเป็นเช่นนั้น-aกลับพหุนามอีกด้วยรากหมุนด้วย 90 องศา

รายละเอียด

พหุนามสามารถให้ในรูปแบบที่สมเหตุสมผลเช่นเป็นรายการของค่าสัมประสิทธิ์ เงื่อนไขสมมาตรที่aเป็นรูตหากว่าหาก-aรูทนั้นเกินไปบังคับให้พหุนามหมุนได้มีค่าสัมประสิทธิ์จำนวนเต็มจริงเช่นกัน

ตัวอย่าง

ในชื่อพหุนามมีดังต่อไปนี้เป็นรายการของสัมประสิทธิ์ของชื่อในระดับจากมากไปหาน้อย (คืออย่างต่อเนื่องมาแล้ว) พหุนามมีรากx^2-1 {1,-1}หมุนพวกเขาโดย90°วิธีการคูณด้วยi(หน่วยจินตภาพ) ดังนั้นพหุนามการส่งออกควรจะมีรากซึ่งเป็น{i,-i}x^2 + 1

Input / Output
[1 0 10 0 -127 0 -460 0 576]  [1 0 -10 0 -127 0 460 0 576]
[1 0 -4 0] [1 0 4 0]
[1] [1]

ฉันขอเรียนในระดับพหุนามและพหุนามได้ไหม
Rohan Jhunjhunwala

ใช่ฉันคิดว่าเป็นที่ยอมรับ
ข้อบกพร่อง

ตัวอย่างทั้งหมดของคุณใช้พหุนาม monic เราสามารถสมมติว่าพหุนามป้อนเข้าจะเป็น monic ได้หรือไม่? พหุนามผลลัพธ์จะต้องเป็นแบบโมโนหรือไม่?
เดนนิส

ไม่มันสามารถมีค่าสัมประสิทธิ์นำอื่น ๆ ได้มากกว่า 1 และเอาท์พุทก็แค่นิยามขึ้นเป็นทวีคูณ
ข้อบกพร่อง

ดูเหมือนว่ารูปแบบไม่จำเป็นต้องเป็นรายการของค่าสัมประสิทธิ์ รูปแบบที่เหมาะสมไปไกลแค่ไหน? รูปแบบของฉันสามารถเป็นนิพจน์สตริงในระยะเวลาที่กำหนดxดังนั้นการส่งของฉันสามารถแทนที่xด้วยสตริงได้(i*x)หรือไม่ ฉันสามารถจัดรูปแบบฟังก์ชันที่ประเมินพหุนามเพื่อให้การส่งของฉันคือการเขียนด้วยฟังก์ชันได้x -> i*xหรือไม่
xnor

คำตอบ:


12

Mathematica ขนาด 10 ไบต์

ฟังก์ชั่นบริสุทธิ์ซึ่งใช้ฟังก์ชั่นของ x และทดแทนใน ix

#/.x->I*x&

ทางเลือกที่มีเพียง 7 ไบต์ แต่ไม่ค่อยแน่ใจว่าจะนับหรือไม่ ฟังก์ชั่นเพียวซึ่งใช้ในฟังก์ชั่นบริสุทธิ์และส่งกลับฟังก์ชั่นของ x

#[I*x]&

5
และคุณไม่จำเป็นต้องมี buildins!
Neil

ฉันค่อนข้างแน่ใจว่าฟังก์ชันพหุนามล้วนเป็น "รูปแบบที่สมเหตุสมผล" (เหมือนที่นี่ ) มันใช้#เป็นตัวแปรและมี&จุดสิ้นสุด
JungHwan Min

ฉันต้องการโหวตสองครั้งถ้าทำได้
Greg Martin

ข้อกังวลเดียวของฉันเกี่ยวกับคำตอบที่สองคือความไม่ตรงกันระหว่างอินพุต (ฟังก์ชันบริสุทธิ์) และเอาต์พุต (ฟังก์ชันของ x)
เอียนมิลเลอร์

6

เยลลี่ 5 ไบต์

Jı*Ċ×

ลองออนไลน์!

มันทำงานอย่างไร

คูณองค์ประกอบแรกด้วยองค์ประกอบ1ที่สามโดย-1เป็นต้น

Jı*Ċ×  argument: z
J      [1,2,...,len(z)]
 ı     i (the imaginary unit)
  *    to the power of (each element)
   Ċ   imaginary part
    ×  multiply by input (vectorize)

หลักฐานของอัลกอริทึม

f(x)ให้ได้รับการพหุนาม

เนื่องจากเราได้รับการรับรองว่าหากxเป็นราก-xดังนั้นfต้องเป็นเช่นนั้นดังนั้นจึงต้องเป็น0อย่างสม่ำเสมอซึ่งหมายความว่าสัมประสิทธิ์ของมันสำหรับพลังแปลก ๆ จะต้องเป็นเช่นนั้น

ตอนนี้หมุนรากโดยเป็นหลัก90°f(ix)

การขยายค่าสัมประสิทธิ์การเปรียบเทียบนั้นพิสูจน์อัลกอริทึม


ดังนั้นเราไม่จำเป็นต้องแตะที่ 2,4th, 6, 8 เป็นต้น?
Rohan Jhunjhunwala

2
นั่นเป็นศูนย์อยู่แล้ว
ข้อบกพร่อง

เล่ห์เหลี่ยมของคุณı*Ċดีมากคุณควรอธิบายให้ดี :)
Leo

@Leo มันเป็นหลักการดำเนินการตรงไปตรงมา แต่ ...
รั่วนูน

ตรรกะที่นี่ไม่ถูกต้องเพราะคุณแทนสามารถมีค่าสัมประสิทธิ์ทั้งหมดแม้กระทั่งอำนาจเป็น 0
Orjan ฮันเซน

5

JavaScript (ES6), 25 ไบต์

a=>a.map((e,i)=>i%4?-e:e)

พหุนามดั้งเดิมมีวิธีแก้ปัญหาของแบบฟอร์มx = ±aที่อยู่บนเส้นจริงหรือจินตภาพ ยกเว้นเมื่อa = 0(ในกรณีนี้xคือปัจจัยของพหุนาม) นี่หมายความว่าx² - a²เป็นปัจจัยของพหุนาม (ซึ่งหมายถึงคำอื่น ๆ มักเป็นศูนย์เสมอ) x² + a²ตอนนี้เมื่อเราหมุนรากปัจจัยที่มีการเปลี่ยนแปลงไป เนื่องจากปัจจัยทั้งหมดมีการเปลี่ยนแปลงในเวลาเดียวกันเทอมที่สามของพหุนามซึ่งเป็นผลรวมของ-a²คำศัพท์ทั้งหมดเครื่องหมายการเปลี่ยนแปลงเทอมที่ห้าซึ่งเป็นผลรวมของผลคูณของคู่-a²คำยังคงเครื่องหมายเดียวกัน ฯลฯ สลับกันทุกเทอม


4

ระดับเสียงคู่ , 27 ไบต์

@(x)round(poly(roots(x)*j))

ลองออนไลน์!

นี่ใช้คำจำกัดความโดยตรง: คำนวณรากคูณด้วยjแปลงกลับจากรากเป็นพหุนาม การปัดเศษครั้งสุดท้ายเป็นสิ่งที่จำเป็นเนื่องจากข้อผิดพลาดที่เป็นตัวเลขทศนิยม



1

SILOS , 71 66 ไบต์

readIO
b=i
lbla
readIO
d=c
d&2
i=i*(1-d)
printInt i
b-1
c+1
if b a

ลองออนไลน์!

ฉันไม่มีเงื่อนงำสิ่งที่พ่อมด @Leaky Nun ทำที่นี่เพื่อบันทึก 5 ไบต์

เอาฉันวินาทีเพื่อหา แต่บิตที่สองของ C จะสลับกันตามที่เราต้องการ ดังนั้น @Leaky Nun ใช้สิ่งนี้เพื่อบันทึกบิตที่เราต้องการ



0

TI-Basic, 20 ไบต์

seq(real(i^X/i)Ans(X),X,1,dim(Ans

หากเก็บไว้ในprgmAเรียกใช้ด้วย:

{1, 0, 3, 0, 1}:prgmA

seq(เพียงแค่ต้องเป็นหนึ่งคำสั่ง * ที่ไม่สนับสนุนจำนวนเชิงซ้อน :)

*: พูดเกินจริง


0

คาสิโอ - เบสิค 8 ไบต์

n|x=𝑖x

ฟังก์ชันที่ไม่มีชื่อโดยใช้วิธี Mathematica ของ Ian Miller ต้องใช้จินตภาพ𝑖จากแป้นพิมพ์ Math2 (นับเป็น 2 ไบต์, รหัสถ่าน 769) และป้อนชื่อพหุนามเป็นสมการxและพหุนามที่ควรจะเข้ามาเป็นสมการของ

7 ไบต์สำหรับโค้ด, 1 ไบต์เพื่อระบุnเป็นพารามิเตอร์

คำอธิบาย : นำสมการnแล้วก็แทนที่ทุกกรณีด้วยx𝑖x



0

Stax , 5 ไบต์

Æ[]▐↨

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

พอร์ตของคำตอบของเยลลี่

ใช้การเป็นตัวแทน ASCII เพื่ออธิบาย:

mih|1*
m         Map each element with rest of program, print mapped results on individual lines
 i        Current 0-based loop index
  h       Floor(i/2)
   |1     (-1)^(i/2)
     *    Multiply with current element

หากสามารถมีศูนย์นำหน้าพวกเขาจะต้องถูกตัดแต่งก่อนและสามารถทำได้ในราคาของไบต์อื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.