欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:MATLAB算法與模型學(xué)習(xí)筆記

柚子快報(bào)激活碼778899分享:MATLAB算法與模型學(xué)習(xí)筆記

http://yzkb.51969.com/

文章目錄

一、主成分分析二、整數(shù)規(guī)劃2.1 入門題2.2 典型例題2.2.1 背包問題(0-1規(guī)劃)2.2.2 指派問題(0-1規(guī)劃)2.2.3 鋼管切割問題(混合使用切割方案)

三、線性規(guī)劃3.1 入門題3.2 典型例題3.2.1 生產(chǎn)決策問題3.2.2 生成決策問題(整數(shù)規(guī)劃)

四、圖論4.1 最短路徑4.2 最小生成樹4.2.1 prim算法4.2.2 Kruskal算法

4.3 Matlab的圖論工具箱4.4 渡河問題4.5 有向圖最短路徑及長(zhǎng)度4.6 最小生成樹(工具箱)4.7 最大流4.8 旅行商問題

五、聚類分析5.1 DBSCAN算法5.2 聚類分析程序5.3 聚類分析(matlab統(tǒng)計(jì)工具箱)5.4 變量聚類5.5 我國(guó)各地區(qū)普通高等教育發(fā)展情況分析5.5.1 R型聚類(選取指標(biāo))5.5.2 Q型聚類

六、高斯擬合七、非線性規(guī)劃7.1 入門題7.2 典型題7.2.1 選址問題7.2.2 飛行管理問題

八、多目標(biāo)規(guī)劃九、典型相關(guān)分析9.1 職業(yè)滿意度典型相關(guān)分析9.2 中國(guó)城市競(jìng)爭(zhēng)力與基礎(chǔ)設(shè)施的典型相關(guān)分析

十、插值與擬合10.1 機(jī)床加工10.2 求積分10.3 丘陵地帶10.4 插值節(jié)點(diǎn)混亂10.5 曲線擬合10.6 黃河小浪底調(diào)水調(diào)沙問題

一、主成分分析

%% 主成分分析程序

% 主成分回歸分析

clc, clear

load sn.txt

[m, n] = size(sn);

x0 = sn(:, 1 : n-1); y0 = sn(:, n);

hg1 = [ones(m, 1), x0] \ y0; % 計(jì)算普通最小二乘法回歸系數(shù)

hg1 = hg1'; % 變成行向量顯示回歸系數(shù),其中第一個(gè)分量是常數(shù)項(xiàng)

fprintf('y = %f', hg1(1)); % 顯示普通最小二乘法回歸結(jié)果

for i = 2 : n

if hg1(i) > 0

fprintf('+ %f * x%d', hg1(i), i-1);

else

fprintf('%f * x%d', hg1(i), i-1);

end

end

fprintf('\n')

r = corrcoef(x0); % 計(jì)算相關(guān)系數(shù)矩陣

xd = zscore(x0); % 對(duì)設(shè)計(jì)矩陣進(jìn)行標(biāo)準(zhǔn)化處理

yd = zscore(y0); % 對(duì)y0進(jìn)行標(biāo)準(zhǔn)化處理

[vec1, lamda, rate] = pcacov(r); % vec1特征向量,lamda特征值,rate各主成分的貢獻(xiàn)率

f = repmat(sign(sum(vec1)), size(vec1, 1), 1); % 構(gòu)造與vec1同維度的元素為±1的矩陣

vec2 = vec1 .* f; % 修改特征向量的正負(fù)號(hào),使得特征向量的所有和為正

contr = cumsum(rate); % 計(jì)算累計(jì)貢獻(xiàn)率

df = xd * vec2; % 計(jì)算所有主成分的得分

num = input('請(qǐng)選擇主成分的個(gè)數(shù):'); % 通過累計(jì)貢獻(xiàn)率交互式選擇主成分的個(gè)數(shù)

hg21 = df(:, 1 : num) \ yd; % 主成分變量的回歸系數(shù),這里由于數(shù)據(jù)標(biāo)準(zhǔn)化,回歸方程的常數(shù)項(xiàng)為0

hg22 = vec2(:, 1 : num) * hg21; % 標(biāo)準(zhǔn)化回歸方程的系數(shù)

% 計(jì)算原始變量回歸方程的系數(shù)

