Index exceeds the number of array elements (3).

%Gives an error message Index exceeds the number of array elements (3) in l(i,j) = m4(j)-h(i,j);
%Вектор возможных решений
D=['т','п','к'];
S=['жаркое','теплое','холодное'];
%Вектор вероятностей погодных условий
p=[0.6,0.3,0.1];
m=length(D);
n=length(S);
%Функция полезности
h=[2 1 0.5 ; 1.5 1.2 0.8 ; 1 1.2 1.5];
%Критерий максимума ожидаемых сожалений
%матрица максимальных элементов по столбцам
m4=max(h,[],1);
%Формирование матрицы сожалений
l=zeros(m,n);
for i=1:m
for j=1:n
l(i,j) = m4(j)-h(i,j);
end
end
a4=zeros(m,1);
%Заполнение вектора а4 математическими ожиданиями
for i=1:m
a4(i,1)=sum(p.*l(i,:));
end
%Поиск номера строки этой матрицы(вектора), элемент которой минимальный
d4=find(a4==min(a4(:,1)));
%Формирование вектора строк для вывода на экран
Y4=['По критерию минимума ожидаемых сожалений рекомендуется сажать ', num2str(D(d4)),...
'.При этом значение функции сожалений составит ', num2str(min(a4(:,1))),...
'руб.То есть в наихудшем случае убытки не превысят ',num2str(min(a4(:,1))),'руб.']
disp(Y4)

Answers (1)

DGM
DGM on 1 May 2021
Edited: DGM on 1 May 2021
The problem is caused because
D=['т','п','к'];
S=['жаркое','теплое','холодное'];
is horizontal concatenation of character arrays, so m=3 and n=20. You can solve this by using cell arrays of character arrays (or you could use arrays of double-quoted strings). Lastly, doing num2str(D(d4)) doesn't make much sense, since it's already a string. It could probably use some formatting tweaks, but I don't know what it says.
%Вектор возможных решений
D={'т','п','к'};
S={'жаркое','теплое','холодное'};
%Вектор вероятностей погодных условий
p=[0.6,0.3,0.1];
m=length(D);
n=length(S);
%Функция полезности
h=[2 1 0.5 ; 1.5 1.2 0.8 ; 1 1.2 1.5];
%Критерий максимума ожидаемых сожалений
%матрица максимальных элементов по столбцам
m4=max(h,[],1);
%Формирование матрицы сожалений
l=zeros(m,n);
for i=1:m
for j=1:n
l(i,j) = m4(j)-h(i,j);
end
end
a4=zeros(m,1);
%Заполнение вектора а4 математическими ожиданиями
for i=1:m
a4(i,1)=sum(p.*l(i,:));
end
%Поиск номера строки этой матрицы(вектора), элемент которой минимальный
d4=find(a4==min(a4(:,1)));
%Формирование вектора строк для вывода на экран
Y4=['По критерию минимума ожидаемых сожалений рекомендуется сажать ', D{d4},...
'.При этом значение функции сожалений составит ', num2str(min(a4(:,1))),...
'руб.То есть в наихудшем случае убытки не превысят ',num2str(min(a4(:,1))),'руб.']
disp(Y4)

Asked:

on 1 May 2021

Commented:

on 1 May 2021

Community Treasure Hunt

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

Start Hunting!