Хобрук: Ваш путь к мастерству в программировании

ode45 + lsqcurvefit — несколько ОДУ

Я пытаюсь подогнать свои экспериментальные данные к модели, включающей 2 связанных ОДУ. Я создал отдельную функцию для определения двух ODE, где a — это массив, содержащий две константы, которые я пытаюсь подогнать.

function dy = CalcCoupODEs(t,y,a) 
%dy= matrix with all 2 ODEs
dy = zeros(2,1); % variable definition
dy(1) = 1.41.*a(1) .* ((y(2)*y(1)^2)^2)*y(1) - a(2) .* y(1)*t ; %ODE for R
dy(2) = -a(1)*(y(2)*y(1)^2)^2; %ODE for n
end

Затем я вызываю функцию следующим образом:

cycle_DMACl = [20, 25, 30, 40, 45]; % this is t variable
R_DMACl = [18.34, 11.29, 7.09, 6.51, 4.396]; %this is y(1)
n_DMACl = [92.31, 61.9, 53.82, 26.04, 11.87]; % this is y(2)
a0 = [1, 1]; %initial guess for constants
lb1 = [0, 0]; %lower bound
a = lsqcurvefit(@CalcCoupODEs, a0, cycle_DMACl(:), R_DMACl(:), n_DMACl(:), lb1);

Я получаю следующее:

Предупреждение: длина нижних границ > length(x); игнорирование дополнительных ограничений.

Очевидно, что это не попытка подобрать правильную вещь (a и lb оба имеют размер 1x2). Что я делаю неправильно и как лучше всего это сделать?

Благодарю вас!


Ответы:


1

У меня мало опыта работы с lsqcurvefit(...), но быстрый взгляд на документацию MathWork по этой функции заставляет меня думать, что ваши аргументы не соответствуют ожиданиям синтаксиса MATLAB. Ваше использование выглядит как

 lsqcurvefit(fun,initial_points,time,y1_data,y2_data,lower_bounds)

Это шесть аргументов с двумя записями данных y. В документации к функции показан синтаксис с шестью аргументами, который гласит:

 lsqcurvefit(fun,initial_points,time,y_data,lower_bounds,upper_bounds)

Я попытался быстро исправить, создав новую матрицу,

 y_data = [y1_data', y2_data']

и вставка некоторых важных и случайных верхних границ. Я получил ошибку в ответ.

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

18.06.2018

2

Благодарю за ваш ответ. Помещение y_data в матрицу решило проблему. Я заметил, что если начальные значения отключены, lsqcurvefit выдает ошибку о том, что значения YDATA и функции имеют разный размер (что звучит как ошибка, не связанная с начальными значениями). Поигравшись много с начальными значениями, я добился сходимости.

Спасибо еще раз!

20.06.2018
Новые материалы

Пожалуй, лучший пост, который я читал за последнее время.
Пожалуй, лучший пост, который я читал за последнее время. Мне за 30, и я могу относиться к большей части истории. Действительно отличные идеи, которые помогли мне снова сосредоточиться на..

100 дней кода машинного обучения — День 097
Подведение итогов дня 096 В дни 095 и 096 мы говорили о том, как мы слышим звук в пространстве: время интерауральной задержки, передаточная функция, связанная с головой, а также мы говорили..

Какова ваша «история данных»?
Представление концепций продуктов для данных и машинного обучения заинтересованным сторонам и руководству Все любят данные. Все любят говорить, как будто понимают данные. Всем нравится..

Все, что вам нужно знать о «Внимании» и «Трансформерах» — Углубленное понимание — Часть 2
Внимание, Самостоятельное внимание, Многоголовое внимание, Маскированное многоголовое внимание, Трансформаторы, BERT и GPT В предыдущем рассказе я объяснил, что такое механизм внимания, а также..

Расставание с локальным хранилищем
Что такое локальное хранилище Локальное хранилище — это механизм, который позволяет веб-приложениям хранить данные на стороне клиента. Это часть API веб-хранилища, которое также включает в себя..

CycleGAN: как машинное обучение обучает непарному преобразованию изображения в изображение
Недавно я прочитал статью CycleGAN ( ссылка ), которая показалась мне очень интересной, потому что модели CycleGAN обладают невероятной способностью точно преобразовывать изображения во что-то, чем..

«Изучение передовых технологий: подробный обзор последних инноваций в области технологий…
Технологии постоянно развиваются, и последние инновации в технологической отрасли могут изменить наш образ жизни и работы так, как мы никогда не считали возможным. В этой статье подробно..