Come si definiscono i funzionali in Mathematica?

Sep 28 2020

Quando scrivo W[f_] := Integrate[f[x], {x, 0, π}]io possa a ragione concludere che W[Sin] = 2, W[Cos] = 0, W[Log] = π (-1 + Log[π])ecc, ma non sono in grado di definire W[Sin + Cos]o W[Sin[Sin]]ecc Si prega di aiuto.

Risposte

4 RonaldMonson Sep 29 2020 at 11:18

Il problema è che un funzionale opera su funzioni così in

W[f_] := Integrate[f[x], {x, 0, Pi}]

Wdeve essere alimentato da una funzione. Le espressioni Sin+Coso Sin[Sin]falliscono perché queste non sono funzioni WL. Lavorando nello spazio funzionale abbiamo gli operatori di composizione @*e \*ma questi non sono sufficienti quando si desidera utilizzare le funzioni incorporate di WL che sono orientate a lavorare con espressioni generali. Ma un modo per cooptare le funzioni di WL per operare nello spazio funzionale è FunctionalConstructil seguente:

FunctionalConstruct[op_, fs__] := Function[x, op @@ Through[{fs}[x]]];
FunctionalConstruct[op_] := op;

f = FunctionalConstruct[Plus, Sin, Cos];
ga = FunctionalConstruct[Sin, Sin];
gb = FunctionalConstruct[Sin@*Sin];

In un certo senso per questi integrali definiti sarebbe più naturale scrivere semplicemente ora

Integrate[f, {0, Pi}]
Integrate[ga, {0, Pi}]
Integrate[gb, {0, Pi}]

nello spazio funzionale ma poiché nel calcolo è spesso così utile usare variabili fittizie (integrali indefiniti, trasformando espressioni in funzioni desiderate rispetto a x, yecc.) si arriva Wad applicare automaticamente la funzione a una variabile fittizia prima di eseguire l'integrale:

W[f]
W[ga]
W[gb]

2

Pi StruveH [0, 1]

Pi StruveH [0, 1]

12 ΑλέξανδροςΖεγγ Sep 29 2020 at 03:27

Assicurati di passare la testa / funzione giusta a W. Ad esempio, Sin[Sin] @ xdà Sin[Sin][x], ovviamente irriconoscibile da MMA, per non parlare della valutazione successiva dell'integrale. Quindi una soluzione opzionale può essere questa

W[Sin[#] + Cos[#] &]
W[Sin @* Sin]

dov'è la @*composizione.

8 evanb Sep 29 2020 at 03:47

Sinè qualcosa che accetta un argomento --- Sin[7]è un numero.

Al contrario, Sin+Cosnon è qualcosa che richiede una discussione! Il tuo funzionale sta cercando di valutare ad es. (Sin+Cos)[7]che, senza aiuto, non capisce.

Quindi, è necessario trasformare l'argomento di W in qualcosa che accetta correttamente l'argomento.

Potresti dire

g[x]:= Sin[x]+Cos[x]
W[g]

per esempio. Oppure puoi farlo in modo anonimo usando le funzioni pure (#),

W[Sin[#]+Cos[#]&]
4 CarlWoll Sep 29 2020 at 04:21

Perché Sin + Cospotresti definire SubValuesper CirclePlus:

CirclePlus[f_, g_][x] := f[x] + g[x]

Poi:

W[Sin ⊕ Cos]

2