%% 資料邊界
clear all; close all;clc;
% %% 資料
data = load ('ftp_75_gear.txt'); %匯入工況資料
data=data(1:end,:);
time=data(:,1);
speed=data(:,2);
%% 求出曲線的垂直距離為2的包絡線
x=time;
y=speed;
r=2;
ratio=zeros(length(x),1);
%% 對於乙個點有兩個斜率,做兩條垂線,按照垂線相交點
for i=1:1:length(x)-1 %求斜率
deta_y=y(i+1)-y(i);
deta_x=x(i+1)-x(i);
ratio(i)=atan(deta_y/deta_x);
endratio(length(x))=ratio(length(x)-1);
ratio_m=zeros(length(x),1); %求斜率
ratio_m(1)=0;
ratio_m(2:length(x))=ratio(1:length(x)-1);
%% 求出曲線的垂直距離為2的包絡線
for i=1:length(x)
k=pi/2+ratio(i);
a0(i)=x(i)+r*cos(k);
b0(i)=y(i)+r*sin(k);
end%% 同乙個點的第二個值
for i=1:length(x)
k=pi/2+ratio_m(i);
a_1(i)=x(i)+r*cos(k);
b_1(i)=y(i)+r*sin(k);
endfor i=2:length(x)-1
x_intersect=a0(i);
y_intersect=b0(i);
if( abs(ratio(i)-ratio_m(i))>5/180*pi)
m_x=[a0(i),a_1(i+1)];
m_y=[b0(i),b_1(i+1)];
p1=polyfit(m_x,m_y,1);
m_x1=[a0(i-1),a_1(i)];
m_y1=[b0(i-1),b_1(i)];
p2=polyfit(m_x1,m_y1,1);
x_intersect = fzero(@(x) polyval(p1-p2,x),3);
y_intersect = polyval(p1,x_intersect);
endx_plot(i)=x_intersect;
y_plot(i)=y_intersect;
end x_plot(length(x))=x_plot(length(x)-1);
y_plot(length(x))= y_plot(length(x)-1);
%% 求每點豎直線與包絡線的交點
a_m=zeros(length(x_plot),1);
for i=1:length(x)
record=-ones(length(x),1)*2;
for j=1:length(x)-2
if( ( x(i)+10^(-8)>min(x_plot(j),x_plot(j+1))|| x(i)==min(x_plot(j),x_plot(j+1)) ) ...
&& (x(i)5/180*pi)
m_x=[a0(i),a_1(i+1)];
m_y=[b0(i),b_1(i+1)];
p1=polyfit(m_x,m_y,1);
m_x1=[a0(i-1),a_1(i)];
m_y1=[b0(i-1),b_1(i)];
p2=polyfit(m_x1,m_y1,1);
x_intersect = fzero(@(x) polyval(p1-p2,x),3);
y_intersect = polyval(p1,x_intersect);
endxx_plot(i)=x_intersect;
yy_plot(i)=y_intersect;
end xx_plot(length(x))=xx_plot(length(x)-1);
yy_plot(length(x))= yy_plot(length(x)-1);
%% 求每點豎直線與包絡線的交點
a_mm=zeros(length(x),1);
for i=1:length(x)
record=ones(length(x),1)*100;
for j=1:length(x)-1
if( ( x(i)>min(xx_plot(j),xx_plot(j+1))|| x(i)==min(xx_plot(j),xx_plot(j+1)) ) ...
&& (x(i)
m_x=xx_plot(j:j+1);
m_y=yy_plot(j:j+1);
fit_par=polyfit(m_x,m_y,1);% 計算一次函式的斜率 與 b
record(j)= x(i)*fit_par(1)+fit_par(2);
end
enda_mm(i)=min(record);
endfigure;
% plot(x,a_m-y,'k');
% hold on;
plot(x,y-a_mm,'k');
hold on;
figure;
plot(x,y,'r-');
hold on;
plot(x,a_m,'k');
hold on;
plot(x,a_mm,'k');
hold on;
散點資料的包絡線獲取(MATLAB)
在科研資料處理當中,往往會遇到許多不規則的散點資料,通過程式將這些資料的包絡線 envelope 進行描述可以更好地展現資料的取值範圍。在進行資料統計當中,對於樣本資料報絡線的描述一般不可或缺。這裡採用matlab軟體,自己編寫了一段描述散點資料報絡線的 也是我平時使用的 與大家交流協同改進。x 散...
matlab 求時間序列資料的包絡線
影象展示 但是對於時間序列資料我們求包絡線的過程中有時候想保留對應的時間值,而不僅僅是看個熱鬧。上面鏈結中第三步 第乙個問題 包絡線的生成,需要將原資料分成等寬度的小段,每段取乙個最高點所對應的橫座標和縱座標 其實它根根沒有取每段最高點多對應的橫座標,從最後一步生成的橫座標可以看出來。第二個問題 比...
判斷兩個矩形 外包絡線 是否相交
首先考慮什麼是相交,在gis中相交是怎麼定義的,請參考部落格gis中相交的定義 ogc相交的定義 定義我們明白了,就是兩個矩形的有公共的部分,我們分為三種情況去寫。那麼問題來了,這麼多種情況,每個都進行判斷比較麻煩,用一種方法能不能解決這樣的四種情況,答案是可以的,就叫做包絡線發吧。很容易從圖中看出...