Polynom-Laplace-Transformation

Dec 26 2020

Dies ist ein Repost dieser Herausforderung, die für lockerere E / A-Formate und aktualisierte Regeln überarbeitet werden soll

Sie müssen ein Programm schreiben, das ein ganzzahliges Polynom in \ nimmt$t\$als Eingabe und Ausgabe der Laplace-Transformation dieses Polynoms. Einige Definitionen und Eigenschaften:

  • Die Laplace-Transformation einer gegebenen Funktion \$f(t)\$ ist

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

  • Die Laplace-Transformation von \$f(t) = t^n, \, n = 0, 1, 2, ...\$ ist

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

  • Laplace-Transformationen verteilen sich über Addition:

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

  • Die Laplace-Transformation einer Konstanten multipliziert mit einer Funktion entspricht der Konstante multipliziert mit der Transformation:

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

  • Ein ganzzahliges Polynom ist ein Polynom, bei dem jeder Term einen ganzzahligen Koeffizienten und eine nicht negative Ordnung hat

Ein Beispiel:

$$\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}$$


Sie können Eingaben in eine Standarddarstellung eines Polynoms vornehmen. Einige Beispiele (für \$3x^4+2x^2+x-4\$ als Beispiel) sind:

  • Eine Liste von Koeffizienten. [-4, 1, 2, 0, 3]oder[3, 0, 2, 1, -4]
  • Koeffizienten- und Potenzpaare. [[3, 4], [2, 2], [1, 1], [-4, 0]]und verschiedene verschiedene Ordnungen
  • Eine Zeichenfolge, die eine beliebige Variable verwendet. 3x^4+2x^2+x-4

Da die Ausgabe ein Polynom mit negativen Ordnungen ist, können Sie sie auch in ähnlichen Formaten ausgeben, z. B. (using \$\mathcal{L}\{3x^4+2x^2+x-4\} = \frac{72}{s^5}+\frac4{s^3}+\frac1{s^2}-\frac4s\$):

  • Eine Liste von Koeffizienten. [72, 0, 4, 1, -4]oder[-4, 1, 4, 0, 72]
  • Koeffizienten- und Potenzpaare. [[72, -5], [4, -3], [1, -2], [-4, -1]]und verschiedene verschiedene Ordnungen (oder die positiven Versionen der Kräfte)
  • Eine Zeichenfolge, die eine beliebige Variable verwendet. 72s^-5+4s^-3+s^-2-4s^-1

Wenn Sie eine alternative E / A-Methode haben, bei der Sie sich nicht sicher sind, kommentieren Sie diese bitte unten.

Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes.

Antworten

7 xnor Dec 26 2020 at 08:42

Haskell , 25 Bytes

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

Probieren Sie es online aus!

Ziemlich einfach: Erzeugt die Liste der Fakultäten [1,1,2,6,...]mit a scanlund zipWith(*)multipliziert dann jedes Element der Eingabe mit dem entsprechenden Wert.

32 Bytes

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

Probieren Sie es online aus!

Eine ziemlich faltbasierte Lösung. Nimmt Eingaben (exponent, coefficient)paarweise auf.

6 xash Dec 26 2020 at 06:50

übermitteln , 15 Bytes

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

Probieren Sie es online aus!

Die beiden linken Spalten kopieren "1, 2, 3,… nach oben *. Der Wert oben rechts wird in jeder Runde damit multipliziert, sodass wir (beginnend mit einer zusätzlichen 1 = 0!) 1!, 2!, 3!,… Nach unten kopiert bekommen *. {liest die Eingabe, multipliziert sie mit den Fakultäten und gibt sie aus }.

5 GioD Dec 26 2020 at 12:34

Gelee , 4 Bytes

J’!×

Nimmt die Eingabe als Liste der Koeffizienten auf.

Erläuterung

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

Probieren Sie es online aus!

5 Bubbler Dec 28 2020 at 13:02

APL (Dyalog Unicode) , 3 Bytes

×∘!

Probieren Sie es online aus!

Bringt die liberale E / A auf das Äußerste: Nimmt das Polynom \$ 3x^4 + 2x^2+x-4 \$als zwei Argumente die Koeffizienten links und die Potenzen rechts in absteigender Reihenfolge und einschließlich Nulltermen, wie in 3 0 2 1 ¯4 f 4 3 2 1 0. Gibt das Polynom als Koeffizientenvektor zurück.

4 ZaelinGoodman Dec 28 2020 at 22:48

PowerShell , 28 Byte

