【暖手练习】MATLAB习题
練習1:插值&擬合
題目:
有如下數據點:
| x | -2 | -1.7 | -1.4 | -1.1 | -0.8 | -0.5 | -0.2 | 0.1 |
| y | 0.1029 | 0.1174 | 0.1316 | 0.1448 | 0.1566 | 0.1662 | 0.1733 | 0.1775 |
| x | 0.4 | 0.7 | 1 | 1.3 | 1.6 | 1.9 | 2.2 | 2.5 |
| y | 0.1785 | 0.1764 | 0.1711 | 0.1630 | 0.1526 | 0.1402 | 0.1266 | 0.1122 |
| x | 2.8 | 3.1 | 3.4 | 3.7 | 4 | 4.3 | 4.6 | 4.9 |
| y | 0.0977 | 0.0835 | 0.0702 | 0.0588 | 0.0479 | 0.0373 | 0.0291 | 0.0224 |
1. 根據數據點試用不同的插值方法繪制曲線;
2. 試用最小二乘多項式擬合方法擬合表中數據,選擇一個能較好擬合數據點的多項式階次,給出相應的多項式系數;
3. 若表中的數據滿足正態分布密度函數,試用最小二乘非線性擬合方法求出分布參數和的值,并繪制擬合曲線,觀察擬合效果;
問題1:
%yi=interp1(x,y,new_x,'method') %'method'可為'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'、'v5cubic'、'makima' 或 'spline'。默認方法為 'linear'。 clear;clc; x=[-2 -1.7 -1.4 -1.1 -0.8 -0.5 -0.2 0.1 0.4 0.7 1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3 4.6 4.9]; y=[0.1029 0.1174 0.1316 0.1448 0.1566 0.1662 0.1733 0.1775 0.1785 0.1764 0.1711 0.1630 0.1526 0.1402 0.1266 0.1122 0.0977 0.0835 0.0702 0.0588 0.0479 0.0373 0.0291 0.0224]; new_x=-2:0.01:4.9; subplot(2,2,1); plot(x,y,'r.','Markersize',20); hold on; y1=interp1(x,y,new_x,'linear'); plot(new_x,y1,'b'); title('線性插值');subplot(2,2,2); plot(x,y,'r.','Markersize',20); hold on; y2=interp1(x,y,new_x,'nearest'); plot(new_x,y2,'g'); title('最鄰近插值');subplot(2,2,3); plot(x,y,'r.','Markersize',20); hold on; y3=interp1(x,y,new_x,'pchip'); plot(new_x,y3,'c'); title('三次埃爾米特插值');subplot(2,2,4); plot(x,y,'r.','Markersize',20); hold on; y4=interp1(x,y,new_x,'spline'); plot(new_x,y4,'k'); title('三次樣條插值');%legend('樣本點','線性插值','最鄰近插值','埃爾米特插值','三次樣條插值')圖示為:
問題2:
% polyfit(x,y,n)多項式擬合 % x,y為向量,n為擬合階數 clear;clc; x=[-2 -1.7 -1.4 -1.1 -0.8 -0.5 -0.2 0.1 0.4 0.7 1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3 4.6 4.9]; y=[0.1029 0.1174 0.1316 0.1448 0.1566 0.1662 0.1733 0.1775 0.1785 0.1764 0.1711 0.1630 0.1526 0.1402 0.1266 0.1122 0.0977 0.0835 0.0702 0.0588 0.0479 0.0373 0.0291 0.0224]; plot(x,y,'r.','Markersize',20); hold on;p2=polyfit(x,y,2); y2=p2(1)*x.^2+p2(2)*x+p2(3); plot(x,y2); hold on;p3=polyfit(x,y,3); y3=p3(1)*x.^3+p3(2)*x.^2+p3(3)*x+p3(4); plot(x,y3) hold on;p4=polyfit(x,y,4); y4=p4(1)*x.^4+p4(2)*x.^3+p4(3)*x.^2+p4(4)*x+p4(5); plot(x,y4) hold on;p5=polyfit(x,y,5); y5=p5(1)*x.^5+p5(2)*x.^4+p5(3)*x.^3+p5(4)*x.^2+p5(5)*x+p5(6); plot(x,y5) hold on;legend('樣本點','二階多項式插值','三階多項式插值','四階多項式插值','五階多項式插值');圖示如下:
?如圖,經過觀察,隨著多項式階數的提高,擬合效果也在不斷提高。五階多項式插值的效果已經非常好,并且可以通過計算進行驗證:
SSE=0; SST=0; for i=1:24SSE=SSE+(y5(i)-y(i))^2;SST=SST+(y(i)-mean(y))^2; end R_squre=1-SSE/SST; disp(['五階多項式擬合R^2為',num2str(R_squre)])輸出結果為:
?接下來輸出五階多項式的系數:
for j=1:6k=6-j;disp([num2str(k),'次項系數為:',num2str(p5(j))]); end輸出結果為:
?問題3:
syms t; f=fittype('1/(sqrt(2*pi)*sigma)*exp(-(t-mu)^2/(2*sigma^2))','independent','t','coefficients',{'mu','sigma'});%% % f=fittype('擬合的方程','independent','自變量','coefficients',{'未知參數1','未知參數2'}); %% 這里的用符號t代替了x的位置% [cfun,rsquare]=fit(x',y',f); 保存擬合結果和擬合效果p=fit(x',y',f); % p保存擬合結果 % x,y為行向量,需要轉置 clear;clc; syms t; x=[-2 -1.7 -1.4 -1.1 -0.8 -0.5 -0.2 0.1 0.4 0.7 1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3 4.6 4.9]; y=[0.1029 0.1174 0.1316 0.1448 0.1566 0.1662 0.1733 0.1775 0.1785 0.1764 0.1711 0.1630 0.1526 0.1402 0.1266 0.1122 0.0977 0.0835 0.0702 0.0588 0.0479 0.0373 0.0291 0.0224];f=fittype('1/(sqrt(2*pi)*sigma)*exp(-(t-mu)^2/(2*sigma^2))','independent','t','coefficients',{'mu','sigma'}); %[cfun,rsquare]=fit(x',y',f); p=fit(x',y',f); plot(p,x,y);輸出結果為:
因此參數值分別為:
練習2:整數規劃
題目:
分配甲、乙、丙、丁四人去完成五項任務,每人完成各項任務的時間如下表所示。由于任務數多于人數,故規定其中有一個人可完成兩項任務,其余三人每人只完成一項任務。試確定總花費時間最少的分配任務方案。
| A | B | C | D | E | |
| 甲 | 9 | 2 | 4 | 15 | 9 |
| 乙 | 6 | 5 | 12 | 4 | 2 |
| 丙 | 11 | 7 | 13 | 4 | 17 |
| 丁 | 19 | 11 | 15 | 8 | 9 |
求解與代碼實現:
根據題目要求,可以得到目標函數和約束條件如下:
其中為各人不同任務的花費時間:
代碼實現如下:
% [x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub) % 求解整數規劃,調整約束條件,可轉為0-1規劃 % f :目標函數的系數矩陣 % intcon :整數所在位置 % A :不等式約束的變量系數矩陣 % b :不等式約束的資源數 % Aeq :等式約束的變量系數矩陣 % beq :等式約束的資源數 % lb :變量約束下限 % ub :變量約束上限 clear;clc; f = [9 2 4 15 9 6 5 12 4 2 11 7 13 4 17 19 11 15 8 9]; ic = 1 : length(f); A1 = zeros(4,length(f));for i = 1:4for j = (5*i-4):(5*i)A1(i,j) = 1;end endA2 = -1*A1; A = [A1; A2]; b = [2;2;2;2;-1;-1;-1;-1];Aeq = zeros(4,length(f)); for i = 1:4for j = i:5:(5*i+1)Aeq(i,j) = 1;end endbeq = [1;1;1;1]; lb = zeros(length(f),1); ub = ones(length(f),1); [x,fval] = intlinprog(f,ic,A,b,Aeq,beq,lb,ub);disp('最終計劃為:') disp(find(x)) disp('最優目標函數值為:') disp(fval)輸出結果為:
此時對應分配方案為:
| 甲 | 任務B、任務C |
| 乙 | 任務A |
| 丙 | 任務D |
| 丁 | 任務E |
最短時間為:
練習3:評價類模型
題目:
某部隊即將換裝步槍,因個人作戰目的不同,選擇的強制會不同,那么如何選擇步槍?
可供選擇的步槍有:步槍A、步槍B、步槍C
影響選擇槍支的因素有:作戰目的、殺傷力、作戰距離、后坐力、換彈速度等
(1). 試建立層次分析模型
(2). 給出步槍A、步槍B、步槍C對作戰距離的成對比較矩陣,求出最大特征根,相應的歸一化特征向量,并進行一致性檢驗(暫略)
問題1:
評價目標:選擇最合適的步槍
備選方案:步槍A、步槍B、步槍C
屬性集合:作戰目的(假設有三種:a,b,c)、殺傷力X1、作戰距離X2、后坐力X3、換彈速度X4
針對不同作戰目的,各屬性有不同的權重:
| 權重 | 殺傷力X1 | 作戰距離X2 | 后坐力X3 | 換彈速度X4 |
| 作戰目的a | 0.2 | 0.1 | 0.3 | 0.4 |
| 作戰目的b | 0.25 | 0.35 | 0.2 | 0.2 |
| 作戰目的c | 0.4 | 0.2 | 0.3 | 0.1 |
三種步槍的針對不同屬性的判斷矩陣為:
| 殺傷力X1 | 步槍A | 步槍B | 步槍C |
| 步槍A | 1 | 1/2 | 3 |
| 步槍B | 2 | 1 | 6 |
| 步槍C | 1/3 | 1/6 | 1 |
| 作戰距離X2 | 步槍A | 步槍B | 步槍C |
| 步槍A | 1 | 1/3 | 1/4 |
| 步槍B | 3 | 1 | 3/4 |
| 步槍C | 4 | 4/3 | 1 |
| 后坐力X3 | 步槍A | 步槍B | 步槍C |
| 步槍A | 1 | 5 | 2 |
| 步槍B | 1/5 | 1 | 2/5 |
| 步槍C | 1/2 | 5/2 | 1 |
| 換彈速度X4 | 步槍A | 步槍B | 步槍C |
| 步槍A | 1 | 3 | 1/4 |
| 步槍B | 1/3 | 1 | 1/12 |
| 步槍C | 4 | 12 | 1 |
根據上述矩陣,采用最簡單的算數平均法求得權重:
| X1 | X2 | X3 | X4 | |
| 步槍A | 0.3 | 0.125 | 0.5882 | 0.1875 |
| 步槍B | 0.6 | 0.375 | 0.1176 | 0.0625 |
| 步槍C | 0.1 | 0.5 | 0.2941 | 0.75 |
根據權重矩陣,并結合不同目的對應的屬性權重計算三種步槍在三種目的下的得分:
| 權重 | 殺傷力X1 | 作戰距離X2 | 后坐力X3 | 換彈速度X4 |
| 作戰目的a | 0.2 | 0.1 | 0.3 | 0.4 |
| 作戰目的b | 0.25 | 0.35 | 0.2 | 0.2 |
| 作戰目的c | 0.4 | 0.2 | 0.3 | 0.1 |
| 得分 | 步槍A | 步槍B | 步槍C | 最終選擇 |
| 作戰目的a | 0.32396 | 0.21778 | 0.45823 | C |
| 作戰目的b | 0.27389 | 0.31727 | 0.40882 | C |
| 作戰目的c | 0.34021 | 0.35653 | 0.30323 | B |
問題2(略):
總結
以上是生活随笔為你收集整理的【暖手练习】MATLAB习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-06-14 Socketio学
- 下一篇: LGA1155、LGA1156、LGA1