一道MATLAB题,求助啊 求助一道MATLAB作图题

Matlab\u7684\u4e00\u9053\u9898\u76ee\uff0c\u6709\u5927\u795e\u80fd\u5e2e\u5fd9\u89e3\u51b3\u4e00\u4e0b\u5417\uff1f\u8c22\u8c22~

\u6211\u9996\u5148\u7f16\u5199\u4e86\u51fd\u6570\u6587\u4ef6iteraplot.m\uff0c\u5982\u4e0b
function iteraplot(n,x0,y0) x = x0*ones(1,n); y = y0*ones(1,n); for i = 1:n-1 x(i+1) = 1+y(i)-1.4*x(i)^2; y(i+1) = 0.3*x(i); end plot(x,y,'.');end\u8fd0\u884c
iteraplot(30000,0,0)\u7ed3\u679c\u5982\u4e0b\u56fe

(1)plot\u65b9\u6cd5\uff1a
t=0:0.01:pi;
x=sin(3*t).*cos(t);
y=sin(3*t).*sin(t);
plot(x,y)

(2)ezplot\u65b9\u6cd5\uff1a
syms x y t;
x=sin(3*t)*cos(t);
y=sin(3*t)*sin(t);
ezplot(x,y)

题主并没有把问题描述清楚。


其实这是一个单一设施选址问题,其中的ai对应的是平面上点的坐标,wi为各点的权重。所谓【f是一个特定函数】说的很含糊,其实f是所选点与各已知点距离的加权和,而迭代的目标则是让f达到最小值。

这是一个无约束优化问题,可用fminunc直接求解:

% 常数定义
a1 = [2; 0]; a2 = [4; 10]; a3 = [8; 3]; a4 = [3; 5]; a5 = [5; 7];
w1 = 6; w2 = 2; w3 = 7; w4 = 5; w5 = 4;
e = 1e-6;

% 为便于统一处理,使用数组
A = [a1 a2 a3 a4 a5];
W = [w1 w2 w3 w4 w5];

% 初值
x0 = rand(2,1) * 10;

% 定义求范数和目标函数的匿名函数
n = @ (x) arrayfun( @ (i) norm( A(:,i) - x), 1:length(W) );
f = @ (x) sum( W .* n(x) ); 
x=fminunc(f,x0,optimset('LargeScale','off', 'display', 'off'))

 

如果用题主贴出的来式子编程序,代码如下:

% 常数定义
a1 = [2; 0]; a2 = [4; 10]; a3 = [8; 3]; a4 = [3; 5]; a5 = [5; 7];
w1 = 6; w2 = 2; w3 = 7; w4 = 5; w5 = 4;
e = 1e-6;
% 为便于统一处理,使用数组
A = [a1 a2 a3 a4 a5];
W = [w1 w2 w3 w4 w5];
% 初值
x0 = rand(2,1) * 10;
% 定义求范数和目标函数的匿名函数
n = @ (x) arrayfun( @ (i) norm( A(:,i) - x), 1:length(W) );
f = @ (x) sum( W .* n(x) );
% 迭代
while true
    N = n(x0);
    x = sum( [W; W] .* A ./ [N; N], 2 ) / sum( W ./ N, 2 );
    
    % 若满足精度要求,退出循环
    if abs( f(x) - f(x0) ) <= f(x0) * e
        break
    end
    x0 = x;
end
x

其实,迭代的终止条件除题主所给的目标函数相对误差(TolFun)之外,常见的还有变量本身的允许误差(TolX)以及迭代次数(MaxIter)等。

 

下面给出一个增加了绘图示意的版本。等值线为目标函数,各已知点根据权重以不同大小表示,动画示意了从不同初值经迭代到达最优点的过程。

% 常数定义
a1 = [2; 0]; a2 = [4; 10]; a3 = [8; 3]; a4 = [3; 5]; a5 = [5; 7];
w1 = 6; w2 = 2; w3 = 7; w4 = 5; w5 = 4;
e = 1e-6;
% 为便于统一处理,使用数组
A = [a1 a2 a3 a4 a5];
W = [w1 w2 w3 w4 w5];
% 初值(随机生成)
x0 = rand(2,1) * 10;
% 定义求范数和目标函数的匿名函数
n = @ (x) arrayfun( @ (i) norm( A(:,i) - x), 1:length(W) );
f = @ (x) sum( W .* n(x) );
% 绘图
clf
ezcontour(@(x,y)arrayfun(@(x,y)f([x;y]),x,y),[-3 12 -1 11])
hold on
for i = 1 : length(W)
    plot(A(1,i), A(2,i), 'o', 'MarkerSize', W(i)*2, 'MarkerFace', 'c' );
    text(A(1,i)+0.4, A(2,i), sprintf('(%g, %g)', A(:,i)));
