Решение ODE, когда функция задана как дискретные значения -matlab-

У меня есть следующее ODE:

x_dot = 3*x.^0.5-2*x.^1.5 % (Equation 1) 

Я использую ode45 для его решения. Мое решение задается как вектор dim (kx 1) (обычно k = 41, который задается tspan ).

С другой стороны, я сделал модель, которая аппроксимирует модель из (1), но для того, чтобы сравнить, насколько точна эта вторая модель, я хочу ее решить (решить вторую ODE) с помощью ode45 . Моя проблема в том, что эта вторая ода дается дискретно:

 x_dot = f(x) % (Equation 2) 

f является дискретной, а не непрерывной функцией, аналогичной (1). Значения I для f :

 0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725 

Теперь я хочу решить эту вторую оду, используя ode45 . Надеюсь, я получу решение, очень похожее на то, что из (1). Как я могу решить дискретную оду, применяющую ode45 ? Можно ли использовать ode45 ? В противном случае я могу использовать Runge-Kutta но я хочу быть честным, сравнивая два метода, а это значит, что я должен решить их одинаково.

Вы можете использовать interp1 для создания интерполированной функции таблицы поиска:

 fx = [0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 ... 1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 ... 1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 ... 1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725]; x = 0:0.25:10 f = @(xq)interp1(x,fx,xq); 

Тогда вы должны иметь возможность использовать ode45 как обычно:

 tspan = [0 1]; x0 = 2; xout = ode45(@(t,x)f(x),tspan,x0); 

Обратите внимание, что вы не указали, какие значения x вашей функции ( fx здесь) оцениваются, поэтому я выбрал от нуля до десяти. Разумеется, вы также не захотите использовать скопированные и вставленные значения из командной строки, потому что они имеют только четыре десятичных знака точности. Также обратите внимание, что поскольку ode45 требовал ввода t а затем x , я создал отдельную анонимную функцию, используя f , но f может создаваться с неиспользуемым t входом, если это необходимо.

Interesting Posts

Зачем «шагать» в конструкторе System.Drawing.Bitmap быть кратным 4?

Какой лучший дизайн базы данных: больше таблиц или больше столбцов?

C # десериализация структуры после ее получения через TCP

Как установить горячий угол в Windows 7?

Unspecified, undefined и реализация определенного поведения WIKI для C

Загрузка из Интернета прямо на Google

Windows 10 Start Menu останавливает работу

Как проверить, является ли вид fragmentа видимым для пользователя?

Есть ли веская причина для обеспечения максимальной ширины 80 символов в файле кода, в этот день и в возрасте?

Создание classа Entity для изменений

Алгоритм анализа алгебры для java

В Windows 7 можно сделать UAC в приглашении учетной записи администратора для пароля, точно так же, как ограниченная учетная запись?

Как запретить обработчик командной строки командной строки оценивать короткие имена файлов

ReactJs CreateClass не является функцией

Firefox Add-on RESTclient – Как вводить параметры POST?

Давайте будем гением компьютера.