最小二乘拟合平面和直线matlab

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用Matlab实现直线和平面的拟合

1、直线拟合的matlab代码

% Fitting a best-fit line to data, both noisy and non-noisy

x = rand(1,10);

n = rand(size(x)); % Noise

y = 2*x + 3; % x and y satisfy y = 2*x + 3

yn = y + n; % x and yn roughly satisfy yn = 2*x + 3 due to the noise % Determine coefficients for non-noisy line y=m1*x+b1

Xcolv = x(:); % Make X a column vector

Ycolv = y(:); % Make Y a column vector

Const = ones(size(Xcolv)); % Vector of ones for constant term Coeffs = [Xcolv Const]\Ycolv; % Find the coefficients

m1 = Coeffs(1);

b1 = Coeffs(2);

% To fit another function to this data, simply change the first

% matrix on the line defining Coeffs

% For example, this code would fit a quadratic

% y = Coeffs(1)*x^2+Coeffs(2)*x+Coeffs(3)

% Coeffs = [Xcolv.^2 Xcolv Const]\Ycolv;

% Note the .^ before the exponent of the first term

% Plot the original points and the fitted curve

figure

plot(x,y,'ro')

hold on

x2 = 0:0.01:1;

y2 = m1*x2+b1; % Evaluate fitted curve at many points

plot(x2, y2, 'g-')

title(sprintf('Non-noisy data: y=%f*x+%f',m1,b1))

% Determine coefficients for noisy line yn=m2*x+b2

Xcolv = x(:); % Make X a column vector

Yncolv = yn(:); % Make Yn a column vector

Const = ones(size(Xcolv)); % Vector of ones for constant term NoisyCoeffs = [Xcolv Const]\Yncolv; % Find the coefficients

m2 = NoisyCoeffs(1);

b2 = NoisyCoeffs(2);

% Plot the original points and the fitted curve

figure

plot(x,yn,'ro')

hold on

x2 = 0:0.01:1;

yn2 = m2*x2+b2;

plot(x2, yn2, 'g-')

title(sprintf('Noisy data: y=%f*x+%f',m2,b2))

2、平面拟合matlab代码

x = rand(1,10);

y = rand(1,10);

z = (3-2*x-5*y)/4; % Equation of the plane containing

% (x,y,z) points is 2*x+5*y+4*z=3

Xcolv = x(:); % Make X a column vector

Ycolv = y(:); % Make Y a column vector

Zcolv = z(:); % Make Z a column vector

Const = ones(size(Xcolv)); % Vector of ones for constant term

Coefficients = [Xcolv Ycolv Const]\Zcolv; % Find the coefficients

XCoeff = Coefficients(1); % X coefficient

YCoeff = Coefficients(2); % X coefficient

CCoeff = Coefficients(3); % constant term

% Using the above variables, z = XCoeff * x + YCoeff * y + CCoeff

L=plot3(x,y,z,'ro'); % Plot the original data points

set(L,'Markersize',2*get(L,'Markersize')) % Making the circle markers larger set(L,'Markerfacecolor','r') % Filling in the markers

hold on

[xx, yy]=meshgrid(0:0.1:1,0:0.1:1); % Generating a regular grid for plotting zz = XCoeff * xx + YCoeff * yy + CCoeff;

surf(xx,yy,zz) % Plotting the surface

title(sprintf('Plotting plane z=(%f)*x+(%f)*y+(%f)',XCoeff, YCoeff, CCoeff)) % By rotating the surface, you can see that the points lie on the plane

% Also, if you multiply both sides of the equation in the title by 4,

% you get the equation in the comment on the third line of this example

如何用matlab最小二乘法进行平面拟合

相关文档
最新文档