Mathematica列表和哪个问题

时间:2012-03-09 03:22:29

标签: wolfram-mathematica

我疯了,因为我不能让Mathematica表现出来......

我正在使用NDSolve解决ODE,但由于一个函数无法输出我期望的结果,因此无效。

我的功能是这种形式:

y[x_] := Which[
  0<=x<=10, {{1,2,3},{-9,-8,-7}},
  10<x<20, {{4,5,6},{-6,-5,-4}},
  x>=20, {{7,8,9},{-3,-2,-1}}
];

如果在上下文中使用该函数:

Ans[x_] := Total[y[x][[1]] {10,20,30}];

只要我用数值称它就可以了。

Ans[3] = Total[y[3][[1]] {10,20,30}] = Total[{1,2,3} {10,20,30}] = Total[{10,40,90}] = 140

但是当我的ODE求解器用另一个函数调用它时,它表现得非常奇怪。

Ans[z[t]] = Total[y[z[t]][[1]] {10,20,30}] = Total[(0<=x<=10) {10,20,30}] = ??? non-sense

似乎参数y [z [t]] [[1]]只是采用'哪个'第一个条件。为什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

回答你问的问题:

原因是,当您评估y[x]时,它只会提供Which[0 <= x <= 10, {{1, 2, 3}, {-9, -8, -7}}, 10 < x < 20, {{4, 5, 6}, {-6, -5, -4}}, x >= 20, {{7, 8, 9}, {-3, -2, -1}}],其中第一个元素(由[[1]]检索)为0 <= x <= 10


一些建议:

  • :=定义后不需要分号。

  • 在许多情况下,您可以使用Piecewise代替WhichPiecewise是一个数学结构,而Which是编程结构。

  • 当你需要一个只应该评估数字参数而不是符号的函数时,请使用

    Clear[ans]
    ans[x_?NumericQ] := Total[y[x][[1]] {10,20,30}]