Eingabe als Liste von Koeffizienten

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

Probieren Sie es online aus!

3 Razetime Dec 26 2020 at 12:56

APL (Dyalog Unicode) , 7 Bytes

⊢×!∘⍳∘≢

Probieren Sie es online aus!

Verwendet ⎕IO←0(0-Indizierung)

Eingabe als Liste von Koeffizienten.

3 att Dec 26 2020 at 09:44

Wolfram Language (Mathematica) , 10 Bytes

#2!#&@@@#&

Probieren Sie es online aus!

Geben Sie eine Liste von Koeffizienten / Leistungspaaren ein, einschließlich Nullkoeffizienten, sortiert nach Leistung, und geben Sie eine Liste der entsprechenden Koeffizienten aus.


Der eingebaute ist länger: 23 Bytes

LaplaceTransform[#,t,]&

Probieren Sie es online aus!

Geben Sie ein Polynom in Bezug auf tund ein Polynom in Bezug auf ein Null.

2 Neil Dec 26 2020 at 06:40

Netzhaut , 30 Bytes

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

Probieren Sie es online aus! E / A ist eine durch Zeilenumbrüche getrennte Liste von Koeffizienten vom niedrigsten zum höchsten Grad. Erläuterung:

L$`.+ $&$:&*

Fügen Sie für jeden Koeffizienten eine Anzahl von Unterstrichen hinzu, die seinem Grad entsprechen.

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

Bis keine Unterstriche mehr vorhanden sind, multiplizieren Sie jeden Koeffizienten mit der Anzahl der folgenden Unterstriche und löschen Sie dabei einen.

2 user Dec 26 2020 at 06:36

Scala 3, 52 48 Bytes

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

Probieren Sie es online aus!

Eingabe und Ausgabe als Liste von ganzen Zahlen vom niedrigsten zum höchsten Grad.

p.indicesgibt uns einen Bereich von 0 bis p.size - 1. Wenn Sie mit Multiplikation nach links scannen, erhalten Sie die Fakultät für jeden Index. Da das erste Element jedoch 0 ist, müssen Sie (daher _.+(1)) 1 hinzufügen . Dann werden alle Fakultäten mit den Koeffizienten gezippt und miteinander multipliziert.

2 xnor Dec 26 2020 at 08:27

Python 2 , 39 Bytes

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

Probieren Sie es online aus!

Eingabe und Ausgabe sind Koeffizienten, einer pro Zeile, beginnend mit dem kleinsten Grad (nächster Nullpunkt).

Die (coefficient, exponent)paarweise Einnahme dauert etwas länger.

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

Probieren Sie es online aus!

2 Sean Dec 26 2020 at 13:16

Raku , 15 Bytes

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

Probieren Sie es online aus!

[\*] 1..*ist die unendliche Folge von Fakultäten, beginnend mit 1!. Ein zusätzliches 1(für 0!) wird auf die Vorderseite geklebt, dann wird das Ganze mit Multiplikation ( Z*) mit der einzigen Eingabesequenz gezippt *.

2 Shaggy Dec 26 2020 at 17:00

Japt -m , 3 Bytes

*Vl

Probieren Sie es hier aus

2 pajonk Dec 26 2020 at 16:59

R , 34 28 25 Bytes

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

Probieren Sie es online aus!

Ziemlich einfach.
R fehlt eine kurzbenannte Fakultätsfunktion, hat aber gamma.
Erzeugt eine Sequenz xmit einem Trick von @Giuseppe .

2 Arnauld Dec 26 2020 at 06:15

JavaScript (ES6),  31  29 Byte

E / A: Liste der Koeffizienten vom niedrigsten zum höchsten Grad.

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

Probieren Sie es online aus!

Kommentiert

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 Bytes

4 Bytes dank Ovs gespeichert !!!

lambda f:f.laplace(x,x)

Probieren Sie es online aus!

Übernimmt eine Funktion von \$x\$als Eingabe und gibt die Laplace-Transformation als Funktion von \ zurück$x\$.

1 Neil Dec 26 2020 at 23:46

Holzkohle , 12 Bytes

IEA×ιΠ⊞Oυ∨κ¹

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. E / A ist eine Liste von Koeffizienten vom niedrigsten zum höchsten Grad. Erläuterung:

  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 Bytes

εN!*

Probieren Sie es online aus.

Oder alternativ:

ā<!*

Probieren Sie es online aus.

Beide nehmen eine Liste von Koeffizienten als Eingabe.

Erläuterung:

ε     # 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)