作业帮 > 数学 > 作业

已经一个圆上的20个点,如何用matlab求解它的圆心和直径?

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/09 18:10:43
已经一个圆上的20个点,如何用matlab求解它的圆心和直径?
已知有一组受正态噪声污染的数据 ;又已知在无噪时,这组数据服从圆方程模型 ,请问该圆的圆心位置和圆半径是多少.
这组数据是;xw =
3.1052
3.8423
4.5251
4.9652
5.4301
5.4716
5.2676
4.7848
4.1814
3.4148
2.6115
1.7684
1.1906
0.7348
0.5294
0.5733
0.9312
1.5530
2.1444
2.9559
yw =
0.4832
0.3132
-0.0494
-0.6315
-1.3831
-2.2732
-3.0294
-3.6683
-4.2106
-4.4588
-4.4185
-4.2554
-3.6964
-2.9994
-2.2558
-1.4874
-0.6093
-0.0245
0.3906
0.5101
用分段拟合,把原始的xw,yw重新排列.
function BETA1=hh
clear;clc
xw =[ 5.4716 5.2676 4.7848 4.1814 3.4148 2.6115 1.7684 1.1906 0.7348 0.5294 0.5733 0.9312 1.5530 2.1444 2.9559 3.1052 3.8423 4.5251 4.9652 5.4301];
yw =[-2.2732 -3.0294 -3.6683 -4.2106 -4.4588 -4.4185 -4.2554 -3.6964 -2.9994 -2.2558 -1.4874 -0.6093 -0.0245 0.3906 0.5101 0.4832 0.3132 -0.0494 -0.6315 -1.3831 ];
BETA0=[3 -2 2.5] %分别为圆心a、b的坐标和半径R的初始值
BETA1= NLINFIT(xw(1:10),yw(1:10),@myfun1,BETA0)
BETA2= NLINFIT(xw(11:end),yw(11:end),@myfun2,BETA0)
t=0:pi/20:2*pi;
x1=BETA1(3)*cos(t)+BETA1(1);y1=BETA1(3)*sin(t)+BETA1(2);
x2=BETA2(3)*cos(t)+BETA2(1);y2=BETA2(3)*sin(t)+BETA2(2);
plot(xw,yw,'o',x1,y1,x2,y2)
axis equal
function y1=myfun1(beta,x)
y1=beta(2)-sqrt(beta(3).^2-(x-beta(1)).^2);
function y2=myfun2(beta,x)
y2=beta(2)+sqrt(beta(3).^2-(x-beta(1)).^2);
结果:
BETA1 =
3.0013 -2.0032 2.4847
BETA2 =
3.0068 -2.0292 2.4972
取两个半圆的平均值即可,如果能用极坐标拟合,效果可能更好些,可以暂时俺不会.
图形见:
http://hi.baidu.com/chemical%5Fengineering/album/item/a8f6861821206ab94bedbc33.html
直接在editor里运行即可.