ci最小二乘法定义(摘抄于百度百科):
基本思路(摘抄于百度百科):
简单的来说,最小二乘法为一类线性算法,将需要求解的系数当作未知数,f(x)与x当作已知数,通过多组对应关系求得系数的方法。
所以,最小二乘法仅适合系数为一次项方程式
例如:,k与b作为系数是可通过最小二乘法求的
而:,A作为系数,是不可通过最小二乘法求得的
理论过程:
当圆心为(0,0),半径为r时,可得圆的方程式为:
令圆心为(h,k)时,
圆方程为:
这是在连续数据的情况下,我们将其代入离散数据点的情况:
圆方程为:
展开式为:
为了简化方程式,令
则方程为:
既误差函数为:
对误差函数的二次进行求导,已知E=0,既误差函数的二次方对任何数求导均为0:
所以:
推得:
展开并化简得:
系数放等号左边,常数放等号右边
使用矩阵表示既为
其中
、、
、、
、、
求解矩阵方程既可得到圆心(h,k)
可以利用克莱姆求解矩阵方程
解得:
、、
此方法和推导同样适合多项式方程、椭圆方程等,这边不再做详细介绍
MATLAB代码(为MATLAB R2022版本下.mlapp回调代码):文章来源:https://www.toymoban.com/news/detail-427300.html
[file,path] = uigetfile;
if isempty(file)
return;
end
if ~contains(file,'.csv')
msgbox("请确定选择文件为<.csv>文件后重试!")
return;
end
filepath=strcat(path,file);
LineData=readtable(filepath);
LineAll=table2array(LineData);
LineX=LineAll(:,1);
Liney=LineAll(:,2);
nSum=0;
XSum=0;
YSum=0;
XYSum=0;
X2Sum=0;
Y2Sum=0;
X2YSum=0;
XY2Sum=0;
X3Sum=0;
Y3Sum=0;
N=size(LineX);
for i=1:N
nSum=nSum+1;
XSum=XSum+LineX(i);
YSum=YSum+Liney(i);
XYSum=XYSum+LineX(i)*Liney(i);
X2Sum=X2Sum+LineX(i)*LineX(i);
Y2Sum=Y2Sum+Liney(i)*Liney(i);
X2YSum=X2YSum+LineX(i)*LineX(i)*Liney(i);
XY2Sum=XY2Sum+LineX(i)*Liney(i)*Liney(i);
X3Sum=X3Sum+LineX(i)*LineX(i)*LineX(i);
Y3Sum=Y3Sum+Liney(i)*Liney(i)*Liney(i);
end
C11=2*X2Sum;
C12=2*XYSum;
C13=-1*XSum;
C21=2*XYSum;
C22=2*Y2Sum;
C23=-1*YSum;
C31=2*XSum;
C32=2*YSum;
C33=-1*nSum;
R1=X3Sum+XY2Sum;
R2=X2YSum+Y3Sum;
R3=X2Sum+Y2Sum;
M1=[C11,C12,C13;
C21,C22,C23;
C31,C32,C33;];
M2=[R1;R2;R3];
M3=M1\M2;
A=M3(1);
B=M3(2);
R=sqrt((A^2+B^2-M3(3)));
Resultstring=strcat("圆心(",num2str(A),",",num2str(B),")","半径:",num2str(R));
msgbox(Resultstring);
此文章为个人知识点总结文章, 转载请标注来源。文章来源地址https://www.toymoban.com/news/detail-427300.html
到了这里,关于最小二乘法求解圆方程圆形及半径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!