Transformasi Laplace polinomial

Dec 26 2020

Ini adalah repost dari tantangan ini , dimaksudkan untuk mengubahnya menjadi format I / O yang lebih longgar dan aturan yang diperbarui

Anda harus menulis program yang mengambil polinomial integer di \$t\$sebagai input dan output transformasi Laplace dari polinomial ini. Beberapa definisi dan properti:

  • Transformasi Laplace dari fungsi tertentu \$f(t)\$ aku s

$$\mathcal{L}\{f(t)\} = F(s) = \int_0^\infty f(t)e^{-st}dt$$

  • Transformasi Laplace dari \$f(t) = t^n, \, n = 0, 1, 2, ...\$ aku s

$$\mathcal{L}\{t^n\} = \frac{n!}{s^{n+1}}$$

  • Transformasi Laplace didistribusikan di atas penambahan:

$$\mathcal{L}\{f(t)+g(t)\} = \mathcal{L}\{f(t)\} + \mathcal{L}\{g(t)\}$$

  • Transformasi Laplace dari konstanta dikalikan dengan fungsi sama dengan konstanta dikalikan dengan transformasi:

$$\mathcal{L}\{af(t)\} = a\mathcal{L}\{f(t)\}$$

  • Polinomial bilangan bulat adalah polinomial yang setiap suku memiliki koefisien bilangan bulat, dan urutan non-negatif

Contoh yang berhasil:

$$\begin{align} \mathcal{L}\{3t^4+2t^2+t-4\} & = \mathcal{L}\{3t^4\}+\mathcal{L}\{2t^2\}+\mathcal{L}\{t\}-\mathcal{L}\{4\} \\ & = 3\mathcal{L}\{t^4\}+2\mathcal{L}\{t^2\}+\mathcal{L}\{t\}-4\mathcal{L}\{1\} \\ & = 3\left(\frac{4!}{s^5}\right)+2\left(\frac{2!}{s^3}\right)+\left(\frac{1!}{s^2}\right)-4\left(\frac{0!}{s}\right) \\ & = \frac{72}{s^5}+\frac{4}{s^3}+\frac{1}{s^2}-\frac{4}{s} \end{align}$$


Anda dapat memasukkan masukan dalam representasi standar polinomial. Beberapa contoh (untuk \$3x^4+2x^2+x-4\$ sebagai contoh) adalah:

  • Daftar koefisien. [-4, 1, 2, 0, 3]atau[3, 0, 2, 1, -4]
  • Pasangan koefisien dan pangkat. [[3, 4], [2, 2], [1, 1], [-4, 0]]dan berbagai macam pemesanan
  • Sebuah string, menggunakan variabel apa pun yang Anda suka. 3x^4+2x^2+x-4

Demikian pula, karena keluarannya berupa polinomial dengan urutan negatif, Anda dapat mengeluarkan dalam format yang serupa, seperti (menggunakan \$\mathcal{L}\{3x^4+2x^2+x-4\} = \frac{72}{s^5}+\frac4{s^3}+\frac1{s^2}-\frac4s\$):

  • Daftar koefisien. [72, 0, 4, 1, -4]atau[-4, 1, 4, 0, 72]
  • Pasangan koefisien dan pangkat. [[72, -5], [4, -3], [1, -2], [-4, -1]]dan berbagai urutan berbeda (atau versi positif dari kekuatan)
  • Sebuah string, menggunakan variabel apa pun yang Anda suka. 72s^-5+4s^-3+s^-2-4s^-1

Jika Anda memiliki metode I / O alternatif yang tidak Anda yakini, silakan beri komentar di bawah ini untuk bertanya.

Ini adalah kode-golf jadi kode terpendek dalam byte menang.

Jawaban

7 xnor Dec 26 2020 at 08:42

Haskell , 25 byte

zipWith(*)$scanl(*)1[1..]

Cobalah secara online!

