2012-03-09 74 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}]