2012-03-09 64 views
0

我要疯了,因为我不能做数学的行为..数学清单和问题

我解决与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]]只是简单地采用'哪个'的第一个条件。为什么??

感谢您的帮助!

+0

尝试'答[W] // Trace'看到评估步骤Mma经历60回答(0 <= w <= 10)'。你需要给你的'Ans [..]'函数传递一个数字参数('z [t]'不是),所以'z [t] /。{t-> 3}'或'z [3] '会给你所期望的。顺便说一句,有一个[StackExchange](http://mathematica.stackexchange.com/)网站专用于'Mathematica'。 – kglr 2012-03-09 05:16:55

+0

它仍然不起作用,但我已经在Mma Stack Exchange上重新解释了我的问题:http://mathematica.stackexchange.com/questions/2769/ndsolve-problem – 2012-03-09 19:11:45

回答

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}]