Как вызвать список выражений в блоке Mathematica - PullRequest
0 голосов
/ 31 декабря 2018

Вот функция блока:

ublock[UU_]:=Block[{tt},U[z_]:=UU[[1]];
tt=2 U[z]+3 U'[z]+U''[z]];
UU:={z^2,z,Sin[z]};
ublock[UU]

Где tt,U[z] - временные переменные, и я хочу получить результат:

2*z^2+6z+2

, норезультат:

2z^2

почему результаты U'[z] и U''[z] потеряны?

Как получить желаемый результат?

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018
ublock[UU_] := Module[{tt}, U = UU[[1]];
   tt = 2 U + 3 D[U, z] + D[U, {z, 2}]]

или еще лучше

ublock[UU_] := With[{U = UU[[1]]}, 2 U + 3 D[U, z] + D[U, {z, 2}]]
0 голосов
/ 31 декабря 2018
UU = {z^2, z, Sin[z]};
ublock[UU_] := Evaluate@Block[{tt}, U[z_] = UU[[1]];
    tt = 2 U[z] + 3 U'[z] + U''[z]];
ublock[UU]

(* 2 + 6 z + 2 z^2 *)
0 голосов
/ 31 декабря 2018

Некоторые оценки помогают

UU := {z^2, z, Sin[z]};
ublock[UU_] := Evaluate@Block[{tt},
    U[z_] := Evaluate@UU[[1]];
    tt = 2 U[z] + 3 U'[z] + U''[z]];
ublock[UU]

2 + 6 z + 2 z ^ 2

Но для большей гибкости

Clear[U, UU, ublock]

ublock[UU_] := Block[{tt},
   U[z_] := 0;
   DownValues[U] = ReplacePart[DownValues[U], {1, 2} -> UU[[1]]];
   tt = 2 U[z] + 3 U'[z] + U''[z]]

UU := {z^2, z, Sin[z]}

ublock[UU]

2 + 6 z + 2 z ^ 2

...