Variable 'x_opt' is not fully defined on some execution paths.

8 ビュー (過去 30 日間)
Hussain SARWAR KHAN
Hussain SARWAR KHAN 2018 年 3 月 13 日
コメント済み: Walter Roberson 2022 年 10 月 27 日
i am write this code in userdefined Simulink function For model predictive control but this code has some error so what i have too do.
function [Sa,Sb,Sc] = control(I_ref,I_meas)
2 % Variables defined in the parameters file
3 % Sampling time of the predictive algorithm [s]
4 Ts = 25e-6;
5 % Load parameters
6 R = 10; % Resistance [Ohm]
7 L = 10e-3; % Inductance [H]
8 e = 100; % Back-EMF peak amplitude [V]
9 f_e = 50*(2*pi); % Back-EMF frequency [rad/s]
10 Vdc = 520; % DC-link voltage [V]
11 % Current reference
12 I_ref_peak = 10; % Peak amplitude [A]
13 f_ref = 50*(2*pi); % Frequency [rad/s]
14 % Voltage vectors
15 v0 = 0;
16 v1 = 2/3*Vdc;
17 v2 = 1/3*Vdc + 1j*sqrt(3)/3*Vdc;
18 v3 = -1/3*Vdc + 1j*sqrt(3)/3*Vdc;
19 v4 = -2/3*Vdc;
20 v5 = -1/3*Vdc - 1j*sqrt(3)/3*Vdc;
21 v6 = 1/3*Vdc - 1j*sqrt(3)/3*Vdc;
22 v7 = 0;
23 v = [v0 v1 v2 v3 v4 v5 v6 v7];
24 % Switching states
25 states = [0 0 0;1 0 0;1 1 0;0 1 0;0 1 1;0 0 1;1 0 1;1 1 1];
26 % Optimum vector and measured current at instant k-1
27 persistent x_old i_old
28 % Initialize values
29 if isempty(x_old)
30 x_old = 1;
31 end
32 if isempty(i_old)
33 i_old = 0+1j*0;
34 end
35 g_opt = 1e10;
36 % Read current reference inputs at sampling instant k
37 ik_ref = I_ref(1) + 1j*I_ref(2);
38 % Read current measurements at sampling instant k
39 ik = I_meas(1) + 1j*I_meas(2);
40 % Back-EMF estimate
41 e = v(x_old) - L/Ts*ik - (R - L/Ts)*i_old;
42 % Store the measured current for the next iteration
43 i_old = ik;
44 for i = 1:8
45 % i-th voltage vector for current prediction
46 v_o1 = v(i);
47 % Current prediction at instant k+1
48 ik1 = (1 - R*Ts/L)*ik + Ts/L*(v_o1 - e);
49 % Cost function
50 g = abs(real(ik_ref - ik1)) + abs(imag(ik_ref - ik1));
51 % Selection of the optimal value
52 if (g<g_opt)
53 g_opt = g;
54 x_opt = i;
55 end
56 end
57 % Store the present value of x_opt
58 x_old = x_opt;
59 % Output switching states
60 Sa = states(x_opt,1);
61 Sb = states(x_opt,2);
62 Sc = states(x_opt,3);
63end
  2 件のコメント
Naresh Rayavarapu
Naresh Rayavarapu 2022 年 10 月 27 日
sir have you found the solution for the script X_opt error
Walter Roberson
Walter Roberson 2022 年 10 月 27 日
if (g<g_opt)
g_opt = g;
x_opt = i;
end
Suppose that condition is never true, then what is x_opt set to?

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2018 年 3 月 13 日
The message is correct. You do not define the value of x_opt under the circumstance that none of the computed g values are less than the 1e10 that you initialize g_opt to.
  5 件のコメント
Noemi Hernandez-Oliva
Noemi Hernandez-Oliva 2020 年 1 月 9 日
Hello Hussain can you tell me too what is the solution, I sent you an email
Hussain SARWAR KHAN
Hussain SARWAR KHAN 2020 年 1 月 20 日
PFA, which contains the answer/solution of above question.
Remember in your Prayer,
Regards:
Hussain

サインインしてコメントする。

その他の回答 (2 件)

chao wang
chao wang 2019 年 11 月 6 日
I have another way to achieve your goals.

Hussain SARWAR KHAN
Hussain SARWAR KHAN 2020 年 1 月 20 日
PFA, which contains the answer/solution of above question.
Remember in your Prayer,
Regards:
Hussain

カテゴリ

Help Center および File ExchangeModel Predictive Control Toolbox についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by