1
$\begingroup$

I do believe this sort of similar questions had been asked many times, so I have read a LOT. For example this and this as well as many other related posts.

But a glance at what my main question is this:

Needs["Notation`"]

Symbolize[ParsedBoxWrapper[SubscriptBox["x", "_"]]]
Symbolize[ParsedBoxWrapper[SubscriptBox["y", "_"]]]
var1 = Table[ToExpression["Subscript[x, " <> ToString[i] <> "]"], {i, 10}]
var2 = Table[ToExpression["Subscript[y, " <> ToString[i] <> "]"], {i, 10}]

1/(1 + Exp[var1 + var2])
(* Does not work *)
Variables[%]

1/(1 + Exp[var1 + var2])
(* Does work *)
Variables[Level[%,4]]

Now the real challenge is: I need expression for TWO sets of variables (symbols) $p_{jc}$ and $\phi_{jc}$, like this $$ p_{jc} = \frac{1}{1+\exp{(-\mu_p-\tau_{pj}-\eta_{pc}})} $$ and $$ \phi_{jc} = \frac{1}{1+\exp{(-\mu_\phi-\tau_{\phi j}-\eta_{\phi c}})} $$ for different $j$s and $c$s.

Ideally, I want to define variables like $\mu_{\phi},\mu_p,\tau_{pj}$, ect. They need to be treated like a variable by the function Variables, not when I Level out the expression.

I coded the whole thing in Maple with out any problem, but in Mathematica, this seen to be very difficult to do so. The similar command for Variables in Maple is indets.

I now wonder:

1 - Is that possible to define things like $\mu_{\phi},\tau_{\phi j},\eta_{\phi c}$. How?

2 - When I use these symbols, are they going to be recognized without any problem by Variables?

This is particularly important because I write functions that take $j$ and $c$ to create the variables above, then a complicated expression, involving exponential. I want to determine the "number of parameters".

3 - A bit vague, but more to do. I will use these symbols to create function, and do optimizations, and replace /. using rules. Would that have difficulties? See the PDF . Page 1, sskappa(ss,kappa); transforms expression (1) to expression (4) using rules (3).

4 - Just as a note to the Symbolize command, why does Variables do not treat the Symbolized variables as variables? (get me {} as shown above in the code)

Here is a PDF file, produced by Maple, on briefly what I am trying to get in Mathematica. Don't worry to much about the expression "kappa", but what I can do with "kappa", for example, using Maple command indets.

Any advise on how to approach this would be appreciated!

$\endgroup$
  • $\begingroup$ I believe your solution modified as: Variables[Level[%, -1]] would work for you in many more cases. $\endgroup$ – user21434 Oct 15 '14 at 8:29
  • $\begingroup$ @BryggaTe Yes, that is essentially what I proposed here. The {-1}, meaning only expressions at the deepest level rather than expressions at all levels may be appropriate. $\endgroup$ – Mr.Wizard Oct 15 '14 at 19:17
1
$\begingroup$

For the moment leaving aside the wisdom of using Subscripts as Symbols in Mathematica it would appear that your immediate problem has nothing to do with Subscript at all but rather the behavior of Variables.

Recall its definition:

Variables[poly] gives a list of all independent variables in a polynomial.

And observe that even when using true Symbols you do not get the result you desire:

var1 = Table[Symbol["x" <> ToString[i]], {i, 10}];
var2 = Table[Symbol["y" <> ToString[i]], {i, 10}];

expr = 1/(1 + Exp[var1 + var2]);

Variables[expr]
{}
$\endgroup$
  • $\begingroup$ I see. Variables was suggested to me, as a similar command to the Maple indets. So what's the best approach to this ? Can Mathematica determine all variables (or symbols) that in an expression need to be determined? I really do hope there is a way out. $\endgroup$ – Chen Stats Yu Oct 14 '14 at 19:48
  • $\begingroup$ @Chen Since I am not familiar with indets I don't know what you are attempting to implement and where it is failing. What is wrong with using Level? That was the proposed solution to this (I think) related question: (30038) $\endgroup$ – Mr.Wizard Oct 14 '14 at 21:46
  • $\begingroup$ What if I do this? var2 = Table[Symbol["y" <> ToString[i]], {i, 10}]; Variables[Level[%*Exp[%]^%, -1]]. This would fail. My point is, Using Level will have to change, it depends on the complicated structure of the expr. Maybe a fixed level works for a particular structure, but it just seem wasted. As a comparison, the Maple indets command is more "straightforward" in this case. (I have also missed understood what Variables does until you mentioned its definition, but it's not very relevant to the point I am trying to make, I think.) $\endgroup$ – Chen Stats Yu Oct 15 '14 at 10:02
  • $\begingroup$ @Chen Please post a new Question about a Mathematica equivalent for Maple indets, along with examples where Variables (with or without Level) fails to give the desired result. $\endgroup$ – Mr.Wizard Oct 15 '14 at 18:53
  • $\begingroup$ OK! I will do so in a minute. $\endgroup$ – Chen Stats Yu Oct 15 '14 at 18:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.