Cukup mudah: Menghasilkan daftar faktorial [1,1,2,6,...]dengan a scanl, lalu zipWith(*)mengalikan setiap elemen input dengan nilai yang sesuai.

32 byte

foldr(\(i,x)r->x:map((i+1)*)r)[]

Cobalah secara online!

Solusi berbasis lipat yang cantik. Mengambil masukan sebagai (exponent, coefficient)pasangan.

6 xash Dec 26 2020 at 06:50

menyampaikan , 15 byte

v"*<
0+1"
 1{*}

Cobalah secara online!

Dua kolom kiri menyalin "1, 2, 3,… ke atas *. Nilai di kanan atas dikalikan dengan itu setiap putaran, jadi kami mendapatkan (mulai dengan tambahan 1 = 0!) 1 !, 2 !, 3 !,… disalin ke bagian bawah *. {membaca masukan, mengalikannya dengan faktorial dan mengeluarkannya }.

5 GioD Dec 26 2020 at 12:34

Jelly , 4 byte

J’!×

Mengambil masukan sebagai daftar koefisien.

Penjelasan

J’!×

J   | Returns an array of elements from 1 to length of input array
 ’  | Subtracts 1 from each
  ! | Factorial each
   ×| Multiply each item in the original array by the created array

Cobalah secara online!

5 Bubbler Dec 28 2020 at 13:02

APL (Dyalog Unicode) , 3 byte

×∘!

Cobalah secara online!

Membawa I / O liberal secara ekstrem: menggunakan polinomial \$ 3x^4 + 2x^2+x-4 \$sebagai dua argumen, koefisien di kiri dan pangkat di kanan dalam urutan menurun dan termasuk suku nol, seperti pada 3 0 2 1 ¯4 f 4 3 2 1 0. Mengembalikan polinomial sebagai vektor koefisien.

4 ZaelinGoodman Dec 28 2020 at 22:48

PowerShell , 28 byte

Masukkan sebagai daftar koefisien

$p++;$args|%{$p*$_;$p*=++$i}

Cobalah secara online!

3 Razetime Dec 26 2020 at 12:56

APL (Dyalog Unicode) , 7 byte

⊢×!∘⍳∘≢

Cobalah secara online!

Kegunaan ⎕IO←0(0-pengindeksan)

Masukkan sebagai daftar koefisien.

3 att Dec 26 2020 at 09:44

Bahasa Wolfram (Mathematica) , 10 byte

#2!#&@@@#&

Cobalah secara online!

Masukkan daftar pasangan koefisien / daya, termasuk koefisien nol, diurutkan berdasarkan daya, dan keluarkan daftar koefisien yang sesuai.


Built-in lebih panjang: 23 byte

