最大分化

时间:2018-11-26 10:00:56

标签: maxima differentiation

我尝试根据函数定义标准正态pdf的导数:

event.consume()

但是如果我输入:

φ(x) := exp (-x^2/2)/sqrt(2 * %pi);
gradef(φ(x),-x*φ(x));

我得到:

diff(φ(x),x);

不是我想要的-(x*%e^(-x^2/2))/(sqrt(2)*sqrt(%pi))`

我做错了什么?

谢谢

卡尔

EDiT

不幸的是,两个建议都起作用。

1 个答案:

答案 0 :(得分:0)

我认为没有错; Maxima只是根据您调用// gcc counter.c -o counter #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { unsigned int i = 0; while(1) { printf("%d\n", i); sleep(1); i++; fflush(stdout); } } 时给出的定义来评估phi。

我可以考虑尝试一些方法。 (1)在定义phi之前调用 ... import System.IO ... counter :: MonadIO m => Source m TL.Text counter = do r <- liftIO $ createProcess (proc "./counter" []){ std_out = CreatePipe, std_in = CreatePipe} let (_, Just outp, _, _) = r liftIO $ hSetBuffering outp LineBuffering forever $ do contents <- liftIO $ hGetLine outp yield $ TL.pack $ show ("Stdout: " ++ contents) liftIO $ threadDelay 1000000 -- already put 1s delay in C file, so it's optional liftIO $ hClose outp 。然后,当您调用gradef时,可能会在输出中得到phi。不确定是否可以。

(2)使用名词表达式gradef定义diff。注意gradef之前的单引号gradef(φ(x),-x*'φ(x));这样就形成了一个所谓的名词表达式,其中可以评估自变量',但不调用函数φ(x)。以后为了评估函数,可以根据需要说出x来评估φ中的所有名词表达式。

编辑:这是另一个想法。这对我有用。以前的想法没有用,因为φ评估得太早了。为了防止评估,这个新主意的篇幅更大。请注意,gradef是为ev(someexpression, nouns)定义的,因此您必须编写someexpression才能应用gradef。

'φ(x)

gradef会产生一个名词表达式diff('φ(x), x),因此,可以将其动词化为:

(%i12) gradef('φ(x), -x*'φ(x));
(%o12)                        φ(x)
(%i13) diff('φ(x), x);
(%o13)                      - x φ(x)

看起来像预期那样应用了链式规则:

-x*'φ(x)