Matlab ode45 итерационная проблема - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь решить дифференциальное уравнение, используя функцию ode45.

, где параметры C1, C2, C3 и C4 представляют собой вектор-столбец размером 1: 1001. Я хочу поместить их в функцию, на которую ссылается ode45 (fun.m), и использовать их в уравнении, но я хочу, чтобы значения менялись после каждой итерации. Так, например, в начале значение C1, которое я хочу получить, это C1 (1), следующая итерация - это C1 (2), следующая итерация - это C1 (3) и т. Д.

Мой код:

[t1,X2]=deal(cell(numel(C1),1));
[t1,X2]=deal(cell(numel(C2),1));
[t1,X2]=deal(cell(numel(C3),1));
[t1,X2]=deal(cell(numel(C4),1));
for k = 1:numel(C1)
    [t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1(k),C2(k),C3(k),C4(k)),t0,X01);
end

Код начал давать мне ячейку 1001x1, в которой есть только квадратные скобки, например «[]», и каждая квадратная скобка пуста внутри. Каждый C имеет двойное значение 1x1001 и содержит значения.

1 Ответ

1 голос
/ 19 мая 2019

Вы C1 до C4 - это ячейка, а не матрица. Так что, если вы получите к нему доступ таким образом:

C1(k)

Результат будет:

ans =

  1×1 cell array

    {value}

Но вам нужно это значение напрямую, так что просто позвоните:

C1{k}

И получите этот ответ:

ans =

    value

Вот ваш решающий звонок с представленными изменениями:

[t1{k},X2{k}] = ode45(@(t,x)fun(t,x,C1{k},C2{k},C3{k},C4{k}),t0,X01);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...