怎样用matlab拟合,怎么用用matlab拟合两条直线
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
clc;clear all;close all;%%%二維直線擬合
%%%生成隨機數據
%內點
mu=[0 0]; %均值
S=[1 2.5;2.5 8]; %協方差
data1=mvnrnd(mu,S,200); %產生200個高斯分布數據
%外點
mu=[2 2];
S=[8 0;0 8];
data2=mvnrnd(mu,S,100); %產生100個噪聲數據
%合并數據
data=[data1',data2'];
iter = 100; %%% 繪制數據點
figure;plot(data(1,:),data(2,:),'o');hold on; % 顯示數據點
number = size(data,2); % 總點數
bestParameter1=0; bestParameter2=0; % 最佳匹配的參數
sigma = 1;
pretotal=0; %符合擬合模型的數據的個數 for i=1:iter
%%% 隨機選擇兩個點
idx = randperm(number,2);
sample = data(:,idx); %%%擬合直線方程 y=kx+b
line = zeros(1,3);
x = sample(:, 1);
y = sample(:, 2); k=(y(1)-y(2))/(x(1)-x(2)); %直線斜率
b = y(1) - k*x(1);
line = [k -1 b] mask=abs(line*[data; ones(1,size(data,2))]); %求每個數據到擬合直線的距離
total=sum(maskpretotal %找到符合擬合直線數據最多的擬合直線
pretotal=total;
bestline=line; %找到最好的擬合直線
end
end
%顯示符合最佳擬合的數據
mask=abs(bestline*[data; ones(1,size(data,2))])
hold on;
k=1;
for i=1:length(mask)
if mask(i)
inliers(1,k) = data(1,i);
k=k+1;
plot(data(1,i),data(2,i),'+');
end
end %%% 繪制最佳匹配曲線
bestParameter1 = -bestline(1)/bestline(2);
bestParameter2 = -bestline(3)/bestline(2);
xAxis = min(inliers(1,:)):max(inliers(1,:));
yAxis = bestParameter1*xAxis + bestParameter2;
plot(xAxis,yAxis,'r-','LineWidth',2);
title(['bestLine: y = ',num2str(bestParameter1),'x + ',num2str(bestParameter2)]);
總結
以上是生活随笔為你收集整理的怎样用matlab拟合,怎么用用matlab拟合两条直线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取要素集中字段的唯一值
- 下一篇: 第二十九节 MT-iBeacon基站关