[問題] 矩陣點乘(.*)和for迴圈處理 結果不一樣?已回收
各位大大好~
有個問題困惑在下有段時間
一直看不出所以然來~
想請各位大大解惑也~
問題是這樣子的
問題敘述:
=====================================================
在0.017到0.027之間~我要分1312個點~代入一個式子裡面
去算出相對應的值!
結果發現我使用矩陣點乘出來的結果,和我用for迴圈跑出來的結果竟然不一樣@@"
**由於代入的式子是會讓結果遞增的..也就是說0.027代進去會是最大值
當第一個0.017代進式子算出來的結果,和for迴圈跑的結果是一樣的~最小值都是1082
(最小值都一樣,沒有問題)
但是當最後一個0.027代入式子之後,
(1)
用矩陣點乘,最大值是3869
(2)
用for迴圈跑出來,最大值卻是3134
(3)
最後嘗試用linspace直接平均分配0.017~0.027之間有1312個點
linspace(0.017,0.027,1312),跑出來的結果最大值是4046
========================================================
三種情況都不一樣T_T...怎摸會這樣子...
程式的解說如下:
========================================================
1312個點並不是平均分配~故無法使用linspace來分~
程式一開始我先分配1312個點,再把他集合起來變成一個矩陣
dist1=linspace(0.017,0.018,83);
dist2=linspace(0.018,0.019,123);
dist3=linspace(0.019,0.020,82);
dist4=linspace(0.020,0.021,82);
dist5=linspace(0.021,0.022,163);
dist6=linspace(0.022,0.023,164);
dist7=linspace(0.023,0.024,123);
dist8=linspace(0.024,0.025,82);
dist9=linspace(0.025,0.026,164);
dist10=linspace(0.026,0.027,246);
dist=[dist1 dist2 dist3 dist4 dist5 dist6 dist7 dist8 dist9 dist10];
接下來是一些參數設定~在此我就不打出來~
接下來是我試的三種方法
% ===================version 1===================
X=dist;
model=(1/R^2)*(mu0*(N^4)*S/8/m)*(((X+L).*log((r2+sqrt((r2^2)+(X+L).^2))/
(r1+sqrt((r1^2)+(X+L).^2)))+X.*log((r1+sqrt((r1^2)+X.^2))/
(r2+sqrt((r2^2)+X.^2)))).^2-((X+delta_X+L).*log((r2+sqrt((r2^2)+
(X+delta_X+L).^2))/(r1+sqrt((r1^2)+(X+delta_X+L).^2)))+
(X+delta_X).*log((r1+sqrt((r1^2)+(X+delta_X).^2))/
(r2+sqrt((r2^2)+(X+delta_X).^2)))).^2);
model=fix(1./model.*1000);
plot(X,model)
max(model) % max = 3869
min(model)
% ===================version 1===================
% ===================version 2 (for迴圈)===================
MODEL=[];
x=[];
for a=1:1:1312
X=dist(a);
model=(1/R^2)*(mu0*(N^4)*S/8/m)*(((X+L)*log((r2+sqrt((r2^2)+(X+L)^2))/
(r1+sqrt((r1^2)+(X+L)^2)))+X*log((r1+sqrt((r1^2)+X^2))/
(r2+sqrt((r2^2)+X^2))))^2-((X+delta_X+L)*log((r2+sqrt((r2^2)+
(X+delta_X+L)^2))/(r1+sqrt((r1^2)+(X+delta_X+L)^2)))+
(X+delta_X)*log((r1+sqrt((r1^2)+(X+delta_X)^2))/
(r2+sqrt((r2^2)+(X+delta_X)^2))))^2);
MODEL=[MODEL model];
x=[x X];
end
MODEL_new=fix(1./MODEL*1000);
plot(x,MODEL_new);
max(MODEL_new) % max = 3134
min(MODEL_new)
% ===================version 2===================
方法一和二都是使用自行建造的dist~
下面的方法三就是直接使用linspace
% ===================version 3 (矩陣點乘)===================
X=linspace(0.017,0.027,1312);
model=(1/R^2)*(mu0*(N^4)*S/8/m)*(((X+L).*log((r2+sqrt((r2^2)+(X+L).^2))/
(r1+sqrt((r1^2)+(X+L).^2)))+X.*log((r1+sqrt((r1^2)+X.^2))/
(r2+sqrt((r2^2)+X.^2)))).^2-((X+delta_X+L).*log((r2+sqrt((r2^2)+
(X+delta_X+L).^2))/(r1+sqrt((r1^2)+(X+delta_X+L).^2)))+
(X+delta_X).*log((r1+sqrt((r1^2)+(X+delta_X).^2))/
(r2+sqrt((r2^2)+(X+delta_X).^2)))).^2);
model=fix(1./model.*1000);
plot(X,model)
max(model) % max = 4046
min(model)
% ===================version 3===================
最後自己也試了使用0.027直接代入model和下面fix那式子
結果和for迴圈的情況一樣~最大值為3134
想請問的是
1.為什麼會出現這樣子的差別呢??
2.是否使用for迴圈算出來的才是正確的值呢@@?
3.為何矩陣點乘會出現這樣子的情況@@?不是應該和for迴圈一樣才對@@?
最後附上程式碼
http://www.badongo.com/file/15809350
挨~弄了好一陣子~目前都不知道為何T_T
很感謝各位大大的協助~
小弟錢不是很多~
但是願意出1000p給解決問題的大大
再次感謝各位!!
謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.176.166
推
07/03 16:13, , 1F
07/03 16:13, 1F
→
07/03 16:13, , 2F
07/03 16:13, 2F
→
07/03 16:16, , 3F
07/03 16:16, 3F
※ 編輯: gmpalex 來自: 140.138.176.166 (07/03 16:29)
→
07/03 16:29, , 4F
07/03 16:29, 4F
→
07/03 16:30, , 5F
07/03 16:30, 5F
推
07/04 00:26, , 6F
07/04 00:26, 6F
→
07/06 08:34, , 7F
07/06 08:34, 7F
推
07/06 10:03, , 8F
07/06 10:03, 8F
→
07/08 18:33, , 9F
07/08 18:33, 9F
→
07/08 18:33, , 10F
07/08 18:33, 10F