續 https://www.toutiao.com/i6766960319995576843/
設定三角形A頂點的坐標為 (x1,y1);(x2,y2);(x3,y3);隨機初始化;計算得知垂心到三個頂點距離為:R=(((x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)*(x1^2 - 2*x1*x3 + x3^2 + y1^2 - 2*y1*y3 + y3^2)*(x2^2 - 2*x2*x3 + x3^2 + y2^2 - 2*y2*y3 + y3^2))/(4*(x1*y2 - x2*y1 - x1*y3 + x3*y1 + x2*y3 - x3*y2)^2))^(1/2);
固定 R, 利用遍歷x,y坐標軸 繪制,誤差z(三個頂點到坐標(x,y)的距離和R 的差的絕對值),其3d 圖為 初始化n個 粒子群 points ,計算每個粒子的誤差,并且從小到大排序。從群體中任取另外兩個粒子,并獲取到從適應度低的到高的兩個粒子的空間向量p。以適應度最好的粒子為基準,加上每個向量p; 得到一個·新的粒子群;排序,篩選前n個;并且反復迭代第4步,直到所有粒子位置疊合。得到結果圖:x1=rand()*30;x2=rand()*30;x3=rand()*30;y1=rand()*30;y2=rand()*30;y3=rand()*30;p3=[x1,x2,x3;y1,y2,y3];triangle_x=[x1,x2,x3,x1];triangle_y=[y1,y2,y3,y1];% figurefill(triangle_x,triangle_y,'b');% mx0=rand()*60;% my0=rand()*60;points = ceil(rand(20,4)*60);for i= 1:size(points) x=points(i,1); y=points(i,2); R=points(i,3); hold on plot(x,y,'r.') points(i,4)= countDev(p3,[x,y],R);endF=getframe(gcf);I=frame2im(F);[I,map]=rgb2ind(I,256);imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.6);% pointspoints = sortrows(points,4);min00 = points(1,4);pz = size(points,1);tp = zeros((pz-1)*(pz-2)/2,4);for time=1:20 tpp=1; cla hold on fill(triangle_x,triangle_y,'b'); for rn=2:pz-1 for rn2=rn+1:pz % tp(tpp,:) = points(1,:)+ (points(1,:)- points(rn,:))+(points(1,:)- points(rn2,:)); tp(tpp,:) = points(1,:) + (points(rn,:)- points(rn2,:)); % + (points(1,:)-) x=tp(tpp,1); y=tp(tpp,2); tp(tpp,3)=abs(tp(tpp,3)); R=tp(tpp,3); % [rn,rn2] %hold on plot(x,y,'r.'); tp(tpp,4)= countDev(p3,[x,y],R); % if tpp==1 % plot(points(rn,1),points(rn,2),'r.'); % plot(points(rn2,1),points(rn2,2),'r.'); % plot(points(1,1),points(1,2),'b.'); % plot(tp(tpp,1),tp(tpp,2),'g.') % end tpp=tpp+1; end end % plot3(tp(1,1),tp(1,2),tp(1,4),'r.'); tp=sortrows([tp],4);%;points % for ii=1:size(tp,1) % if tp(ii,4) > min00 % [time,ii,size(tp,1)] % break % end % end min00 =tp(1,4); points=tp(1:pz,:); % 00 F=getframe(gcf); I=frame2im(F); [I,map]=rgb2ind(I,256); imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.6); pause(0.9);end
總結
以上是生活随笔為你收集整理的粒子群 多目标 matlab_matlab 粒子群求解三角形垂心位置的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。