Re: [討論] 一個簡單的量子能量相關的程式
※ 引述《ReiFu21 (ReiFu)》之銘言:
: 三個正整數 m n k 從 1 1 1 開始
: 1^2+1^2+1^2=3 一種變化 即1 1 1
: 2^2+1^2+1^2=6 三種變化 即2 1 1 , 1 2 1 , 1 1 2
: 2^2+2^2+1^2=9 三種變化 即2 2 1 , 2 1 2 , 1 2 2
: 3^2+1^2+1^2=11 三種變化 即3 1 1 , 1 3 1 , 3 1 1
: 2^2+2^2+2^2=12 一種變化 即2 2 2
: 3^2+2^2+1^2=14 六種變化 即3 2 1 , 3 1 2 , 2 1 3 , 2 3 1 , 1 2 3 , 1 3 2
: 我希望求出矩陣d
: d= 3 1
: 6 3
: 9 3
: 11 3
: 12 1
: 14 6
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 182.233.195.125
: ※ 編輯: ReiFu21 來自: 182.233.195.125 (06/14 21:55)
: → mp19990920:3 2 2/3 3 3/2 2 3/2 3 3 這些要嗎? 06/15 02
: → mp19990920:漏了一個 3 3 2 06/15 02
: → ReiFu21:不用 只是平方值一樣大的都要加在一起 所以不只有1 3 6 06/15 10
: → mp19990920:.... 06/15 11
: → mp19990920:3 2 2, 2 3 2, 2 2 3/3 3 3/2 3 3, 3 2 3, 3 3 2 ... 06/15 11
: → mp19990920:更正如上所示 06/15 11
我的意思是如下程式出來後
base3 = dec2base(0:3^3-1, 3) - '0' + 1;
sumsqr = sort(sum(base3.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
= 3 1
6 3
9 3
11 3
12 1
14 6
17 3
19 3
22 3
27 1
3 2 2, 2 3 2, 2 2 3
3 3 3
2 3 3, 3 2 3, 3 3 2
3 3 1, 3 1 3, 1 3 3
這些為啥不考慮,
不然d不知道怎麼截
: → ReiFu21:希望可以算到指定的大小 像是3*(100^2)這麼大 但是細節諸 06/15 11
: → ReiFu21:如把所有排列可能都列出來就不用了 感謝 06/15 11
: 推 CBET:或是用暴力法把所有平方和算出來,再用unique並計算出現次數 06/15 13
C大, 教初學者用暴力法不太好吧!
p.s. 我的推文有表達的那麼不清楚嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.67.63.26
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 18:52)
→
06/15 18:54, , 1F
06/15 18:54, 1F
→
06/15 18:55, , 2F
06/15 18:55, 2F
→
06/15 18:56, , 3F
06/15 18:56, 3F
→
06/15 18:57, , 4F
06/15 18:57, 4F
→
06/15 18:57, , 5F
06/15 18:57, 5F
推
06/15 19:02, , 6F
06/15 19:02, 6F
推
06/15 19:02, , 7F
06/15 19:02, 7F
若您的m, n, k 都要從 1~x 的話,
把剛剛的程式中3的部分換成x即可。
此處的3表示m,n,k是3個的意思
↓
baseX = dec2base(0:x^3-1, x) - '0' + 1;
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:09)
→
06/15 19:03, , 8F
06/15 19:03, 8F
是27吧?
請問您的36是如何來的?
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:10)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:11)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 19:15)
推
06/15 19:23, , 9F
06/15 19:23, 9F
那您的10是怎麼得來的?
我的電腦上 sqrt(realmax/3) 大到 7.7410e+153
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 20:54)
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 20:57)
推
06/15 21:28, , 10F
06/15 21:28, 10F
→
06/15 21:30, , 11F
06/15 21:30, 11F
謝謝C大,
我沒考慮到進制的表示,
if x >= 2 && x<=36
baseX = dec2base(0:x^3-1, x);
if x > 10
shiftChar = char(size(baseX));
iDigit = ismember(dec2base([0:35], 36), '0123456789');
shiftChar(iDigit) = '/';
shiftChar(~iDigit) = '6';
baseX = baseX - shiftChar + 1;
else
baseX = baseX - '/';
end
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
else
error(message('MATLAB:dec2base:SecondArg'));
end
以上的code可支援 x = 2~36
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 22:01)
以下的code 可支援正整數的x
num = [0:x^3-1].';
baseX = zeros(length(num), 3)
baseX(:, 1) = floor(num/x^2);
num = rem(num, x^2);
baseX(:, 2) = floor(num/x);
num = rem(num, x);
baseX(:, 3) = num;
sumsqr = sort(sum(baseX.^2, 2));
sumsqr_ele = unique(sumsqr);
d = [sumsqr_ele, histc(sumsqr, sumsqr_ele)];
※ 編輯: mp19990920 來自: 111.67.63.26 (06/15 22:28)
※ 編輯: mp19990920 來自: 111.67.58.177 (06/15 23:41)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):