Как обнаружить мнимые результаты соответствия в MATLAB - PullRequest
0 голосов
/ 17 июня 2020

Я подбираю данные в MATLAB, используя: modelFun = @(B,x) B(1) + (B(2)-B(1)).*(1-exp(-B(3)*x)), который является функцией «однофазной ассоциации». Все входные данные представляют собой действительные целые числа от 0 до 100.

Подгонка выполняется с помощью B = lsqcurvefit(modelFun,start,nx,ny,lb,ub); nx и ny - количество значений x и y, lb и ub - ограничения (результаты B1 и B2 должно быть от 0 до 100%, B3 не ограничен)

Все работает хорошо, но время от времени MATLAB возвращает ошибку:

Предупреждение: мнимые части сложных X и / или Y аргументов игнорируются.

В скрипте (строка xxx)

Что я понимаю из этого, так это то, что вывод соответствия удаляется из мнимых частей, а действительные числа сохраняются . Я действительно новичок в математике ie, но мое чутье подсказывает мне, что подгонка всегда должна давать реальные числа, по крайней мере, это то, что я хочу.

Теперь я просто хочу уметь определять автоматически, когда соответствие выводит мнимые числа, так что я могу отбросить эти результаты соответствия и отбросить их. Однако, поскольку MATLAB немедленно делает соответствующие выходные параметры реальными, мое решение проблемы, т.е. ., Проверить результат B на мнимые числа, не будет работать:

if ~isreal(B) %check whether any component in the fit outcome is imaginary
    [actions, like delete the parameter B] 
end

Любые идеи?

1 Ответ

2 голосов
/ 17 июня 2020

Я бы сделал что-то вроде этого:

% Here is the warning that you want to catch
targWarn = 'Imaginary parts of complex X and/or Y arguments ignored';

if strcmp(lastwarn, targWarn)
  % do whatever you would like to do with parameter B
end

Не связано с вашим основным вопросом : Возможно, вам захочется узнать больше, нужно ли отбрасывать сложный ответ или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...