我有一个与这篇文章非常相似的问题。不幸的是,这个问题没有答案,我还有其他问题。
我正在尝试求解 RLC 电路中的电流,并希望求解以下二阶微分方程。
我使用
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 指出数据已经是双精度数,应该采用数字格式。
我正在寻找以下帮助。
您正在尝试绘制符号解
IT
而不是解的计算数值 xx
。使用直线/曲线绘制命令 plot
这总是会给出错误,该函数不知道如何处理符号表达式。
在您使用
fplot
的最后一个示例中,您几乎是正确的,只是将符号函数转换为匿名函数是不必要的,并且激怒了解释器。请参阅https://de.mathworks.com/help/symbolic/fplot.html