数学建模社区-数学中国
标题:
在线MATLAB高手前来一看!!
[打印本页]
作者:
神帝在线
时间:
2009-8-6 13:38
标题:
在线MATLAB高手前来一看!!
x y
-32.303 18.082
-33.623 23.257
-37.209 26.523
-42.182 27.989
-47.117 26.457
-50.902 22.743
-52.23 18.26
-50.731 12.772
-47.117 26.457
-42.529 7.963
-36.87 9.408
-33.576 12.738
-32.496 19.968
-34.561 24.304
-38.462 27.116
-44.273 27.749
-48.935 25.409
-51.42 21.642
-52.09 16.517
-49.686 11.152
-45.783 8.528
-40.278 8.116
-35.54 10.533
-32.88 14.151
-32.622 21.015
-35.93 25.629
-40.631 27.703
-45.736 27.168
-49.97 24.216
-52.157 19.489
-51.594 14.296
-48.322 10.049
-44.249 8.184
-39.064 8.313
-34.761 11.227
-32.407 16.009
36个点的坐标,我们想用最小二乘法拟合成圆,求出圆心,并确定半径。编程如下:
function
[xc,yc,R,a] = circfit(x,y)
%
[xc yx R] = circfit(x,y)
%
圆心为 (yc,xc) 半径为 R
%
x^2+y^2+a*x+b*y+c=0
%
用最小二乘法,xc=-0.5a(1),yc=-0.5a(2)
x=x(; y=y(;
abc=[x y ones(size(x))]\[-(x.^2+y.^2)];
a=abc(1);
b=abc(2);
c=abc(3);
xc = -.5*a;
yc = -.5*b;
R
=
sqrt((a^2+b^2)/4-c)
th = linspace(0,2*pi,200)';
plot(x,y,'o'), title(' measured points')
pause(1)
% 由以上数据拟合圆
[xc,yc,Re,a] = circfit(x,y);
xe = Re*cos(th)+xc; ye = Re*sin(th)+yc;
plot(x,y,'o',[xe;xe(1)],[ye;ye(1)],'-.'),
title(' measured fitted and true circles')
legend('measured','fitted')
text(xc-Re*0.9,yc,sprintf('center (%g , %g );
R=%g',xc,yc,Re))
xlabel x, ylabel y
axis equa
我电脑的MATLAB打不开了,希望MATLAB高手运行下,出个结果。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5