Re: [問題] 有關於迴圈轉成矩陣...已回收
※ 引述《biglongtoday (大長今)》之銘言:
: ※ 引述《sindyddd ()》之銘言:
: : 我還是新手 目前正在學習當中 請各位不吝指教>"<
: : 以下是我的問題....
: : ---------------------------------------------------------------
: : 我想將程式跑成下面這樣類似矩陣的形式...(其他無數值的地方可以放零沒關係)
: : i=1 i=2 i=3 i=4 ....... i=n
: : → panzertp:感覺很像8008的問題 07/28 23:09
: : → sindyddd:想說 從第1個取到第i+1個 可以這樣寫嗎.... 07/28 23:37
: : 推 pid2:有錯誤訊息嗎??或是單純的答案不對而已 07/29 00:23
: : → sindyddd:答案不對 但是如果寫s(j(1:i+1),i)就出現錯誤訊息了 07/29 00:31
: u=2;
: S0=3;
: n=100;
: d=3;
: hh=u.^toeplitz(0:n);
: hh=triu(hh(:,2:end),-1);
: dd=triu(d.^repmat([0:n]',1,n),-1);
: S0*hh.*dd
: 這樣勒
呵...有人先發了~
n = 1000;
S0 = 1;
u = 2;
d = 3;
% d with S0
D_S0 = repmat(S0*d.^(0:n)', [1 n]);
D_S0 = triu(D_S0, -1);
% u
U_1 = repmat(u.^(1:n), [n+1 1]);
U_2 = repmat(u.^(0:n)', [1 n]);
U = U_1 ./ U_2;
U = triu(U, -1);
S = D_S0 .* U;
為了效能,有用到除法...原 PO 就看看會不會影響到精度囉...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
→
07/29 09:20, , 1F
07/29 09:20, 1F
推
07/29 10:29, , 2F
07/29 10:29, 2F
既然 e0101010 大有提到,就補充說明一下小弟當初的想法好了
一開始的想法其實是這樣寫的
U_1 = repmat((1:n), [n+1 1]);
U_2 = repmat((0:n)', [1 n]);
U = u .^ (U_1 - U_2);
U = triu(U, -1);
也就是先算出各元的指數之後用 .^ 算出實際的值。
不過考慮到實驗的結果是 次方 相較於 除法,所耗的時間除法是明顯比較少的,
就決定先在 repmat 之前先做次方,將指數相減的部分,
也就是成為大矩陣之後要所有元素都算過的部分用除法來算。
當然也有想到除法會造成的誤差通常是比較大的,
但是因為小弟是把目標放在效能,所以最後還是採用除法。
※ 編輯: DigiPrince 來自: 61.58.102.177 (07/29 10:58)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章