Polynom-Laplace-Transformation
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
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 scanl
und 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.
ü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 }
.
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!
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.
PowerShell , 28 Byte
Eingabe als Liste von Koeffizienten
$p++;$args|%{$p*$_;$p*=++$i}
Probieren Sie es online aus!
APL (Dyalog Unicode) , 7 Bytes
⊢×!∘⍳∘≢
Probieren Sie es online aus!
Verwendet ⎕IO←0
(0-Indizierung)
Eingabe als Liste von Koeffizienten.
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 t
und ein Polynom in Bezug auf ein Null
.
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.
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.indices
gibt 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.
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!
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 *
.
Japt -m , 3 Bytes
*Vl
Probieren Sie es hier aus
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 x
mit einem Trick von @Giuseppe .
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()
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\$.
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
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)