[運算] 請問程式可以跑一次,卻無法跑第二次?

看板MATLAB作者 (irene)時間8年前 (2015/12/28 03:31), 編輯推噓2(2029)
留言31則, 6人參與, 最新討論串1/1
我有一個問題想要請問: 我有一個程式碼,當我按下run的時候,可以跑,但是,結果跑出來之後,再按一次, 就會出現error。 可是把matlab關掉之後,又可以跑,我試著抓錯誤,發現裡面有一個程式碼怪怪的。 但是,不知道該怎麼修改,請問是否有人可以協助我? % theta為 N by 1 的矩陣 % a、b、c為 1 by n 的矩陣 [n]=size(a,2); [N]=size(theta); sum=(ones(N,1)*a).*(theta*ones(1,n))-(ones(N,1)*b); Information =100000* (ones(N,1)*a) .* (ones(N,1)*a) .* ((exp(sum) ./ (1-exp(sum))) .^2) .*((1-(ones(N,1)*c))/((ones(N,1)*c)+exp(sum))); 最後的那個information是否可以告訴我,他是否有錯誤?若有錯誤?為什麼又可以跑第 一次呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.69.46 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1451244715.A.C15.html

12/28 13:07, , 1F
把資料先清空再跑第二次看看?
12/28 13:07, 1F

12/28 13:55, , 2F
sum是內建函數的名稱,先把這個改掉試試看
12/28 13:55, 2F

12/28 13:57, , 3F
另外 [N]=size(theta, 1);
12/28 13:57, 3F

12/28 13:58, , 4F
((1-(ones(N,1)*c))/((ones(N,1)*c)+exp(sum)))
12/28 13:58, 4F

12/28 13:58, , 5F
出來是14 x 14的矩陣
12/28 13:58, 5F

12/28 13:58, , 6F
前面都是 14 X 10
12/28 13:58, 6F

12/28 13:58, , 7F
更正 出來是 N x N的矩陣
12/28 13:58, 7F

12/28 13:59, , 8F
前面是 N x n
12/28 13:59, 8F

12/28 13:59, , 9F
建議都改成用bsxfun處理
12/28 13:59, 9F

12/29 00:33, , 10F
我用matlab都會在最前面加 clear all
12/29 00:33, 10F

12/29 01:01, , 11F
clear; clc; close all; fclose all;
12/29 01:01, 11F

12/29 16:39, , 12F
謝謝大家,請問celestialgod,我會試試bsxfun,那麼,
12/29 16:39, 12F

12/29 16:40, , 13F
請問有沒有人知道為什麼同一支程式碼,小數據可以跑,
12/29 16:40, 13F

12/29 16:42, , 14F
大數據卻不可以跑呢?例如:n=10可以,但n=1000,卻不行
12/29 16:42, 14F

12/29 18:35, , 15F
很少有這種情況出現,除非記憶體不足
12/29 18:35, 15F

12/29 18:36, , 16F
沒有發生錯誤的程式,也無法斷言是什麼原因
12/29 18:36, 16F

12/29 19:00, , 17F
你先看左下角有沒有busy 按複製快捷建(ctrl+c) 有無紅字
12/29 19:00, 17F

12/29 19:01, , 18F
可能是寫法效率很差,造成短時間內跑不出結果。
12/29 19:01, 18F

12/30 17:38, , 19F
謝謝大家,celestialgodu,應該不是記憶題的關係,有
12/30 17:38, 19F

12/30 17:41, , 20F
趣的是,n=10沒有error,n=1000就有error了!
12/30 17:41, 20F

12/30 17:44, , 21F
s4300026/,說得很有可能,但我不知道該怎麼改善?
12/30 17:44, 21F

12/30 18:32, , 22F
s43大講的case是不會出現error的 只會是還沒跑完在那邊
12/30 18:32, 22F

12/30 18:32, , 23F
busy 你要不要貼一夏你的error code?
12/30 18:32, 23F

12/30 18:37, , 24F
http://pastebin.com/HBnidmn3 先改這樣試試看
12/30 18:37, 24F

12/30 18:38, , 25F
a .^ 2那裏也可以改用bsxfun算,我忘了改XD
12/30 18:38, 25F

12/30 18:39, , 26F
bsxfun(@times, a.^2, ((exp(s) ./(1-exp(s))).^2))
12/30 18:39, 26F

12/30 18:40, , 27F
你最後的 /我改成 ./了
12/30 18:40, 27F

12/30 18:41, , 28F
因為dimension對不起來
12/30 18:41, 28F

12/30 18:51, , 29F
除非n=N
12/30 18:51, 29F

01/13 17:30, , 30F
謝謝celestialgod您所改寫的程式碼,真的跑的比較快
01/13 17:30, 30F

01/13 17:39, , 31F
不客氣
01/13 17:39, 31F
文章代碼(AID): #1MW3ohmL (MATLAB)
文章代碼(AID): #1MW3ohmL (MATLAB)