【问题标题】:Error while evaluating the function convolution评估函数卷积时出错
【发布时间】:2018-11-29 01:29:42
【问题描述】:

这是我第一次尝试用matlab写东西,所以请耐心等待。

我正在尝试评估以下 ODE 的解:w'' + N(w, w') = f(t) 与柯西条件 w(0) = w'(0) = 0。这里 N是给定的非线性函数,f 是给定的源。我也需要这个功能

其中 G 是以下 ODE 的解:

其中 G(0) = G'(0) =0,s 是一个常数,并且

我的尝试如下:我定义NfwG

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);

这部分没问题。我可以同时绘制wG:两者似乎都是正确的。现在,我想评估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

【问题讨论】:

  • 您好,请使用minimal代码维护问题,如果您更改某些部分,请删除旧部分。如果不再与卷积有关,请更新问题的标题。此外,包括 matlab 的整个错误消息(行号)。但我怀疑您尝试使用符号 forbidden 来索引数组。
  • 感谢您的指导。我只留下了评估Gw 的代码,以防万一有人想运行整个程序。
  • 我想绘制wwG fot 0
  • 你一个人好像有很多问题。您需要应用分而治之策略,将您的问题拆分为更易于解决的不同小问题。

标签: matlab symbolic-math


【解决方案1】:

你不断混合不同类型的类型,这不是一个好主意。如果你想使用 laplace 函数,我建议你一直使用符号。当您将 Nf@(arobase) 定义为 function handles 而不是 symbolic expressions 时,您可能想要这样做。我建议您查看symbolic 文档并将您的函数重写为符号。

那么,错误信息就很清楚了。

“double”类型的输入参数的未定义函数“laplace”。
主要错误(第 13 行)
wG = ilaplace(laplace(G, t, s) * laplace(f, t, s), s, t);

这意味着函数laplace不能有double类型的参数。

问题是您的tdouble 的向量。另一个错误是您的代码中没有定义s

根据laplace 的Matlab 文档,所有参数的类型都是symbolic

您可以尝试手动指定符号st

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

在那之后我没有错误。

【讨论】:

  • 感谢您的澄清。我现在想在同一个图上绘制wwG。我想,我需要使用fplot(@(t) wG, [0 10]),但它不起作用。
  • 这是因为代码需要对绘图进行重大更改,或者我为这个问题选择了错误的部分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多