小编use*_*407的帖子

重新定义Mathematica中的下标

我想重新定义Subscript"二叉树坐标"被翻译成"平面阵列坐标":

Unprotect[Subscript];
Subscript[x_, i_, j_] := x[[2 ^ i + j]];
Protect[Subscript];    

(* Binomial Tree *)
y = {.1, {.2, .3}} // Flatten;

Subscript[y, 1, 1]
Subscript[y, 1, 1] = .5;
Subscript[y, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我期望得到的是.3, .5.相反,我得到了,Set::write : Tag Subscript in {.1, .2, .3}_1,1 is Protected并没有分配价值.请指教.

wolfram-mathematica pattern-matching variable-assignment

4
推荐指数
1
解决办法
478
查看次数

如何在Mathematica中定义一个与D通信的函数

我想实现一个f与差异化通信的运算符D.

Unprotect[D];
D[f[y___], x] := f[D[y, x]];
Protect[D];

D[f[Sin[x]], x]
D[f[Sin[x]] + 1, x]
Run Code Online (Sandbox Code Playgroud)

不幸的是,这段代码会产生两种不同

f[Cos[x]] (* as expected *)
Cos[x] f´[Sin[x]] (* cannot explain *)
Run Code Online (Sandbox Code Playgroud)

我想知道,发生了什么,以及如何修复替换规则,以便第二个表达式也可以评估f[Cos[x]].

更新.解决方案1以下解决方案似乎完成了重新定义D运算符的工作(尽管我完全不了解我自己的代码).

PartialDerivative[x_, x_] := 1; 

PartialDerivative[c_, x_] := 0 /; FreeQ[c, x]; 

PartialDerivative[f_ConditionalExpectation, x_] := 
  ConditionalExpectation[PartialDerivative[f, x]];

PartialDerivative[(f_)[g__], x_] := Module[{i, n, p}, 
        n = Length[SequenceHold[g]]; 
        Sum[
          p = ConstantArray[0, n]; p[[i]] = 1; 
          ((Derivative[##1][f] & ) @@ p)[g]*
              PartialDerivative[SequenceHold[g][[i]], x], {i, 1, n}]]; …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

3
推荐指数
1
解决办法
594
查看次数