hg23 = [mean(y0) - std(y0) * mean(x0) ./ std(x0) * hg22, std(y0) * hg22' ./ std(x0)];

fprintf('y = %f', hg23(1)); % 顯示主成分回歸結(jié)果

for i = 2 : n

if hg23(i) > 0

fprintf('+ %f * x%d', hg23(i), i-1);

else

fprintf('%f * x%d', hg23(i), i-1);

end

end

fprintf('\n')

% 下面計(jì)算兩種回歸分析的剩余標(biāo)準(zhǔn)差

rmse1 = sqrt(sum((hg1(1) + x0 * hg1(2 : end)' - y0).^ 2) / (m -n)); % 擬合n個(gè)參數(shù)

rmse2 = sqrt(sum((hg23(1) + x0 * hg23(2 : end)' - y0).^ 2) / (m -num)); % 擬合num個(gè)參數(shù)

二、整數(shù)規(guī)劃

2.1 入門題

clear; clc

%% 第一題

C = [-20, -10]';

intcon = [1, 2]; % 限制第一個(gè)變量和第二個(gè)變量為整數(shù)

A = [5, 4;

2, 5];

b = [24, 13]';

lb = [0, 0]';

[x1, fval1] = intlinprog(C, intcon, A, b, [], [], lb);

fval1 = -fval1; % 最大化問題

%% 第二題

C = [18, 23, 5]';

intcon = 3; % 限制第三個(gè)變量為整數(shù)

A = [107, 500, 0;

72, 121, 65;

-107, -500, 0;

-72, -121, -65];

b = [50000, 2250, -500, -2000]';

lb = [0, 0, 0]';

[x2, fval2] = intlinprog(C, intcon, A, b, [], [], lb);

%% 第三題(0-1規(guī)劃)

C = [-3, -2, -1]';

intcon = 3; % 表示第三個(gè)變量為整數(shù)

A = [1, 1, 1];

b = 7;

Aeq = [4, 2, 1];

beq = 12;

lb = [0, 0, 0]';

ub = [+inf, +inf, 1]'; % 表示0-1規(guī)劃

[x3, fval3] = intlinprog(C, intcon, A, b, Aeq, beq, lb, ub);

2.2 典型例題

2.2.1 背包問題(0-1規(guī)劃)

clear; clc

%% 背包問題(0-1規(guī)劃)

C = [540, 200, 180, 350, 60, 150, 280, 450, 320, 120]';

intcon = 1 : 10;

A = [6, 3, 4, 5, 1, 2, 3, 5, 4, 2];

b = 30;

lb = zeros(10, 1);

ub = ones(10, 1);

[x1, fval1] = intlinprog(-C, intcon, A, b, [], [], lb, ub);

fval1 = -fval1;

2.2.2 指派問題(0-1規(guī)劃)

%% 指派問題(0-1規(guī)劃)

t = [66.8, 75.6, 87, 58.6;

57.2, 66, 66.4, 53;

78, 67.8, 84.6, 59.4;

70, 74.2, 69.6, 57.2;

67.4, 71, 83.8, 62.4];

C = zeros(20, 1);

for i = 1 : 5

for j = 1 : 4

C((i - 1) * 4 + j) = t(i, j);

end

end

intcon = 1 : 20;

A = zeros(5, 20);

for i = 1 : 5

for j = 1 : 4

A(i, (i - 1) * 4 + j) = 1;

end

end

b = ones(5, 1);

Aeq = zeros(4, 20);

% Aeq = [repmat(eye(4), 1, 5)]; % 簡(jiǎn)潔

for i = 1 : 4

for j = 1 : 5

Aeq(i, i + 4 * (j - 1)) = 1;

end

end

beq = ones(4, 1);

lb = zeros(20, 1);

ub = ones(20, 1);

[x2, fval2] = intlinprog(C, intcon, A, b, Aeq, beq, lb, ub);

x2 = reshape(x2, 4, 5)';

2.2.3 鋼管切割問題(混合使用切割方案)

%% 鋼管切割問題(混合使用切割方案)

% 找出所有的切割方案(枚舉法)

for i = 0 : 2

for j = 0 : 3

for k = 0 : 6

len = 2.9 * i + 2.1 * j + k;

if len <= 6.9 && len >= 6

disp([i, j, k])

end

end

end

end

C = ones(7, 1);

intcon = 1 : 7;

A = [-1, -2, 0, 0, 0, 0, -1;

0, 0, -3, -2, -1, 0, -1;

-4, -1, 0, -2, -4, -6, -1];

b = [-100, -100, -100]';

lb = zeros(7, 1);

[x3, fval3] = intlinprog(C, intcon, A, b, [], [], lb);

三、線性規(guī)劃

3.1 入門題

clear; clc

%% 第一題

C = [-5, -4, -6]'; % 與標(biāo)準(zhǔn)型保持一致,不轉(zhuǎn)置也行

A = [1, -1, 1;

3, 2, 4;

3, 2, 0];

b = [20, 42, 30]';

lb = [0, 0, 0]';

[x1, fval1] = linprog(C, A, b, [], [], lb); % 沒有ub表示沒有上界約束

%% 第二題(此題有多解)

C = [0.04, 0.15, 0.1, 0.125]'; % 與標(biāo)準(zhǔn)型保持一致,不轉(zhuǎn)置也行

A = [-0.03, -0.3, 0, -0.15;

0.14, 0, 0, 0.07];

b = [-32, 42]';

Aeq = [0.05, 0, 0.2, 0.1];

beq = 24;

lb = [0, 0, 0, 0]';

[x2, fval2] = linprog(C, A, b, Aeq, beq, lb); % 沒有ub表示沒有上界約束

%% 第三題

C = [-2, -3, 5]'; % 與標(biāo)準(zhǔn)型保持一致,不轉(zhuǎn)置也行

A = [-2, 5, -1;

1, 3, 1];

b = [-10, 12]';

Aeq = [1, 1, 1];

beq = 7;

lb = [0, 0, 0]';

[x3, fval3] = linprog(C, A, b, Aeq, beq, lb); % 沒有ub表示沒有上界約束

fval3 = -fval3; % 結(jié)果取最大值,需添加符號(hào)

%% 多個(gè)解的情況

% 例如:min z = x1 + x2 s.t. x1 + x2 >= 10

C = [1, 1]';

A = [-1, -1];

b = -10;

[x4, fval4] = linprog(C, A, b); % 有多個(gè)解時(shí),返回一個(gè)值

%% 不存在解的情況

% 例如:min z = x1 + x2 s.t. x1 + x2 = 10、x1 + 2 * x2 <=8

C = [1, 1]';

A = [1, 2];

b = 8;

Aeq = [1, 1];

beq = 10;

lb = [0, 0]';

[x5, fval5] = linprog(C, A, b, Aeq, beq, lb);

3.2 典型例題

3.2.1 生產(chǎn)決策問題

clear; clc

%% 生產(chǎn)決策問題(本題應(yīng)為整數(shù)規(guī)劃,僅供入門參考)

format long g % 計(jì)算結(jié)果顯示為長(zhǎng)數(shù)字

% 目標(biāo)函數(shù)系數(shù)向量

C = zeros(9, 1);

C(1) = 0.75; C(2) = 0.7753; C(3) = -0.375;

C(4) = -783 / 1750; C(5) = -0.35; C(6) = -0.5;

C(7) = -0.2889; C(8) = 1.15; C(9) = 1.9148 - 8613 / 7000;

% 系數(shù)矩陣(A) 不等式約束

A = zeros(5, 9);

A(1, 1) = 1; A(1, 6) = 2;

A(2, 2) = 7; A(2, 7) = 9; A(2, 9) = 12;

A(3, 3) = 3; A(3, 8) = 4;

A(4, 4) = 4; A(4, 9) = 11;

A(5, 5) = 7;

% 常數(shù)項(xiàng)(b) 不等式約束

b = zeros(5, 1);

b(1) = 1200;

b(2) = 10000;

b(3) = 2000;

b(4) = 7000;

b(5) = 4000;

% 系數(shù)矩陣(Aeq) 等式約束

Aeq = zeros(2, 9);

Aeq(1, 1) = 1; Aeq(1, 2) = 1; Aeq(1, 3) = -1; Aeq(1, 4) = -1; Aeq(1, 5) = -1;

Aeq(2, 6) = 1; Aeq(2, 7) = 1; Aeq(2, 8) = -1;

% 常數(shù)項(xiàng)(beq) 等式約束

beq = zeros(2, 1);

% 下界(lb)

lb = zeros(9, 1);

[x1, fval1] = linprog(-C, A, b, Aeq, beq, lb);

fval1 = -fval1; % 題目為求最大值

3.2.2 生成決策問題(整數(shù)規(guī)劃)

% 將其改為整數(shù)規(guī)劃

intcon = 1 : 9;

[x, fval] = intlinprog(-C, intcon, A, b, Aeq, beq, lb);

fval = -fval;

%% 投料問題(運(yùn)輸問題)

format long g % 計(jì)算結(jié)果顯示為長(zhǎng)數(shù)字

% 目標(biāo)函數(shù)系數(shù)向量

M = [5, 1;

2, 7]; % 產(chǎn)地

N = [1.25, 1.25;

8.75, 0.75;

0.5, 4.75;

5.75, 5;

3, 6.5;

7.25, 7.25]; % 銷地

C = zeros(12, 1);

for i = 1 : length(M)

for j = 1 : length(N)

distance = (M(i, 1) - N(j, 1)) ^ 2 + (M(i, 2) - N(j, 2)) ^ 2;

C((i - 1) * length(N) + j) = sqrt(distance);

end

end

% 系數(shù)矩陣(A) 不等式約束

A = zeros(2, 12);

A(1, 1 : 6) = 1; % 簡(jiǎn)潔

A(2, 7 : 12) = 1; % 簡(jiǎn)潔

% A(1, 1) = 1; A(1, 2) = 1; A(1, 3) = 1; A(1, 4) = 1; A(1, 5) = 1; A(1, 6) = 1;

% A(2, 7) = 1; A(2, 8) = 1; A(2, 9) = 1; A(2, 10) = 1; A(2, 11) = 1; A(2, 12) = 1;

% 常數(shù)項(xiàng)(b) 不等式約束

b = [20, 20]';

% 系數(shù)矩陣(Aeq) 等式約束

Aeq = zeros(6, 12);

for i = 1 : 6

Aeq(i, i) = 1; Aeq(i, i + 6) = 1;

end

Aeq = [eye(6), eye(6)]; % 簡(jiǎn)潔

% Aeq(1, 1) = 1; Aeq(1, 7) = 1;

% Aeq(2, 2) = 1; Aeq(2, 8) = 1;

% Aeq(3, 3) = 1; Aeq(3, 9) = 1;

% Aeq(4, 4) = 1; Aeq(4, 10) = 1;

% Aeq(5, 5) = 1; Aeq(5, 11) = 1;

% Aeq(6, 6) = 1; Aeq(6, 12) = 1;

% 常數(shù)項(xiàng)(beq) 等式約束

beq = [3, 5, 4, 7, 6, 11]';

% 下界(lb)

lb = zeros(12, 1);

[x2, fval2] = linprog(C, A, b, Aeq, beq, lb);

x2 = reshape(x2, 6, 2)'; % 展示效果更加美觀

四、圖論

4.1 最短路徑

%% 最短路徑

% Dijkstra算法

shortestpath();

% Floyd算法:求圖中任意兩點(diǎn)之間最短路徑

distances()

4.2 最小生成樹

4.2.1 prim算法

%% 最小生成樹

% prim算法

clc; clear

a = zeros(7);

a(1, 2) = 50; a(1, 3) = 60; a(2, 4) = 65;

a(2, 5) = 40; a(3, 4) = 52; a(3, 7) = 45;

a(4, 5) = 50; a(4, 6) = 30; a(4, 7) = 42;

a(5, 6) = 70;

a = a + a'; a(a == 0) = inf;

result = []; p = 1; tb = 2 : length(a);

while size(result, 2) ~= length(a) - 1

temp = a(p, tb); temp = temp(:);

d = min(temp);

[jb, kb] = find(a(p, tb) == d, 1); % 找第一個(gè)最小的值

j = p(jb); k = tb(kb);

result = [result, [j; k; d]];

p = [p, k];

tb(tb == k) = [];

end

result

4.2.2 Kruskal算法

% Kruskal算法

clc; clear

% 這里給出鄰接矩陣的另外一種輸入方式

a(1, [2, 3]) = [50, 60]; a(2, [4, 5]) = [65, 40];

a(3, [4, 7]) = [52, 45]; a(4, [5, 6]) = [50, 30];

a(4, 7) = 42; a(5, 6) = 70;

[i, j, b] = find(a);

data = [i'; j'; b']; index = data(1 : 2, :);

loop = length(a) - 1;

result = [];

while length(result) < loop

temp = min(data(3, :));

flag = find(data(3, :) == temp);

flag = flag(1);

v1 = index(1, flag); v2 = index(2, flag);

if v1 ~= v2

result = [result, data(:, flag)];

end

index(index == v2) = v1;

data(:, flag) = [];

index(:, flag) = [];

end

result

4.3 Matlab的圖論工具箱

%% Matlab的圖論工具箱

% 無向圖最短路徑及長(zhǎng)度

clc; clear

a(1, 2) = 2; a(1, 3) = 8; a(1, 4) = 1; a(2, 3) = 1;

a(2, 3) = 6; a(2, 5) = 1; a(3, 4) = 7; a(3, 5) = 5;

a(3, 6) = 1; a(3, 7) = 2; a(4, 7) = 9; a(5, 6) = 3;

a(5, 8) = 2; a(5, 9) = 9; a(6, 7) = 4; a(6, 8) = 6;

a(7, 9) = 3; a(7, 10) = 1; a(8, 9) = 7; a(8, 11) = 9;

a(9, 10) = 1; a(9, 11) = 2; a(10, 11) = 4;

a = a'; % Matlab工具箱要求數(shù)據(jù)是下三角矩陣

[i, j, v] = find(a);

b = sparse(i, j, v, 11, 11); % 構(gòu)造系數(shù)矩陣

% Directed是標(biāo)志圖為有向或無向的屬性

[x, y, z] = graphshortestpath(b, 1, 11, 'Directed', false)

4.4 渡河問題

% 渡河問題

clc; clear

a = [1, 1, 1, 1;

1, 1, 1, 0;

1, 1, 0, 1;

1, 0, 1, 1;

1, 0, 1, 0;

0, 1, 0, 1;

0, 1, 0, 0;

0, 0, 1, 0;

0, 0, 0, 1;

0, 0, 0, 0]; % 每一行是一個(gè)可行狀態(tài)

b = [1, 0, 0, 0;

1, 1, 0, 0;

1, 0, 1, 0;

1, 0, 0, 1]; % 每一行是一個(gè)可以轉(zhuǎn)移狀態(tài)

w = zeros(10); % 鄰接矩陣初始化

for i = 1 : 9

for j = i + 1 : 10

for k = 1 : 4

if strfind(xor(a(i, :), b(k, :)), a(j, :))

w(i,j) = 1;

end

end

end

end

w = w'; % 變成下三角形矩陣

c = sparse(w); % 構(gòu)造稀疏矩陣

% 該圖是無向圖,Directed屬性值為0

[x, y, z] = graphshortestpath(c, 1, 10, 'Directed', 0)

% 畫出無向圖

h = view(biograph(c, [], 'ShowArrows', 'off', 'ShowWeights', 'off'));

Edges = getedgesbynodeid(h); % 提取句柄h中的邊集

set(Edges, 'LineColor', [0, 0, 0]); % 為了將來打印清楚,邊畫成黑色

set(Edges, 'LineWidth', 1.5); % 線型寬度設(shè)置為1.5

4.5 有向圖最短路徑及長(zhǎng)度

% 有向圖最短路徑及長(zhǎng)度

clc; clear

a = zeros(7);

a(1, 2) = 4; a(1, 3) = 2; a(2, 3) = 3;

a(2, 4) = 2; a(2, 5) = 6; a(3, 4) = 5;

a(3, 6) = 4; a(4, 5) = 2; a(4, 6) = 7;

a(5, 6) = 4; a(5, 7) = 8; a(6, 7) = 3;

b = sparse(a); % 構(gòu)造稀疏矩陣

% 有向圖Directed屬性值為真或1,方法屬性的默認(rèn)值是Dijkstra

[x, y, z] = graphshortestpath(b, 1, 7, 'Directed', 1, 'Method', 'Bellman-Ford')

view(biograph(b, []))

4.6 最小生成樹(工具箱)

% 最小生成樹

clc; clear

x = [0, 5, 16, 20, 33, 23, 35, 25, 10];

y = [15, 20, 24, 20, 25, 11, 7, 0, 3];

xy = [x; y];

d = mandist(xy); % 求xy的兩兩列向量間的絕對(duì)值距離

d = tril(d); % 截取Matlab工具箱要求的下三角形矩陣

b = sparse(d); % 轉(zhuǎn)化為稀疏矩陣

[ST, pred] = graphminspantree(b, 'Method', 'Kruskal') % 調(diào)用最小生成樹的命令

st = full(ST); % 把最小生成樹的稀疏矩陣轉(zhuǎn)化為普通矩陣

TreeLength = sum(sum(st)) % 求最小生成樹長(zhǎng)度

view(biograph(ST, [], 'ShowArrows', 'off')) % 畫出最小生成樹

4.7 最大流

% 最大流

% 只能解決權(quán)重都為正值,且兩個(gè)頂點(diǎn)之間不能有兩條弧

% 添加虛擬頂點(diǎn)9,解決頂點(diǎn)3、4之間的兩條弧

clc; clear

a = zeros(9);

a(1, 2) = 6; a(1, 3) = 4; a(1, 4) = 5; a(2, 3) = 3;

a(2, 5) = 9; a(2, 6) = 9; a(3, 4) = 4; a(3, 5) = 6;

a(3, 6) = 7; a(3, 7) = 3; a(4, 7) = 5; a(4, 9) = 2;

a(5, 8) = 12; a(6, 5) = 8; a(6, 8) = 10; a(7, 6) = 4;

a(7, 8) = 15; a(9, 3) = 2;

b = sparse(a);

[x, y, z] = graphmaxflow(b, 1, 8)

view(biograph(b, []))

4.8 旅行商問題

%% 旅行商問題

% 修改圈近似算法

clc; clear

a = zeros(6);

a(1, 2) = 56; a(1, 3) = 35; a(1, 4) = 21; a(1, 5) = 51;

a(1, 6) = 60; a(2, 3) = 21; a(2, 4) = 57; a(2, 5) = 78;

a(2, 6) = 70; a(3, 4) = 36; a(3, 5) = 68; a(3, 6) = 68;

a(4, 5) = 51; a(4, 6) = 61; a(5, 6) = 13;

a = a + a'; L = size(a, 1);

c = [5, 1 : 4, 6, 5]; % 選取初始圈

for k = 1 : L

flag = 0; % 退出標(biāo)志

for m = 1 : L - 2 % m為算法中的i

for n = m + 2 : L % n為算法中的j

if a(c(m), c(n)) + a(c(m + 1), c(n + 1)) < a(c(m), c(m + 1)) + a(c(n), c(n + 1))

c(m + 1 : n) = c(n : -1 : m + 1); flag = flag + 1; % 修改一次,標(biāo)志加1

end

end

end

if flag == 0 % 一條邊也沒有修改,就返回

long = 0; % 圈長(zhǎng)的初始值

for i = 1 : L

long = long + a(c(i), c(i + 1)); % 求改良圈的長(zhǎng)度

end

circle = c; % 返回修改圈

return

end

end

五、聚類分析

5.1 DBSCAN算法

%% DBSCAN算法

clc; clear;

load mydata; % 加載數(shù)據(jù)

epsilon = 0.5; % 半徑

MinPts = 10; % 點(diǎn)數(shù)

C = 0; % 記錄分的類數(shù)

n = size(X, 1); % X為加載的數(shù)據(jù)集

IDX = zeros(n, 1); % 初始化全部為0,即全部為噪音點(diǎn)

D = pdist2(X, X); % 計(jì)算每個(gè)點(diǎn)之間的距離

visited = false(n, 1); % 是否已經(jīng)訪問

isnoise = false(n, 1); % 是否為噪音點(diǎn)

for i = 1 : n

if ~visited(i)

visited(i) = true; % 更新為已訪問

% 記錄該訪問點(diǎn)的臨近點(diǎn)

Neighbors = find(D(i, :) <= epsilon);

if numel(Neighbors) < MinPts % numel()計(jì)算數(shù)組中元素?cái)?shù)量

% 附近點(diǎn)的數(shù)量小于已給數(shù)量,記為噪聲點(diǎn)

isnoise(i) = true;

else

C = C + 1;

IDX(i) = C;

% 開始搜索其臨近點(diǎn)

k = 1;

while true

j = Neighbors(k);

if ~visited(j)

visited(j) = true;

Neighbors2 = find(D(j,:) <= epsilon);

if numel(Neighbors2) >= MinPts

Neighbors=[Neighbors Neighbors2];

end

end

if IDX(j) == 0

IDX(j) = C;

end

k = k + 1;

if k > numel(Neighbors)

break;

end

end

end

end

end

% 如果只有兩個(gè)指標(biāo)的,就可以繪制圖形

k = max(IDX);

Colors = hsv(k);

Legends = {};

for i = 0 : k

Xi = X(IDX == i, :); % 第i類的所有值

if i ~= 0

Style = 'x';

MarkerSize = 8;

Color = Colors(i,:);

Legends{end + 1} = ['Cluster' num2str(i)];

else % 噪聲點(diǎn)

Style = 'o';

MarkerSize = 6;

Color = [0 0 0];

if ~isempty(Xi)

Legends{end + 1} = 'Noise';

end

end

if ~isempty(Xi)

plot(Xi(:,1), Xi(:,2), Style, 'MarkerSize', MarkerSize, 'Color', Color);

end

hold on;

end

hold off;

axis equal;

grid on; % 增加網(wǎng)格線

legend(Legends); % 標(biāo)簽

5.2 聚類分析程序

%% 聚類分析程序

clc, clear

a = [1, 0; 1, 1; 3, 2; 4, 3; 2, 5];

[m, n] = size(a);

d = mandist(a'); % mandist求矩陣列向量組之間的兩兩絕對(duì)值距離

d = tril(d); % 截取下三角形

nd = nonzeros(d); % 去掉d中的零元素,非零元素按列排列

d = union([], nd); % 去掉重復(fù)的非零元素

for i = 1 : m - 1

nd_min = min(nd);

[row, col] = find(d == nd_min);

tm = union(row, col); % row和col歸為一類

tm = reshape(tm, 1, length(tm)); % 把數(shù)組tm變成行向量

fprintf('第%d次合成,平臺(tái)高度為%d時(shí)的分類結(jié)果為:%s\n', i, nd_min, int2str(tm));

nd(nd == nd_min) = []; % 刪除已經(jīng)歸類的元素

if length(nd) == 1

break

end

end

5.3 聚類分析(matlab統(tǒng)計(jì)工具箱)

% 使用matlab統(tǒng)計(jì)工具箱

clc, clear

a = [1, 0; 1, 1; 3, 2; 4, 3; 2, 5];

y = pdist(a, 'cityblock'); % 求a的兩兩行向量間的絕對(duì)值距離

yc = squareform(y); % 變換成距離矩陣

z = linkage(y); % 產(chǎn)生等級(jí)聚類書

dendrogram(z) % 畫聚類圖

T = cluster(z, 'maxclust', 3); % 把對(duì)象劃分成3類

% zsore(X) 對(duì)數(shù)據(jù)矩陣進(jìn)行標(biāo)準(zhǔn)化處理

for i = 1 : 3

tm = find(T == i); % 求第i類的對(duì)象

tm = reshape(tm, 1, length(tm)); % 變成行向量

fprintf('第%d類的有%s\n', i, int2str(tm)); %顯示分類結(jié)果

end

5.4 變量聚類

% 對(duì)變量聚類

clc, clear

a = textread('ch.txt');

d = 1 - abs(a); % 進(jìn)行數(shù)據(jù)變換,把相關(guān)系數(shù)轉(zhuǎn)化為距離

d = tril(d); % 提取出d矩陣的下三角部分

b = nonzeros(d); % 去掉d中的零元素

b = b'; % 化為行向量(對(duì)變量聚類)

z = linkage(b, 'complete'); % 按最長(zhǎng)距離法聚類

y = cluster(z, 'maxclust', 2); % 把變量劃分為兩類

ind1 = find(y == 1); ind1 = ind1'; % 顯示第一類對(duì)應(yīng)的變量標(biāo)號(hào)

ind2 = find(y == 2); ind2 = ind2'; % 顯示第二類對(duì)應(yīng)的變量標(biāo)號(hào)

h = dendrogram(z); % 畫聚類圖

set(h, 'Color', 'k', 'LineWidth', 1.3) % 把聚類圖線的顏色改為黑色,線寬加粗

5.5 我國(guó)各地區(qū)普通高等教育發(fā)展情況分析

5.5.1 R型聚類(選取指標(biāo))

% R型聚類(選取指標(biāo))

clc, clear

a = load('gj.txt'); % 把原始數(shù)據(jù)保存在純文本文件gj.txt中

b = zscore(a); % 數(shù)據(jù)標(biāo)準(zhǔn)化

r = corrcoef(b); % 計(jì)算相關(guān)系數(shù)矩陣

% d = tril(1 - r); d = nonzeros(d)'; % 另一種計(jì)算距離方法

d = pdist(b', 'correlation'); % 計(jì)算相關(guān)系數(shù)到處的距離

z = linkage(d, 'average'); % 按類平均法聚類

h = dendrogram(z); % 畫聚類圖

set(h, 'Color', 'k', 'LineWidth', 1.3) % 把聚類圖線的顏色改為黑色,線寬加粗

T = cluster(z, 'maxclust', 6); % 把變量劃分為6類

for i = 1 : 6

tm = find(T == i); % 求第i類對(duì)象

tm = reshape(tm, 1, length(tm)); % 變成行向量

fprintf('第%d類的有%s\n', i, int2str(tm)); % 顯示分類結(jié)果

end

5.5.2 Q型聚類

% Q型聚類

clc, clear

load gj.txt % 把原始數(shù)據(jù)保存在純文本文件gj.txt中

gj(:, 3 : 6) = []; % 刪除數(shù)據(jù)矩陣的第3-6列,即使用變量1,2,7,8,9,10

gj = zscore(gj); % 數(shù)據(jù)標(biāo)準(zhǔn)化

y = pdist(gj); % 求對(duì)象間的歐氏距離,每行是一個(gè)對(duì)象

z = linkage(y, 'average'); % 按類平均法聚類

h = dendrogram(z); % 畫聚類圖

set(h, 'Color', 'k', 'LineWidth', 1.3) % 把聚類圖線的顏色改為黑色,線寬加粗

for k = 3 : 5

fprintf('劃分為%d類的結(jié)果如下:\n', k)

T = cluster(z, 'maxclust', k); % 把樣本點(diǎn)劃分為k類

for i = 1 : k

tm = find(T == i); % 求第i類對(duì)象

tm = reshape(tm, 1, length(tm)); % 變成行向量

fprintf('第%d類的有%s\n', i, int2str(tm)); % 顯示分類結(jié)果

end

if k == 5

break

end

fprintf('* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n')

end

六、高斯擬合

clc; clear

y = [108.68, 118.71, 120.13, 106.71, 88.5, 95.15, 98.85, 89.11, 74.33, 77.29]';

x = (1 : 2 : 2 * length(y))';

%% fitgp matlab自帶的高斯擬合

gpr = fitrgp(x, y, 'Sigma', 0.1);

x_test = linspace(1, 20, 100)';

[y_test, ~ , limit] = predict(gpr, x_test);

%% 畫圖

h1 = fill([x_test', fliplr(x_test')], [limit(:, 1)', fliplr(limit(:, 2)')], 'r', 'DisplayName', 'uncertain');

hold on

COLOR = [184 184 246] / 255;

COLOR1 = [207 155 255] / 255;

COLOR2 = [190 210 254] / 255;

COLOR3 = [184 184 246] / 255;

h1.FaceColor = COLOR; % 定義區(qū)間的填充顏色

h1.EdgeColor = [1, 1, 1]; % 邊界顏色設(shè)置為白色

alpha .2 % 設(shè)置透明色

plot(x_test, y_test, 'Color', COLOR1, 'LineWidth', 1, 'DisplayName', 'prediction')

plot(x_test, limit(:, 1), '--', 'Color', COLOR2, 'DisplayName', 'Lower Limit')

plot(x_test, limit(:, 2), '--', 'Color', COLOR3, 'DisplayName', 'Upper Limit')

plot(x, y, '+', 'DisplayName', 'True Data')

legend('show', 'Location', 'Best')

七、非線性規(guī)劃

7.1 入門題

%% 非線性規(guī)劃

clear; clc

%% 第一問

format long g

x0 = [0, 0]; % 給定的任意初始值

A = [-2, 3]; b = 6; % 可以將線性約束改為非線性約束,但不推薦使用

[x1, fval1] = fmincon(@fun1, x0, A, b, [], [], [], [], @nonlfun1);

fval1 = -fval1; % 求極大值

%% 其他算法(初始值選取非常重要)

% 使用interior point算法(內(nèi)點(diǎn)法)

option = optimoptions('fmincon', 'Algorithm', 'interior-point');

[x2, fval2] = fmincon(@fun1, x0, A, b, [], [], [], [], @nonlfun1, option);

fval2 = -fval2;

% 使用SQP算法(序列二次規(guī)劃法)

option = optimoptions('fmincon', 'Algorithm', 'sqp');

[x3, fval3] = fmincon(@fun1, x0, A, b, [], [], [], [], @nonlfun1, option);

fval3 = -fval3; % 結(jié)果較差

x00 = [1, 1]; % 更改初始值

[x4, fval4] = fmincon(@fun1, x00, A, b, [], [], [], [], @nonlfun1, option);

fval4 = -fval4; % 效果變好,說明序列二次規(guī)劃法適應(yīng)性較差

% 使用active set算法(有效集法)

option = optimoptions('fmincon', 'Algorithm', 'active-set');

[x5, fval5] = fmincon(@fun1, x0, A, b, [], [], [], [], @nonlfun1, option);

fval5 = -fval5;

% 使用trust-region-reflective算法(信賴域反射算法)

option = optimoptions('fmincon', 'Algorithm', 'trust-region-reflective');

[x6, fval6] = fmincon(@fun1, x0, A, b, [], [], [], [], @nonlfun1, option);

fval6 = -fval6;

%% 第二問

format long g

x0 = [0, 0, 0];

lb = [0, 0, 0]';

[x7, fval7] = fmincon(@fun2, x0, [], [], [], [], lb, [], @nonlfun2);

%% 第三問

format long g

x0 = [22.58, 12.58, 12.13]; % 可以使用蒙特卡羅模擬得到初始解

A = [1, -2, -2;

1, 2, 2];

b = [0, 72]';

Aeq = [1 ,-1, 0];

beq = 10;

lb = [-inf, 10, -inf]';

ub = [+inf, 20, +inf]';

[x8, fval8] = fmincon(@fun3, x0, A, b, Aeq, beq, lb, ub);

fval8 = -fval8; % 求極大值

7.2 典型題

7.2.1 選址問題

%% 典型例題

clear; clc

%% 選址問題

format long g

% 系數(shù)矩陣(A) 不等式約束

A = zeros(2, 16);

A(1, 1 : 6) = 1; % 簡(jiǎn)潔

A(2, 7 : 12) = 1; % 簡(jiǎn)潔

% 常數(shù)項(xiàng)(b) 不等式約束

b = [20, 20]';

% 系數(shù)矩陣(Aeq) 等式約束

Aeq = [eye(6), eye(6), zeros(6, 4)]; % 簡(jiǎn)潔

% 常數(shù)項(xiàng)(beq) 等式約束

beq = [3, 5, 4, 7, 6, 11]';

% 下界(lb)

lb = zeros(16, 1);

% 進(jìn)行求解

x0 = [3, 5, 0, 7, 0, 1, 0, 0, 4, 0, 6, 10, 5, 2, 1, 7]; %利用第一問的答案求解

[x1, fval1] = fmincon(@fun4, x0, A, b, Aeq,beq, lb);

x1 = reshape(x1(1 : 12), 6, 2)';

7.2.2 飛行管理問題

%% 飛行管理問題

format long g

% 畫六架飛機(jī)的位置

figure(1) % 生成一個(gè)圖形

box on % 顯示為封閉的盒子

% 繪制飛機(jī)的初始位置

data = [150, 140, 243;

85, 85, 236;

150, 155, 220.5;

145, 50, 159;

130, 150, 230;

0, 0, 52]; % x坐標(biāo) y坐標(biāo) 方向角

plot(data(:, 1), data(:, 2), '.r')

axis([0, 160, 0, 160]) % 設(shè)置坐標(biāo)軸刻度范圍

hold on % 接著繪制

% 在圖上標(biāo)上注釋

for i = 1 : 6

txt = ['飛機(jī)', num2str(i)];

text(data(i, 1) + 2, data(i, 2) + 2, txt, 'FontSize', 8)

end

% 求解非線性規(guī)劃問題

x0 = [0, 0, 0, 0, 0, 0]; % 飛機(jī)調(diào)整角度的初始值

lb = -pi / 6 * ones(6, 1); % 下界

ub = pi / 6 * ones(6, 1); % 上界

[x2, fval2] = fmincon(@fun5, x0, [], [], [], [], lb, ub, @nonlfun5);

x2 = x2 * pi / 180; % 將弧度制轉(zhuǎn)換為角度制

八、多目標(biāo)規(guī)劃

%% 第一種方式

a = [-1, -1, 0, 0;

0, 0, -1, -1;

3, 0, 2, 0;

0, 3, 0, 2];

b = [-30, -30, 120, 48]';

c1 = [-100, -90, -80, -70]';

c2 = [0, 3, 0, 2]';

% 第一個(gè)目標(biāo)函數(shù)的目標(biāo)值

[x1, g1] = linprog(c1, a, b, [], [], zeros(4, 1));

% 第二個(gè)目標(biāo)函數(shù)的目標(biāo)值

[x2, g2] = linprog(c2, a, b, [], [], zeros(4, 1));

g3 = [g1, g2]'; % 目標(biāo)goal的值

% 這里的權(quán)重weight=目標(biāo)goal的絕對(duì)值

[x, fval] = fgoalattain('fun', rand(4, 1), g3, abs(g3), a, b, [], [], zeros(4, 1));

%% 第二種方式

clc; clear

a = [-1, -1, 0, 0;

0, 0, -1, -1;

3, 0, 2, 0;

0, 3, 0, 2];

b = [-30, -30, 120, 48]';

c1 = [-100, -90, -80, -70];

c2 = [0, 3, 0, 2];

Fun = @(x)[c1; c2] * x; % 用匿名函數(shù)定義目標(biāo)向量

% 第一個(gè)目標(biāo)函數(shù)的目標(biāo)值

[x1, g1] = linprog(c1, a, b, [], [], zeros(4, 1));

% 第二個(gè)目標(biāo)函數(shù)的目標(biāo)值

[x2, g2] = linprog(c2, a, b, [], [], zeros(4, 1));

g3 = [g1, g2]'; % 目標(biāo)goal的值

% 這里的權(quán)重weight=目標(biāo)goal的絕對(duì)值

[x, fval] = fgoalattain(Fun, rand(4, 1), g3, abs(g3), a, b, [], [], zeros(4, 1));

九、典型相關(guān)分析

9.1 職業(yè)滿意度典型相關(guān)分析

%% 典型相關(guān)分析

% 職業(yè)滿意度典型相關(guān)分析

clc; clear

load r.txt

n1 = 5; n2 = 7; num = min(n1, n2);

s11 = r(1 : n1, 1 : n1); % 提出X與X的相關(guān)系數(shù)

s12 = r(1 : n1, n1 + 1 : end); % 提出X與Y的相關(guān)系數(shù)

s21 = s12'; % 提出Y與X的相關(guān)系數(shù)

s22 = r(n1 + 1 : end, n1 + 1 : end); % 提出Y與Y的相關(guān)系數(shù)

m1 = inv(s11) * s12 * inv(s22) * s21; % 計(jì)算矩陣M1

m2 = inv(s22) * s21 * inv(s11) * s12; % 計(jì)算矩陣M2

[vec1, val1] = eig(m1); % 求M1的特征向量和特征值

for i = 1 : n1

vec1(:, i) = vec1(:, i) / sqrt(vec1(:, i)' * s11 * vec1(:, i)); % 特征向量歸一化,滿足a's11a = 1

vec1(:, i) = vec1(:, i) / sign(sum(vec1(:, i))); % 保證所有分量和為正

end

val1 = sqrt(diag(val1)); % 計(jì)算特征值的平方根

[val1, ind1] = sort(val1, 'descend'); % 按照從大到小排列

a = vec1(:, ind1(1 : num)); % 取出X組的系數(shù)陣

dcoef1 = val1(1 : num); % 提出典型相關(guān)系數(shù)

xlswrite('bk.xls', a, 'Sheet1', 'A1') % 把計(jì)算結(jié)果寫到Excel文件中去

flag = n1 + 2; % % 把計(jì)算結(jié)果寫到Excel中的行計(jì)數(shù)變量

str = char(['A', int2str(flag)]); % str為Excel中寫數(shù)據(jù)的起始位置

xlswrite('bk.xls', dcoef1', 'Sheet1', str)

[vec2, val2] = eig(m2); % 求M2的特征向量和特征值

for i = 1 : n2

vec2(:, i) = vec2(:, i) / sqrt(vec2(:, i)' * s22 * vec2(:, i)); % 特征向量歸一化,滿足a's22a = 1

vec2(:, i) = vec2(:, i) / sign(sum(vec2(:, i))); % 保證所有分量和為正

end

val2 = sqrt(diag(val2)); % 計(jì)算特征值的平方根

[val2, ind2] = sort(val2, 'descend'); % 按照從大到小排列

b = vec2(:, ind2(1 : num)); % 取出Y組的系數(shù)陣

dcoef2 = val2(1 : num); % 提出典型相關(guān)系數(shù)

flag = flag + 2; str = char(['A', int2str(flag)]); % str為Excel中寫數(shù)據(jù)的起始位置

xlswrite('bk.xls', b, 'Sheet1', str) % 把計(jì)算結(jié)果寫到Excel文件中去

flag = flag + n2 + 1; str = char(['A', int2str(flag)]); % str為Excel中寫數(shù)據(jù)的起始位置

xlswrite('bk.xls', dcoef2', 'Sheet1', str)

x_u_r = s11 * a; % x,u的相關(guān)系數(shù)

y_v_r = s22 * b; % y,v的相關(guān)系數(shù)

x_v_r = s12 * b; % x,v的相關(guān)系數(shù)

y_u_r = s21 * a; % y,u的相關(guān)系數(shù)

flag = flag + 2; str = char(['A', int2str(flag)]);

xlswrite('bk.xls', x_u_r', 'Sheet1', str)

flag = flag + n1 + 1; str = char(['A', int2str(flag)]);

xlswrite('bk.xls', y_v_r', 'Sheet1', str)

flag = flag + n2 + 1; str = char(['A', int2str(flag)]);

xlswrite('bk.xls', x_v_r', 'Sheet1', str)

flag = flag + n1 + 1; str = char(['A', int2str(flag)]);

xlswrite('bk.xls', y_u_r', 'Sheet1', str)

mu = sum(x_u_r .^ 2) / n1 % X組原始變量被u_i解釋的方差比例

mv = sum(x_v_r .^ 2) / n1 % X組原始變量被v_i解釋的方差比例

nu = sum(y_u_r .^ 2) / n2 % Y組原始變量被u_i解釋的方差比例

nv = sum(y_v_r .^ 2) / n2 % Y組原始變量被v_i解釋的方差比例

fprintf('X組的原始變量被u1-u%d解釋的比例為%f\n', num, sum(mu));

fprintf('Y組的原始變量被v1-v%d解釋的比例為%f\n', num, sum(nv));

9.2 中國(guó)城市競(jìng)爭(zhēng)力與基礎(chǔ)設(shè)施的典型相關(guān)分析

% 中國(guó)城市競(jìng)爭(zhēng)力與基礎(chǔ)設(shè)施的典型相關(guān)分析

clc; clear

load x.txt

load y.txt

p = size(x, 2); q = size(y, 2);

x = zscore(x); y = zscore(y); % 標(biāo)準(zhǔn)化數(shù)據(jù)

n = size(x, 1); % 觀測(cè)數(shù)據(jù)個(gè)數(shù)

% 下面做典型相關(guān)分析,a1,b1返回的是典型變量的系數(shù),r返回的是典型相關(guān)系數(shù)

% u1,v1返回的是典型變量的值,stats返回的是假設(shè)檢驗(yàn)的一些統(tǒng)計(jì)量的值

[a1, b1, r, u1, v1, stats] = canoncorr(x, y);

% 下面修正a1,b1的每一列的正負(fù)號(hào),使得a,b每一列的系數(shù)和為正

% 相應(yīng)的,典型變量取值的正負(fù)號(hào)也要修正

a = a1 .* repmat(sign(sum(a1)), size(a1, 1), 1);

b = b1 .* repmat(sign(sum(b1)), size(b1, 1), 1);

u = u1 .* repmat(sign(sum(a1)), size(u1, 1), 1);

v = v1 .* repmat(sign(sum(b1)), size(v1, 1), 1);

x_u_r = x' * u / (n - 1) % 計(jì)算x,u的相關(guān)系數(shù)

y_v_r = y' * v / (n - 1) % 計(jì)算y,v的相關(guān)系數(shù)

x_v_r = x' * v / (n - 1) % 計(jì)算x,v的相關(guān)系數(shù)

y_u_r = y' * u / (n - 1) % 計(jì)算y,u的相關(guān)系數(shù)

ux = sum(x_u_r .^ 2) / p; % X組原始變量被u_i解釋的方差比例

ux_cum = cumsum(ux) % X組原始變量被u_i解釋的方差累計(jì)比例

vx = sum(x_v_r .^ 2) / p; % X組原始變量被v_i解釋的方差比例

vx_cum = cumsum(vx) % X組原始變量被v_i解釋的方差累計(jì)比例

vy = sum(y_v_r .^ 2) / q; % Y組原始變量被v_i解釋的方差比例

vy_cum = cumsum(vy) % Y組原始變量被v_i解釋的方差累計(jì)比例

uy = sum(y_u_r .^ 2) / q; % Y組原始變量被u_i解釋的方差比例

uy_cum = cumsum(uy) % Y組原始變量被u_i解釋的方差累計(jì)比例

val = r .^ 2 % 典型相關(guān)系數(shù)的平方,M1或M2矩陣的非零特征值

十、插值與擬合

10.1 機(jī)床加工

%% 一維插值

% 一維插值函數(shù) 調(diào)用格式 y = interp1(x0, y0, x, 'method')

% 其中x0要求單調(diào),method指定插值方法,默認(rèn)是線性插值,其值為

% nearest:最近項(xiàng)插值 linear:線性插值 spline:三次樣條插值 cubic:立方插值

% 機(jī)床加工

% x0、y0:題目給出的數(shù)據(jù)

x0 = [0, 3, 5, 7, 9, 11, 12, 13, 14, 15];

y0 = [0, 1.2, 1.7, 2.0, 2.1, 2.0, 1.8, 1.2, 1.0, 1.6];

x = 0 : 0.1 : 15; % 待插入的數(shù)據(jù)

y1 = interp1(x0, y0, x); % 待插入數(shù)據(jù)的縱坐標(biāo)值

y2 = interp1(x0, y0, x, 'spline');

pp1 = csape(x0, y0);

y3 = fnval(pp1, x);

pp2 = csape(x0, y0, 'second');

y4 = fnval(pp2, x);

subplot(1, 3, 1)

plot(x0, y0, '+', x, y1)

title('Piecewise linear')

subplot(1, 3, 2)

plot(x0, y0, '+', x, y2)

title('Spline1')

subplot(1, 3, 3)

plot(x0, y0, '+', x, y3)

title('Spline2')

dy = diff(y3); dx = diff(x); dy_dx = dy ./ dx;

k0 = dy_dx(1); % x = 0處曲線的斜率

x4 = x(x <= 15 & x >= 13);

y4 = y3(x <= 15 & x >= 13);

[Ymin, Yindex] = min(y4); % 13-15范圍內(nèi)y的最小值

disp([x(Yindex), Ymin, k0])

10.2 求積分

% 求積分

clc; clear

x0 = 0.15 : 0.01 : 0.18;

y0 = [3.5, 1.5, 2.5, 2.8];

pp = csape(x0, y0); % 默認(rèn)的邊界條件是Lagrange邊界條件

format long g

xishu = pp.coefs % 顯示每個(gè)區(qū)間上三次多項(xiàng)式的系數(shù)

s = integral(@(t)ppval(pp, t), 0.15, 0.18); % 求積分

format % 恢復(fù)短小數(shù)的顯示格式

10.3 丘陵地帶

%% 二維插值

% 調(diào)用格式:z = interp2(x0, y0, z0, x, y, 'method')

% x0, y0為m維和n維向量,z0是n×m矩陣,表示節(jié)點(diǎn)值,x,y為一維數(shù)組,表示插值點(diǎn)

% x是行向量,y是列向量,z是矩陣.它的行數(shù)是y的維數(shù),列數(shù)是x的維數(shù)

% method的取值和一維插值法一樣。

% 三次樣條插值pp = csape({x0, y0}, z0, conds, valconds); z = fnval(pp, {x, y})

% 當(dāng)插值節(jié)點(diǎn)混亂時(shí),使用Zi = griddata(x, y, z, Xi, Yi)

% 丘陵地帶

clc; clear

x0 = 100 : 100 : 500;

y0 = 100 : 100 : 400;

z0 = [636, 697, 624, 478, 450;

698, 712, 630, 478, 420;

680, 674, 598, 412, 400;

662, 626, 552, 334, 310];

x = 100 : 10 : 500; y = 100 : 10 : 400;

pp = csape({x0, y0}, z0');

z = fnval(pp, {x, y});

[i, j] = find(z == max(max(z))); % 找最高點(diǎn)的地址

x1 = x(i); y1 = y(j); zmax = z(i, j); % 求最高點(diǎn)的坐標(biāo)

% 畫三維圖

[X, Y] = meshgrid(x, y);

Z = z'; mesh(X, Y, Z); % 不清楚具體用法

10.4 插值節(jié)點(diǎn)混亂

%插值節(jié)點(diǎn)混亂

x = [129, 140, 103.5, 88, 185.5, 195, 105, 157.5, 107.5, 77,81, 162, 162, 117.5];

y = [7.5, 141.5, 23, 147, 22.5, 137.5, 85.5, -6.5, -81,3, 56.5, -66.5, 84, -33.5];

z = -[4, 8, 6, 8, 6, 8, 8, 9, 9, 8, 8, 9, 4, 9]; % 海底故取負(fù)值

% minmax:用于獲取數(shù)組中每一行最小值和最大值

xmm = minmax(x); ymm = minmax(y);

X = xmm(1) : xmm(2); Y = ymm(1) : ymm(2);

Z1 = griddata(x, y, z, X, Y', 'cubic'); % 立方插值

Z2 = griddata(x, y, z, X, Y', 'nearest'); % 最近點(diǎn)插值

Z = Z1; % 立方插值和最近點(diǎn)插值的混合插值的初始值

Z(isnan(Z1)) = Z2(isnan(Z1)); % 把立方插值中不確定值換成最近點(diǎn)插值的結(jié)果

subplot(1, 2, 1); plot(x, y, '*')

subplot(1, 2, 2); mesh(X, Y, Z)

10.5 曲線擬合

%% 曲線擬合

% 調(diào)用格式:a = polyfit(x0, y0, m),x0,y0是數(shù)據(jù)向量,m表示多項(xiàng)式的階數(shù)

% 返回的是多項(xiàng)式的降冪系數(shù)a = [a1, a2, …, am, am+1]

% 要計(jì)算x處對(duì)應(yīng)的多項(xiàng)式取值,需調(diào)用y = polyval(a, x)

%% 最小二乘曲線擬合

% 調(diào)用格式:x = lsqcurvefit(fun, x0, xdata, ydata, lb, ub, options)

% fun:為待擬合的函數(shù),一般定義為F(x,xdata)的M文件

% x0:參數(shù)初值值,一般用行向量給出

% xdata,ydata:為觀測(cè)值,列向量表示

% lb:為參數(shù)的下界

% ub:為參數(shù)的上界

% options:為選項(xiàng)

% 解方程組

x = [19, 25, 31, 38, 44]';

y = [19.0, 32.3, 49.0, 73.3, 97.8]';

r = [ones(5, 1), x .^ 2];

ab = r \ y;

x0 = 19 : 0.01 : 44;

y0 = ab(1) + ab(2) * x0 .^ 2;

plot(x, y, 'o', x0, y0, 'r')

% 多項(xiàng)式擬合

x0 = [1990, 1991, 1992, 1993, 1994, 1995, 1996];

y0 = [70, 122, 144, 152, 174, 196, 202];

plot(x0, y0, '*')

a = polyfit(x0, y0, 1);

y97 = polyval(a, 1997);

y98 = polyval(a, 1998);

10.6 黃河小浪底調(diào)水調(diào)沙問題

% 黃河小浪底調(diào)水調(diào)沙問題

clc; clear

load data3.txt

liu = data3(1, :)'; % 提出水流量

sha = data3(2, :)'; % 提出含沙量

y = sha .* liu; % 計(jì)算排沙量

i = 1 : 24;

t = (12 * i - 4) * 3600;

t1 = t(1); t2 = t(end);

pp = csape(t, y); % 進(jìn)行三次樣條插值

xsh = pp.coefs % 求得插值多項(xiàng)式的系數(shù)矩,每一行是一個(gè)區(qū)間上多項(xiàng)式的系數(shù)

TL = integral(@(tt)fnval(pp, tt), t1, t2) % 求總含沙量的積分運(yùn)算

% 繪制散點(diǎn)圖

subplot(1, 2, 1); plot(liu(1 : 11), y(1 : 11), '*') % 第一階段

subplot(1, 2, 2); plot(liu(12 : 24), y(12 : 24), '*') % 第二階段

% 進(jìn)行擬合

format long e

% 以下是第一階段的擬合

for j = 1 : 2

nihei1{j} = polyfit(liu(1 : 11), y(1 : 11), j); % 擬合多項(xiàng)式,系數(shù)排列從高次冪到低次冪

yhat1{j} = polyval(nihei1{j}, liu(1 : 11)); % 求預(yù)測(cè)值

% 以下求誤差平方和與剩余平方差

cha1(j) = sum((y(1 : 11) - yhat1{j}) .^ 2);

rmse1(j) = sqrt(cha1(j) / (10 - j));

end

celldisp(nihei1) % 顯示細(xì)胞數(shù)組的所有元素

rmse1

% 以下是第二階段的擬合

for j = 1 : 2

nihei2{j} = polyfit(liu(12 : 24), y(12 : 24), (j + 1)); % 這里使用細(xì)胞數(shù)組

yhat2{j} = polyval(nihei2{j}, liu(12 : 24)); % 求預(yù)測(cè)值

rmse2(j) = sqrt(sum((y(12 : 24) - yhat2{j}) .^ 2) / (11 - j)); % 求剩余標(biāo)準(zhǔn)差

end

celldisp(nihei2) % 顯示細(xì)胞數(shù)組的所有元素

rmse2

format % 恢復(fù)默認(rèn)的短小數(shù)的顯示格式

柚子快報(bào)激活碼778899分享:MATLAB算法與模型學(xué)習(xí)筆記

http://yzkb.51969.com/

文章鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19006352.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