LaplaceTransform[#,t,]&

Cobalah secara online!

Masukkan polinomial dalam suku t, dan keluaran satu suku Null.

2 Neil Dec 26 2020 at 06:40

Retina , 30 byte

L$`.+ $&$:&* +`\d+_ $.(*$(_$%'

Cobalah secara online! I / O adalah daftar koefisien yang dipisahkan baris baru dari tingkat terendah hingga tertinggi. Penjelasan:

L$`.+ $&$:&*

Untuk setiap koefisien, tambahkan sejumlah garis bawah yang sama dengan derajatnya.

+`\d+_
$.(*$(_$%'

Sampai tidak ada garis bawah yang tersisa, kalikan setiap koefisien dengan jumlah garis bawah berikut, menghapus satu dalam proses.

2 user Dec 26 2020 at 06:36

Scala 3, 52 48 byte

p=>p.indices.scanLeft(1)(_*_.+(1))zip p map(_*_)

Cobalah secara online!

Input dan output sebagai daftar bilangan bulat, dari derajat terendah hingga tertinggi.

p.indicesmemberi kita rentang dari 0 hingga p.size - 1. Pemindaian ke kiri dengan perkalian memberikan faktorial pada setiap indeks, tetapi karena elemen pertama adalah 0, kita perlu menambahkan 1 (karenanya _.+(1)). Kemudian semua faktorial dikompresi dengan koefisien dan dikalikan bersama.

2 xnor Dec 26 2020 at 08:27

Python 2 , 39 byte

p=i=1
while 1:print p*input();p*=i;i+=1

Cobalah secara online!

Input dan output adalah koefisien, satu per baris, dimulai dengan derajat terkecil (nol terdekat).

Mengambil (coefficient, exponent)berpasangan ternyata sedikit lebih lama.

p=1
while 1:x,i=input();print p*x;p*=i+1

Cobalah secara online!

2 Sean Dec 26 2020 at 13:16

Raku , 15 byte

*Z*1,|[\*] 1..*

Cobalah secara online!

[\*] 1..*adalah deret tak hingga faktorial yang dimulai dengan 1!. Tambahan 1(untuk 0!) ditempelkan ke depan, lalu semuanya di-zip-kan dengan perkalian ( Z*) dengan satu-satunya urutan masukan *.

2 Shaggy Dec 26 2020 at 17:00

Japt -m , 3 byte

*Vl

Coba di sini

2 pajonk Dec 26 2020 at 16:59

R , 34 28 25 byte

(x=scan())*gamma(seq(!x))

Cobalah secara online!

Cukup mudah.
R tidak memiliki fungsi faktorial bernama pendek, tetapi memiliki gamma.
Menghasilkan urutan bersama xmenggunakan trik dari @Giuseppe .

2 Arnauld Dec 26 2020 at 06:15

JavaScript (ES6),  31  29 byte

I / O: daftar koefisien, dari tingkat terendah hingga tertinggi.

a=>a.map((v,i)=>v*=p=i?p*i:1)

Cobalah secara online!

Berkomentar

a =>              // a[] = polynomial coefficients
  a.map((v, i) => // for each coefficient v at position i in a[]:
    v *=          //   multiply v by:
      p =         //     the updated factorial p, which is:
        i ?       //       if i > 0:
          p * i   //         multiplied by i
        :         //       else:
          1       //         initialized to 1
  )               // end of map()
2 Noodle9 Dec 26 2020 at 08:11

SageMath , 27 23 byte

Disimpan 4 byte berkat ovs !!!

lambda f:f.laplace(x,x)

Cobalah secara online!

Berfungsi dari \$x\$sebagai input dan mengembalikan transformasi Laplace sebagai fungsi dari \$x\$.

1 Neil Dec 26 2020 at 23:46

Arang , 12 byte

IEA×ιΠ⊞Oυ∨κ¹

Cobalah secara online! Tautan adalah untuk verbose versi kode. I / O adalah daftar koefisien dari tingkat terendah hingga tertinggi. Penjelasan:

  A             Input array
 E              Map over elements
    ι           Current element
   ×            Multiplied by
     Π          Product of
        υ       Predefined empty list
      ⊞O        After pushing
         ∨      Logical Or of
          κ     Current index
           ¹    Literal 1
I               Cast to string
                Implicitly print
1 KevinCruijssen Jan 07 2021 at 14:57

05AB1E , 4 byte

εN!*

Cobalah secara online.

Atau sebagai alternatif:

ā<!*

Cobalah secara online.

Keduanya mengambil daftar koefisien sebagai masukan.

Penjelasan:

ε     # Map over each value of the (implicit) input-list
 N    #  Push the 0-based map-index
  !   #  Pop and take it's faculty
   *  #  Multiply it by the current value
      # (after the map, the resulting list is output implicitly)

ā     # Push a list in the range [1,length] based on the (implicit) input-list
 <    # Decrease each by 1 to make the range [0,length)
  !   # Take the faculty of each
   *  # And multiply it to the values at the same positions in the (implicit) input-list
      # (after which the result is output implicitly)