今天給大家帶來一款非常實用的數據擬合工具——1stOpt,是一款操作非常簡單或者說是極其人性化的擬合工具,操作輸入直接說是我們腦海裏想法的映射也不爲過。
首先通過百度百科瞭解一下它吧!
1stOpt(First Optimization)是七維高科有限公司(7D-Soft High Technology Inc.)獨立開發,擁有完全自主知識產權的一套數學優化分析綜合工具軟件包。在非線性迴歸,曲線擬合,非線性複雜工程模型參數估算求解等領域傲視羣雄,首屈一指,居世界領先地位。
下面我將使用兩個實例,通過分別使用1stopt、matlab程序擬合以及matlab工具接口cftool這三款擬合工作展開討論,對比選出最適合您的哪一款,話不多說,直接開始吧!
1.身高和年齡的關係
你不認爲“身高和年齡之間有關係嗎?”
請你們三個人分別按照每人從出生到現在每年的身高和對應的年齡記錄下來(在你本人的寶寶成長紀念冊中),製成表(註明:男生、女生,籍貫),然後分別找到它們之間的關係,用數學(函數和圖形)的方法表示出來。
姓名 年齡 |
身高(CM) |
||
張海 |
李林 |
楊平 |
|
1 |
78 |
75 |
74 |
2 |
87 |
85 |
86 |
3 |
96 |
93 |
91 |
4 |
105 |
103 |
101 |
5 |
114 |
109 |
110 |
6 |
120 |
114 |
117 |
7 |
126 |
123 |
125 |
8 |
130 |
129 |
130 |
9 |
136 |
134 |
135 |
10 |
142 |
139 |
141 |
11 |
152 |
146 |
150 |
12 |
157 |
151 |
158 |
13 |
161 |
157 |
161 |
14 |
163 |
160 |
165 |
15 |
165 |
162 |
167 |
16 |
166 |
164 |
169 |
17 |
168 |
166 |
171 |
18 |
169 |
167 |
174 |
19 |
170 |
168 |
174 |
20 |
170 |
169 |
174 |
模型建立:僅知道數據點,要想找出函數關係式來,結果可能有非常多種,區別只不過是擬合的切合度,即相關係數與1的接近程度;這裏爲推廣模型的通用性,我選用了以上三人的平均數據,以反映人羣身高隨年齡的變化趨勢。
首先算出三人各年度的平均身高,如下表所示:
年齡 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
平均身高 |
75.67 |
86 |
93.33 |
103 |
111.00 |
117 |
124.67 |
129.67 |
135 |
140.67 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
|
149.33 |
155.33 |
159.67 |
162.67 |
164.67 |
166.33 |
168.33 |
170 |
170.67 |
171 |
先用1stOpt擬合找出契合度最高的函數關係式,
源代碼:
data;
1 75.66666667
2 86
3 93.33333333
4 103
5 111
6 117
7 124.6666667
8 129.6666667
9 135
10 140.6666667
11 149.3333333
12 155.3333333
13 159.6666667
14 162.6666667
15 164.6666667
16 166.3333333
17 168.3333333
18 170
19 170.6666667
20 171
看完上述源代碼,是不是想說:納尼!這也算是程序源代碼?
沒錯這確實是1stopt的擬合程序,只需要輸入數據點即可,是不是超級簡單呢!
當然輸入數據點後還需要點擊界面如圖所示的“閃電”標示:
即可得到下面圖片所示的實驗結果:
此時輸出結果界面分爲:擬合方程及其相關性排行、擬合曲線、輸出參數值三個部分
由上述實驗結果可以可知,合度最高的身高隨年齡變化趨勢函數關係式爲:
y=-509.42+1470.93*x^0.5-1134.63*x^1+0.20*x^1.5+380.19*x^2-93.82*x^2.5-83.18*x^3+59.50*x^3.5-16.07*x^4+2.06*x^4.5-0.10*x^5
MATLAB實現:
源代碼:
clear;clc;
x=1:20;
y=[75.67,86,93.33,103,111.00,117,111,129.67,135,140.67,149.33,155.33,159.67,162.67,164.67,166.33,168.33,170,170.67,171];
p=polyfit(x,y,5);%p爲擬合係數
y1=p(1)*x.^5+p(2)*x.^4+p(3)*x.^3+p(4)*x.^2+p(5)*x.^1+p(6);
plot(x,y,'ro',x,y1,'b');%繪製數據點和擬合曲線
grid on%添加網格線
disp(['y1=',num2str(p(1)),'*x^5+',num2str(p(2)),'*x^4+',num2str(p(3)),'*x^3+',num2str(p(4)),'*x^2+',num2str(p(5)),'*x^1+',num2str(p(6))]);%輸出函數表達式
實驗結果:
並得到輸出的函數表達式爲:
y=0.00040948*x^5+-0.021656*x^4+0.40307*x^3+-3.3295*x^2+18.7096*x^1+59.5457
同樣利用MATLAB的cftool工具同樣可以擬合得到函數曲線和參數值如下所示:
通過上述對比,哪一款擬合工具你覺得最簡單呢!
如果感覺不明顯,那我們再來一題:
2 近幾年北京市空氣質量好多了!
你不認爲“近幾年北京市空氣質量好多了嗎?”
請你們尋找近幾年北京市空氣質量的數據,並用得到的數據找出年份和對應的藍天數之間的關係,用數學模型的方法表示出來。
再用你們建立的數學模型預測今年、明年北京市空氣質量(主要指藍天數)。
再用你們建立的數學模型預測一下,到那年北京市空氣質量全達標(主要指藍天數等於全年的天數)。
數據如下
年份 2002 2003 2004 2005 2006 2007 2008 2009
空氣質量指數 219 219 229 234 238 246 274 285
解:首先擬合數據點以年份爲自變量,每年的藍天天數爲函數,找出函數關係式,藉助該函數關係式反應北京天氣變好情況,從而將需要預測的年份帶入函數關係式便可以大致預測出該年藍天天數。
1stOpt實現(同上述同樣的操作):
源代碼:
data;
2002 219
2003 219
2004 229
2005 234
2006 238
2007 246
2008 274
2009 285、
實驗結果:
可以得知北京每年藍天天數有關年份函數爲:
y=216.95+0.016*abs(x-1997.94)^3.487
從而可以初步預測出此模型下北京2010和2011兩年的藍天數量分別是:311天和341天,而之後自2012年起預測藍天天數大於365,因此可以簡單認定爲:從2012年起北京每年藍天天數基本等於365。
MATLAB實現:
源代碼:
clear;clc;
year=2002:2009;
days=[219,219,229,234,238,246,274,285];
p=polyfit(year,days,3);
days1=p(1)*year.^3+p(2)*year.^2+p(3)*year.^1+p(4);
plot(year,days,'ro',year,days1,'b');
grid on
disp(['y=',num2str(p(1)),'*x^3+',num2str(p(2)),'*x^2+',num2str(p(3)),'*x^1+',num2str(p(4))]);
實驗結果:
並得到輸出的函數表達式爲:
y=0.14141*x^3+-849.4134*x.2+1700689.4179*x^1+-1135038165.7398
即爲北京每年藍天天數有關年份的函數,從而可以初步預測出此模型下北京2010和2011兩年的藍天數量分別是:306天和334天,同1stOpt一樣自2012年起預測藍天天數大於365,因此可以簡單認定爲:從2012年起北京每年藍天天數基本等於365。
相比通過上述的對比分析,你是否覺得1stOpt及其的簡單易操作呢?
只需要兩步操作即可實現數據點的擬合,即:粘貼數據點->點擊”閃電”
下面免費獲得1stOpt安裝包,不妨關注微信公衆“理工科日記”,回覆“1stopt”即可獲取,感謝您的來訪,謝謝大家。
下載之後無需安裝,即可直接運行,建立存放文件路徑不要有中文,加之在win10上可能會出現“系統不兼容的問題”,這裏只需要打開文件的屬性窗口,更改其運行兼容性爲win7或者更低的系統即可。