plot(x, y, '*')
hold on
A = [x y ones(size(x))]
abc = -(A*A')\sum(A*[x'.^2 y'.^2], 2)
ox = -abc(1)/2
oy = -abc(2)/2
R = sqrt(ox^2+oy^2-abc(3))
plot(ox, oy, 'or')
t = linspace(0, 2*pi, 100)
plot(ox+R*cos(t), oy+R*sin(t))
“/”是矩阵右除的符号,对应的函数是mrdivide。矩阵右除是通过左除实现的,也就是说,A/B = (B'\A')'。“\”是矩阵左除的符号,对应的函数是mldivide。
x=A\B是线性方程组Ax=B的解,而x=B/A是线性方程组xA=B的解(如果方程组欠定或超定,则解为最小二乘意义上的)。
以你举的例子来说,相当于求3x=1,4x=2,5x=3这样一个方程组的解,显然这个方程组属于超定的情况,无解,但可以求出最小二乘解x=0.52。
使用最小二乘拟合函数可以求出相同的解来:
k=lsqcurvefit(inline('k*x','k','x'),0,[3 4 5],[1 2 3])
x=[10,20,30,35,40,50,60,70,80,90,100]'y=[2.1681,2.2030,2.2482,2.2783,2.3075,2.3687,2.4364,2.5053,2.5882,2.6663,2.7611]'
X=[ones(size(x)) x x.^2]
coe=X\y
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)