[問題] 新手做二分法 最後一步求不出來已回收

看板MATLAB作者 (鳳翱九天)時間14年前 (2011/10/27 18:10), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
版上各位大大好@@ 剛開始學matlab, 試著做二分法, 只剩最後一步, 想了二天想不到方法, 所以上來請教是哪裡出問題orz ============================程式========================= x=linspace(-10,10,1000); %函數的區間 y=sin(x); %函數 dy=cos(x); %一次微分式 dyy=-sin(x); %二次微分式 I=[]; %建立一個空矩陣,將求出的t值放入 I1=[]; %建立一個空矩陣,將求出的區間放入 for t=1:1000-1 %找出微分式為0的區間 if dy(t)*dy(t+1)<=0; %用微分式堪根 I=[I;[t t+1]]; I1=[I1;[x(t) x(t+1)]]; %將求出的區間放入空矩陣 end end [m0 n0]=size(I); I2=[]; %存放極小值存在的區間 for s=1:m0-1 if dyy(I(s,1))>0 && dyy(I(s,2))>0 I2=[I2;I1(s,1) I1(s,2)]; end end I3=[]; %存放極小值 [m2 n2]=size(I2); for s2=1:m2; %依序將每個極小值的區間做bisection for s3=1:6; %做六次的二分法 x=linspace(I2(s2,1),I2(s2,2),3); %將區間切成二等分(3點) x_l=x(1); %下界 x_u=x(3); %上界 x_r=x(2); %中間 if dy(2)*dy(3)<=0; %中點與上界的y值在一次微分式同號,則令中點為新上界 x_l=x_r; x=linspace(x_r,x_u,3); %再一次將區間二等分 else dy(2)*dy(3)>0; %中點與上界的y值在一次微分式異號,則令中點為新下界 x_u=x_r; x=linspace(x_l,x_r,3); %再一次將區間二等分 end I3=[I3;y(2)]; end end =============================結束================================= 最後一個for迴圈是在做二分法 迴圈裡面跑出的x 己經是做完二分法 最後的區間 其相對應的值為 x(1), x(2), x(3) 所以x(2) 所對的y值就是最小值 我卡住的地方在於 原來的x=linspace(-10,10,1000); 不是己經被最後迴圈裡的x=linspace(x_l,x_r,3); 取代掉了嗎?? 但是y(2) 的值依然是停在一開始x=linspace(-10,10,1000); 所對應的y(2) Q:我該怎麼改 才能將y值對應到最後的x 讓I3裡放的是真正的極小值?? (除了再重寫一次y=sin(x)的方式) 感謝 m(_ _)m -- ▁▁ 達文西: ▕名 我在年的時候便開始吃相信有一天 寫▏ 會同我一樣視殺生如殺人  ▇▇ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.100.189

10/28 02:56, , 1F
可以請教一下宣告一個空的矩陣有什麼好處嘛 ? @@
10/28 02:56, 1F

10/28 03:07, , 2F
宣告完後東西就往裡面丟 然後需要什麼就直接從矩陣拿
10/28 03:07, 2F
文章代碼(AID): #1EgIumdt (MATLAB)