MATLAB 绘制二阶微分方程误差的解

问题描述 投票:0回答:1

我有一个与这篇文章非常相似的问题。不幸的是,这个问题没有答案,我还有其他问题。

我正在尝试求解 RLC 电路中的电流,并希望求解以下二阶微分方程。

Differential Equation

我使用

dsolve
函数来获得解决方案没有任何问题,但是当我尝试绘制结果图时。我发现我遇到了阻止绘图生成的错误。此外,所陈述的错误相互冲突,因此我无法理解问题出在哪里。正如我将在下面展示的,一些错误表明数据不是数字格式,并且通过更改绘图函数(使用 fplot 或 fplot3)来实现。它突然认为数据是双精度型,应该是数字类型,但仍然抛出错误。


我尝试了4组不同的代码。

尝试 1 代码: 改编自 YouTube 视频 @ 9:19

syms I(t), R, L, C
DI=diff(I);
D2I=diff(DI);
eqn = d2I(t) + (R/L)*dI(t) + I(t)/(L*C) == 0;
cond = I(0) == 1, dI(t) == -6;
IT = dsolve(equ, cond);

tt=linspace(0, 2, 1000);
xx=subs(IT, tt);
figure(1);clf reset
plot(tt, IT, 'b');grid

尝试 1 错误:

Error using plot
Data must be numeric, datetime, duration, categorical,
or an array convertible to double.

Error in untitled (line 25)
plot(tt, IT, 'b');grid

尝试 2 代码: 看到一个 comment 建议他们使用 fplot 代替,所以我也尝试了同样的方法。

syms I(t), R, L, C
DI=diff(I);
D2I=diff(DI);
eqn = d2I(t) + (R/L)*dI(t) + I(t)/(L*C) == 0;
cond = I(0) == 1, dI(t) == -6;
IT = dsolve(equ, cond);

tt=linspace(0, 2, 1000);
xx=subs(IT, tt);
figure(1);clf reset
fplot(tt, IT, 'b');grid

尝试 2 错误:

Error using fplot>singleFplot
Input must be a function or functions of a single
variable.

Error in fplot>@(f1,f2)singleFplot(cax,{f1,f2},limits,extraOpts,args) (line 208)
        hObj = cellfun(@(f1,f2) singleFplot(cax,{f1,f2},limits,extraOpts,args),fn{1},fn{2},'UniformOutput',false);

Error in fplot>vectorizeFplot (line 208)
        hObj = cellfun(@(f1,f2) singleFplot(cax,{f1,f2},limits,extraOpts,args),fn{1},fn{2},'UniformOutput',false);

Error in fplot (line 166)
    hObj = vectorizeFplot(cax,fn,limits,extraOpts,args);

Error in untitled (line 25)
fplot(tt, IT, 'b');grid

尝试 3 代码: 找不到我看到使用 fplot3 的建议的页面,但它位于 Mathworks 论坛上。

syms I(t), R, L, C
DI=diff(I);
D2I=diff(DI);
eqn = d2I(t) + (R/L)*dI(t) + I(t)/(L*C) == 0;
cond = I(0) == 1, dI(t) == -6;
IT = dsolve(equ, cond);

tt=linspace(0, 2, 1000);
xx=subs(IT, tt);
figure(1);clf reset
fplot3(tt, IT, 'b');grid

尝试 3 错误:

Error using fplot3
Expected input to be one of these types:

function_handle, sym

Instead its type was double.

Error in untitled (line 25)
fplot3(tt, IT, 'b');grid

尝试 4 代码: 改编自这里

t_vector = linspace(0, 1800, 600); 
syms I(t), R, L, C
dI(t) = diff(I(t)) 
d2I(t) = diff(dI(t)) 
eqn = d2I(t) + (R/L)*dI(t) + I(t)/(L*C) == 0;
cond = I(0) == 1, dI(t) == -6;
s(t) = dsolve(eqn, cond);
fplot(@(t) s(t), [t_vector(1), t_vector(end)])

尝试 4 错误:

Warning: Error updating FunctionLine.

 The following error was reported evaluating the
 function in FunctionLine update: Unable to convert
 expression containing symbolic variables into double
 array. Apply 'subs' function first to substitute
 values for variables.

正如我上面提到的,我在尝试 1 和 3 之间收到的错误消息之间存在冲突,其中尝试 1 指出它必须是列出的选项之一,数字是我期望的类型;尝试 3 指出数据已经是双精度数,应该采用数字格式。

我正在寻找以下帮助。

  1. 如何绘制指定 x 轴范围的输出函数?
  2. 为什么尝试 1 和 3 之间会出现这种冲突?
matlab plot ode differential-equations circuit
1个回答
0
投票

您正在尝试绘制符号解

IT
而不是解的计算数值
xx
。使用直线/曲线绘制命令
plot
这总是会给出错误,该函数不知道如何处理符号表达式。

在您使用

fplot
的最后一个示例中,您几乎是正确的,只是将符号函数转换为匿名函数是不必要的,并且激怒了解释器。请参阅https://de.mathworks.com/help/symbolic/fplot.html

© www.soinside.com 2019 - 2024. All rights reserved.