Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-09-17
年龄: 38
帖子: 5
声望力: 0 ![]() |
![]()
x=[38.8490, 37.7060, 31.1880, 20.2380, 6.86600, -6.59400, -18.0560, -26.1350, -30.3280, -30.8140, -28.0350, -22.5420, -14.7820, -5.25900, 5.47500, 16.5870, 26.8930, 34.8520];
y=[ 0., 13.7240, 26.1070, 35.0530, 38.9340, 37.4020, 31.2760, 21.9310, 11.0390, .1000e-2, -10.2040, -18.9150, -25.6030, -29.8250, -31.0490, -28.7290, -22.5650, -12.6840]; function [xc,yc,R,a] = circfit(x,y) %CIRCFIT Fits a circle in x,y plane % % [XC, YC, R, A] = CIRCFIT(X,Y) % Result is center point (yc,xc) and radius R.A is an % optional output describing the circle’s equation: % % x^2+y^2+a(1)*x+a(2)*y+a(3)=0 % by Bucher izhak 25/oct/1991 n=length(x); xx=x.*x; yy=y.*y; xy=x.*y; A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)]; B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)]; a=A\B; xc = -.5*a(1); yc = -.5*a(2); R = sqrt((a(1)^2+a(2)^2)/4-a(3)); |
![]() |
![]() |
![]() |
#2 |
高级会员
注册日期: 2008-05-31
年龄: 38
帖子: 104
声望力: 19 ![]() |
![]()
首先我不知道你学过matlab没有,得弄清楚几个问题:m文件,函数文件,主函数和子函数的意义和关系。
如果你想在一个文件内调用circfit的话可以写成这样,把circfit当成一个子函数: function [xc,yc,R,a] =shiyan x=[38.8490, 37.7060, 31.1880, 20.2380, 6.86600, -6.59400, -18.0560, -26.1350,... -30.3280, -30.8140, -28.0350, -22.5420, -14.7820, -5.25900, 5.47500, 16.5870, 26.8930, 34.8520]; y=[ 0., 13.7240, 26.1070, 35.0530, 38.9340, 37.4020, 31.2760, 21.9310, 11.0390,... .1000e-2, -10.2040, -18.9150, -25.6030, -29.8250, -31.0490, -28.7290, -22.5650, -12.6840]; [xc,yc,R,a] = circfit(x,y); function [xc,yc,R,a] = circfit(x,y) n=length(x); xx=x.*x; yy=y.*y; xy=x.*y; A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)]; B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)]; a=A\B; xc = -.5*a(1); yc = -.5*a(2); R = sqrt((a(1)^2+a(2)^2)/4-a(3)); |
![]() |
![]() |