end
h2 = plot(x0(1), x0(2), ':.', 'color', [1 1 1]*0.8);
h1 = plot(x0(1), x0(2), 'r*');
h3 = title('');
axis equal
colorbar
X = x0;
% 迭代
while true
    N = n(x0);
    x = sum( [W; W] .* A ./ [N; N], 2 ) / sum( W ./ N, 2 );
    
    % 更新绘图
    X = [X x];
    set(h2, 'XData', X(1,:), 'YData', X(2,:))
    set(h1, 'XData', x(1), 'YData', x(2))
    set(h3, 'str', sprintf('Current point: (%.4f, %.4f), f(x) = %.6f', x, f(x)) );
    drawnow
    pause(0.5)
    
    % 若满足精度要求,退出循环,否则以新的值继续迭代
    if abs( f(x) - f(x0) ) <= f(x0) * e
        set(h1, 'Color', 'g', 'Marker', 'p', 'MarkerFace', 'g')
        break
    end
    x0 = x;
end

参考:

Weiszfeld 算法



QQ号给我,我知道

  • 澶т浆鏁戝懡杩matlab棰鎬庝箞鍋?
    绛旓細銆matlab姹傝В銆戞眰瑙f楠わ細绗竴姝ワ紝鏍规嵁棰勪及鏍℃Euler娉曠殑杩唬寮忥紝缂栧啓鍏跺嚱鏁帮紝濡侲uler_Cauchy锛坒unc,x0,y0,xf,h锛夎繖閲岋紝func鈥斺旇〃绀哄井鍒嗘柟绋嬶紝x0,y0鈥斺旇〃绀哄井鍒嗘柟绋嬪垵濮嬪硷紝xf鈥斺旇〃绀簒鐨勭粓鍊硷紝hf鈥斺旇〃绀烘闀 绗簩姝ワ紝缂栧啓寰垎鏂圭▼鍑芥暟锛屽嵆 function f=func(x,y);f(1)=y-2*x/y;f=f(:...
  • 涓閬揗ATLAB棰,姹傚姪鍟
    绛旓細% 瀹氫箟姹傝寖鏁板拰鐩爣鍑芥暟鐨勫尶鍚嶅嚱鏁皀 = @ (x) arrayfun( @ (i) norm( A(:,i) - x), 1:length(W) );f = @ (x) sum( W .* n(x) ); x=fminunc(f,x0,optimset('LargeScale','off', 'display', 'off'))濡傛灉鐢ㄩ涓昏创鍑虹殑鏉ュ紡瀛愮紪绋嬪簭锛屼唬鐮佸涓嬶細甯告暟瀹氫箟a1 = [2; 0];...
  • 涓閬搈atlab棰,鍝綅澶х鍙互鎸囨暀鎸囨暀鍛,闈炲父鎬!!!
    绛旓細棰樹富鐨勯棶棰橈紝鍙互杩欐牱澶勭悊锛1銆佷娇鐢ㄩ殢鏈烘暟鍑芥暟锛岀敓鎴愩恗锛宯銆戣寖鍥村唴鐨勬鏁存暟锛屽嵆fix(unifrnd(m,n,1,100))2銆佸埄鐢╢or寰幆璇彞锛屾煡鎵剧鍚7鍊嶈姹傜殑鐨勬鏁存暟 3銆佸埄鐢╥f鍒ゆ柇璇彞锛屽綋婊¤冻A(i)/7==fix(A(i)/7)琛ㄨ揪寮忥紝搴攄isp鍑芥暟绯绘暟A鍊 4銆佸疄鐜颁唬鐮 m=100;n=400;A=fix(unifrnd(m,n,1,10...
  • 涓閬搈atlab棰,鏈涘摢浣嶅ぇ铏惧府蹇欏仛涓涓嬪搱,浠婂ぉ鎬ラ渶!!!1
    绛旓細瑙o細璁剧涓骞存姇璧勭粰A銆丏鍒嗗埆涓簒1銆亁2锛岀浜屽勾鎶曡祫缁橝銆丆銆丏鍒嗗埆涓簒3銆亁4銆亁5锛岀涓夊勾鎶曡祫缁橝銆丅銆丏鍒嗗埆涓簒6銆亁7銆亁8锛岀鍥涘勾鎶曡祫缁檟9銆亁10锛岀浜斿勾鎶曡祫缁橠涓簒11,y涓虹浜斿勾鏈殑鏈伅鎬婚锛屽垯绾︽潫鏉′欢涓猴細x1+x2=10 x3+x4+x5=x2*1.06 x6+x7+x8=x1*1.15+x5*1.06 x9+x10=x3*1...
  • 姹傝В涓閬揗ATLAB鐨勯棶棰,娑夊強鎸傜闂,姹傚ソ蹇冧汉鍟
    绛旓細plot3(YourName(:,1), YourName(:,2), YourName(:,3), '.')(10)figure(6)imshow(uint8(YourName + 10 * randn(size(YourName)))(11)figure(7)mesh(YourName)(12)rand('state',110810131)r = rand(size(YourName));YourName(r>=0.8) = 255;figure(8)imshow(uint8(YourName))...
  • 涓閬揗atlab浠跨湡棰,濡傚浘,杩欎釜瑕佹庝箞鍋氬晩?鏄洿鎺ョ粯鍥句箣绫荤殑?
    绛旓細棰樹富缁欏嚭鐨涓閬纾佸寲鏇茬嚎Matlab浠跨湡棰橈紝鍙互鎸変笅鍒楁柟娉曟潵鍋氾細1銆佸垎鍒皢宸茬煡鏁版嵁璧嬪肩粰B鍜孒銆傚嵆 B=[0.1锛0.2 銆傘傘傦紝1.6]H=[5锛10 銆傘傘傦紝10000]2銆佷娇鐢╬lot鍑芥暟锛岀粯鍒跺熀鏈鍖栨洸绾垮浘銆傚嵆 plot(B,H)xlabel('B/(T)');ylabel('H(A/m)')3銆侀娴嬪硷紝鍙互...
  • 銆愭ユ眰绛旀銆matlab缂栫▼棰
    绛旓細棰樹富鐨勭紪绋嬮 闂棰橈紝鍙互杩欐牱鏉ヨВ鍐炽傦紙1锛夋眰y鐨勫钩鍧囧间笌鏍囧噯宸倅鐨勫钩鍧囧间娇鐢╩ean锛堬級鍑芥暟璁$畻锛泍鐨勬爣鍑嗗樊浣跨敤std锛堬級鍑芥暟璁$畻锛涘嵆 Y_mean=mean(y)Y_std=std(y)锛2锛夌敤涓夋鏍锋潯鎻掑兼柟娉曟眰x姣忔敼鍙0.1鏃秠鐨勫笺備娇鐢╥nterp1锛堬級鍑芥暟杩涜鎻掑艰绠楋紝鍗 xi=0:0.1:15 yi=interp1(x,y,xi,...
  • matlab鑰冭瘯棰樻眰甯姪!璋㈣阿
    绛旓細绗1棰橈細x1=0:pi/10:3*pi;t1=linspace(0,3*pi,3*10+1);绗2棰橈細a=zeros(4,6);b=ones(4,6);c=10+ceil(rand(4)*10);d=diag(0:10);绗3棰橈細x=linspace(-4*pi,4*pi,100);y1=sin(x)+cos(x);y2=2*sin(2*x+pi/3)+1;plot(x,y1,'r^',x,y2,'b-')title('y_1 ...
  • matlab缂栫▼闂
    绛旓細闂鎻忚堪:鎴戠涓娆℃帴瑙matlab锛浣嗚佸笀灏辫姹傛垜浠敤瀹冩潵缂栫▼浜 鏃犱粠涓嬫墜 棰樼洰锛1銆傝鏂圭▼鐨勬牴涓篨锛漑-3,-5,-8,-9],缂栧啓MATLAB绋嬪簭姹備粬浠搴旂殑X澶氶」寮忕殑绯绘暟銆2銆 璁緁(x)=1/((x-2)^2+0.1) +1/((x-3)^4+0.01),鍐欏嚭涓涓狹ATLAB鍑芥暟绋嬪簭f31.m,浣垮緱璋冪敤f1鏃讹紝x鍙敤璺濋樀浠e叆锛屽緱鍑...
  • MATLAB鍑犱釜绠鍗曢棶棰樻眰瑙,濂界殑璇濆姞鍒嗗晩
    绛旓細1銆佹病鐪嬫槑鐧介鎰 2銆佸懡浠や负x=0:0.1*pi:4*pi锛岃В閲婏細0琛ㄧず璧峰鍊硷紝0.1*pi琛ㄧず姝ラ暱锛4*pi琛ㄧず缁堟鍊硷紱鑻0.1*pi绌虹潃锛屽嵆鎸囦护涓簒=0:4*pi锛屽垯姝ラ暱榛樿涓1锛屼互0涓哄垵鍊硷紝x鐨勮寖鍥翠笉瓒呰繃4*pi锛屼緥濡倄=1:2.5锛屽垯x=[1 2]锛屾敞鎰弍i涓matlab閲岃〃绀合鐨勫父閲忋3銆亁=logspace(0,2,3)鐢熸垚x=...
  • 扩展阅读:万能搜题神器app ... matlab online ... matlab在线搜题 ... matlab在线帮助 ... 编程题拍照搜答案软件 ... matlab作业题答案 ... matlab专用搜题软件 ... matlab有什么搜题软件 ... matlab第三版课后实验9 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网