-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot_optimize133.m
133 lines (115 loc) · 3.95 KB
/
plot_optimize133.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
%function res = plot_optimize133(x,coefficient,c) %定义函数
% 绘制RON曲线
% compare: S,RON,RON损失的1-93个样本数据
load data5;
clc;
% 宏观分析该厂的情况
% ox_ave:325个样本平均值c'le
% coefficient: 方法二线性回归系数向量
% c:方法二线性回归常数项
% y_pre:用线性回归求得的该厂平均的RON损失预测值,真实值为1.254769
y_pre = eqution_solve(ox_ave,coefficient,c);
% 预测和真实的误差:0.0001
error = y_pre - 1.254769;
%% 计算操作步骤
close all;clear all;clc;
load data5;
% 确定步长方向和大小
start_var = ox133(6:end,1);
end_var = optimize133(6:end,1);
step_direction = ox133 - optimize133;
step_direction = step_direction(6:end,1);
daerta = step(6:end);
% 操作记录
move_record = [];
move_record(:,1) = start_var; % 初始为133的原始数据
% 结束标记
step_direction(:,2) = 0; % 每个变量停止标记
step_direction(:,3) = daerta;
stop_flag = 1; % 全部到优化的结果,初始值为true
% 开始操纵
i = 1; % 计数器
while stop_flag
% 结束检验
temp_flag = 1;
for k = 1:length(start_var)
temp_flag = temp_flag & step_direction(k,2); %做逻辑与
end
if temp_flag
stop_flag = 0;
break;
end
% 记录操作
for k = 1:length(start_var)
if abs(step_direction(k,1))>=daerta(k) % 还能往前迈步
if step_direction(k,1)>0 % 负向-操作
move_record(k,i+1) = move_record(k,i) - daerta(k);
step_direction(k,1) = step_direction(k,1) - daerta(k);
end
if step_direction(k,1)<0 % 正向+操作
move_record(k,i+1) = move_record(k,i) + daerta(k);
step_direction(k,1) = step_direction(k,1) + daerta(k);
end
else %不能往前迈步
move_record(k,i+1) = end_var(k); %让变量在最优位置原地踏步
step_direction(k,2) = 1; %不能迈步
step_direction(k,1) = 0;
end
end
i = i+1; %计数器+1
end
[r,co] = size(move_record);
% 每步的变量值
step_var = zeros(length(ox133),co);
% 每步变量计算得到的RON损失值
y_ron_sunshi = zeros(1,93);
y_ron = zeros(1,93);
y_s = zeros(1,93);
for j = 1:co
step_var(1:5,j) = ox133(1:5);
step_var(6:end,j) = move_record(:,j);
end
for j = 1:co
y_ron_sunshi(1,j) = eqution_solve(step_var(:,j),coefficient,c);
y_ron(1,j) = eqution_solve(step_var(:,j),ron_coefficient,ron_c);
y_s(1,j) = eqution_solve(step_var(:,j),s_coefficient,s_c);
end
%% 绘制优化图
x = 1:co;
% RON损失的优化过程与原样本数据的对比
plot(x,y_ron_sunshi,'b*-',x, compare(:,3)','r.:');
title('RON损失的优化过程与原样本数据的对比'); %设置标题行
legend('优化过程的RON损失值','原样本的RON损失');
xlabel('优化操作步骤(每步的移动尺寸在Δ范围内)'); %设置横坐标
ylabel('变化值'); %设置纵坐标
% RON的优化过程与原样本数据的对比
plot(x,y_ron,'b*-',x, compare(:,2)','r.:');
title('RON的优化过程与原样本数据的对比'); %设置标题行
legend('优化过程的RON','原样本的RON含量');
xlabel('优化操作步骤(每步的移动尺寸在Δ范围内)'); %设置横坐标
ylabel('RON值'); %设置纵坐标
% S含量的优化过程与原样本数据的对比
plot(x,y_s,'b*-',x, compare(:,1)','r.:');
title('S含量的优化过程与原样本数据的对比'); %设置标题行
legend('优化过程的S含量','原样本的S含量');
xlabel('优化操作步骤(每步的移动尺寸在Δ范围内)'); %设置横坐标
ylabel('S含量值/μg/g'); %设置纵坐标
x1 = 1:325;
% 325个样本的S含量
plot(x1,s_ron_roncost(:,1),'b*-');
title('325个样本的S含量'); %设置标题行
legend('S含量');
xlabel('样本1---325'); %设置横坐标
ylabel('S含量值/μg/g'); %设置纵坐标
%325个样本的RON含量
plot(x1,s_ron_roncost(:,2),'b*-');
title('325个样本的RON含量'); %设置标题行
legend('RON含量');
xlabel('样本1---325'); %设置横坐标
ylabel('RON含量'); %设置纵坐标
%325个样本的RON损失情况
plot(x1,s_ron_roncost(:,3),'b*-');
title('325个样本的RON损失情况'); %设置标题行
legend('RON损失值');
xlabel('样本1---325'); %设置横坐标
ylabel('RON损失值'); %设置纵坐标