Come si definiscono i funzionali in Mathematica?
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
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]
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.
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[#]&]
Perché Sin + Cospotresti definire SubValuesper CirclePlus:
CirclePlus[f_, g_][x] := f[x] + g[x]
Poi:
W[Sin ⊕ Cos]
2