Позвольте мне описать задачу: у меня есть 3 матрицы (M1,M2,M3)
, каждая из которых имеет длину (Mi) строк и 2 столбца. Нам дана функция g(x,s)
, где s
- это двумерный параметр, а x
и eta
. Я хочу проверить первую матрицу M1, если существует s, например g(x,M1(i,:)>eta
. Я хочу ЗАКОНЧИТЬ алгоритм и установить s_new=M1(i,:)
. Если таких s внутри M1
не существует, я хочу перейти к матрице M2
и искать внутри нее. Следующая матрица М3. Если такой s_new не существует во всех матрицах, я хочу сломаться.
Моя первая попытка:
function[s_new]= checking(M1,M2,M3,x)
bool1=0;
eta = 10^-8;
g = @(x,s) x-s(1)-s(2);
while bool1==0
for i=1:length(M1)
if g(x,M1(i,:))>eta
s_new=M1(i,:);
bool1=1;
end
end
for i=1:length(M2)
if g(x,M2(i,:))>eta
s_new=M2(i,:);
bool1=1;
end
end
for i=1:length(M3)
if g(x,M3(i,:))>eta
s_new=M3(i,:);
bool1=1;
end
end
bool1=1;
end
Моя вторая попытка включала какую-то опцию перерыва, но она тоже не работала. Проблема заключается в том, что alghoritm не останавливается, когда находит s в M1, например, когда выполняется наше условие, он переходит к M2 и, если находит такие s, изменяет s_new. Также, чтобы сэкономить некоторое время, я не хочу, чтобы алгоритм alghoritm проходил через матрицу M2, если такая s существует в M1.
Пример, почему это работает плохо:
M1=[0,-1;0,-1], M2=[0,-2;0,-2], M3=[0,0;0,0], x=0
Он должен возвращать вектор [0,-1]
и вместо него возвращает [0,-2]
. Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: bool1 = 1 внутри циклов for подчеркнут красным, что говорит о том, что bool1 может быть не использован, как если бы он не распознал его из условия при запуске, в то время как bool1 = 0