Re: [問題] 宣告的順序不同 答案也不同
※ 引述《harry901 (forcing to A cup)》之銘言:
: a[t_] = 5*t + 2; (*令函數a*)
: b[t_] = a[t] + aa; (*令函數b*)
: aaans = Array[ans, {6, 1}]; (*令空矩陣aaans*)
: For[i = 1, i <= 6, i++, aa = i; (*迴圈*)
: aaans[[i, 1]] = b[1]] (*將答案跑出來放入空矩陣*)
: aaans (*印出來*)
: 執行後可得
: {{8}, {9}, {10}, {11}, {12}, {13}}
: =====================================
: aaans = Array[ans, {6, 1}];
: For[i = 1, i <= 6, i++,
: b[t_] = a[t] + aa;
: a[t_] = 5*t + 2;
: aa = i;
: aaans[[i, 1]] = b[1]]
: aaans
: 執行後卻變成
: {{8}, {8}, {9}, {10}, {11}, {12}}
: 我猜想大概跟系統內建參數初始直有關係
: 可是...現在實在頭昏腦脹 無法解釋上面兩個結果
: ==============================================================================
: 怎麼辦 實際上我的程式有兩百行 =__=~
: 尤其有很多復合函數 有些變數的宣告在For外面 有些在裡面
: 寫For迴圈的習慣要如何培養 才能避免上面的狀況出錯
: 尤其是需要連結到For外面的變數與函數時 >__<~
你用 = 來定義函數了...
用 = 來定義函數會造成函式指定的當下就先計算完畢
所以你的第一例
: a[t_] = 5*t + 2; (*令函數a*)
: b[t_] = a[t] + aa; (*令函數b*)
實際定義上的 b 已經是 5*t + 2 + aa 了
那在第二例當中
: b[t_] = a[t] + aa;
: a[t_] = 5*t + 2;
這樣一來 b[t] 在第二圈定義的當下會代入 aa 第一圈的值 (1)
因此就會造成即使你改訂了 aa 的值 (aa 已經是 2 了) 計算結果還是少 1
正確的解法是用 := 來定義函數
這會使得函數在定義當下不會計算 只有存起來
要到實際求值時才會把值代進去
--
1985/01/12 三嶋鳴海 1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町
つぐみ 歡迎來到 1994/05/21 高江ミュウ 1997/03/24 守野いづみ 1997/03/24 伊野瀬
チサト 1998/06/18 守野くるみ 打越鋼太郎的 1999/10/19 楠田ゆに 2000/02/15 樋口遙
2002/12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 ∞與∫的世界 2011/04/02 茜崎空
啟動 2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞 2019/04/01~07 某大學合宿
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.91
推
11/24 14:18, , 1F
11/24 14:18, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章