Матрица должна иметь одинаковое количество столбцов в каждой строке.Aeq
в вашем случае имеет разное количество столбцов.
Как это исправить?
Переменные, отсутствующие в уравнениях ограничений, имеют нулевые коэффициенты .Итак:
%Objective Function
%X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18
f = [0.669 0.654 0.503 0.683 0.670 0.673 0.749 0.655 0.660 0.583 1.243 0.639 2.024 2.156 1.672 0.473 0.139 0.687];
A = []; b = []; %No inequality constraints
%Equality Constraints are:
%X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18
Aeq=[0.1 0.12 0.335 0.15 0.18 0.19 0.12 0.15 0.15 0.15 0 0.15 0.11 0 0.13 0 0 0.46; %Nitrogeno
0.3 0.24 0 0.03 0.05 0.04 0.27 0.03 0.24 0.15 0 0 0.52 0.52 0 0 0 0 ; %Fosforo
0.1 0.12 0 0.31 0.15 0.19 0.08 0.2 0.12 0.15 0.50 0 0 0.34 0.44 0 0 0 ; %Potasio
0 0 0 0 0 0 0 0 0 0 0 0.26 0 0 0 0 0.50 0 ; %Calcio
0 0 0 0 0.06 0 0 0 0 0 0 0 0 0 0 0.17 0 0]; %Magnesio
beq = [285.71; 305.33; 450; 262.50; 41.50]; %What you defined as 'b' is actually `beq`
lb = zeros(18,1); ub = inf(18,1); %Bounds
[x, Optimal_sol] = linprog(f, A, b, Aeq, beq, lb, ub);
>> x
x =
1.0e+03 *
0.7142
0
0
1.0268
0
0
0
0
0
0.4018
0
0
0
0
0
0.2441
0.5250
0
>> Optimal_sol
Optimal_sol =
1.6018e+03