Ошибка при оценке функции свертки - PullRequest
0 голосов
/ 29 ноября 2018

Это моя первая попытка написать что-нибудь в Matlab, поэтому, пожалуйста, наберитесь терпения.

Я пытаюсь оценить решение следующего ODE: w '' + N (w, w ') =f (t) с условиями Коши w (0) = w '(0) = 0. Здесь N - заданная нелинейная функция, f - заданный источник.Мне также нужна функция

enter image description here

, где G - решение следующего ODE:

enter image description here

, где G (0) = G '(0) = 0, s - постоянная, а

enter image description here

Моя попытка заключается в следующем: я определяю N, f, w и G:

k = 1000;
N = @(g1,g2) g1^2 + sin(g2);
f = @(t) 0.5 * (1 + tanh(k * t));

t = linspace(0, 10, 100);
w = nonlinearnonhom(N, f);
G = nonlinearGreen(N);

Эта часть в порядке.Я могу построить как w, так и G: и то, и другое кажется правильным.Теперь я хочу оценить wG.Для этой цели я использую прямое и обратное преобразования Лапласа следующим образом:

wG = ilaplace(laplace(G, t, s) * laplace(f, t, s), s, t);

, но говорит:

Undefined function 'laplace' for input arguments of type 'double'.

Error in main (line 13)
wG = ilaplace(laplace(G, t, s) * laplace(f, t, s), s, t);

Теперь я не уверен, является ли это определение wGисправить вообще, и если нет других определений.

Приложение: nonlinearGreen(N) определяется следующим образом:

function G = nonlinearGreen(N)

eps = .0001;
del = @(t)[1/(eps * pi) * exp( -t^2/eps^2)];

eqGreen = @(t, g)[g(2); - N(g(1),g(2)) + del(t)];
tspan = [0, 100];
Cc = [0, 0];
solGreen = ode45(eqGreen, tspan, Cc);
t = linspace(0, 10, 1000);
G = deval(solGreen, t, 1);

end

и nonlinearnonhom определяется какследует:

function w = nonlinearnonhom(N, f)

eqnonhom = @(t, g)[g(2); - N(g(1),g(2)) + f(t)];
tspan = [0, 100];
Cc = [0, 0];
solnonhom = ode45(eqnonhom, tspan, Cc);
t = linspace(0, 10, 100);
w = deval(solnonhom, t, 1);

end

1 Ответ

0 голосов
/ 30 ноября 2018

Вы продолжаете смешивать разные типы, и это не очень хорошая идея.Я предлагаю вам придерживаться символического полностью, если вы хотите использовать функцию laplace.Когда вы определяете N и f с @ (arobase) как function handles, а не symbolic expressions, как вы, возможно, захотите сделать.Я предлагаю вам взглянуть на документацию symbolic и переписать ваши функции как символические.

Затем сообщение об ошибке довольно ясно.

Неопределенная функция'laplace' для входных аргументов типа 'double'.
Ошибка в main (строка 13)
wG = ilaplace (laplace (G, t, s) * laplace (f, t, s), s, t);

Это означает, что функция laplace не может иметь аргументы типа double.

Проблема в том, что ваш t является вектором double.Другая ошибка заключается в том, что s не определено в вашем коде.

Согласно документации Matlab laplace, все аргументы имеют тип symbolic.

Вы можете попытаться вручную указать символьные s и t.

% t = linspace(0, 10, 100); % This is wrong
syms s t
wG = ilaplace(laplace(G, t, s) * laplace(f, t, s), s, t);

У меня нет ошибок после этого.

...