Index exceeds the number of array elements (3).
Show older comments
%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)
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)
1 Comment
Mary Koldasheva
on 1 May 2021
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!