我昨天最初问this question并自己找到答案;但是,我在Matlab中使用了clear all
命令,现在该函数抛出错误Undefined function or variable 'y'
。
我使用了我的答案中的代码
function [s1] = L_Analytic3(eqn,t0,h,numstep,y0)
%Differential Equation solver for specific inputs
% eqn is the differential equation
% t0 is start of evaluation interval
% h is stepize
% numstep is the number of steps
% y0 is the initial condition
syms y(x)
cond = y(0) == y0;
A = dsolve(eqn, cond);
s1 = A;
S1 = s1;
for x = t0 : h : h*(numstep)
subs(x);
if x == t0
S1 = subs(s1,x);
else
S1 = [subs(S1), subs(s1,vpa(x))];
end
end
end
并在输入L_Analytic3(diff(y) == y,0,0.1,5,1)
后将clear all
放入命令窗口。我必须运行一个单独的代码
syms y(x)
cond = y(0) == 1;
A = dsolve(diff(y) == y, cond);
在使用我的函数之前,函数才能正常工作。这只是因为A
,ans
,cond
,x
和y
在使用函数之前已经由3行代码定义了吗?如果是这样,有没有办法可以使用该功能而无需先使用该3行代码?
答案 0 :(得分:1)
当你执行L_Analytic3(diff(y) == ...);
时,你没有定义变量y,所以MATLAB抱怨 - 它无法知道y
是一个将在你调用的函数中定义的符号。您不需要所有3行代码。 syms y(x)
应足以定义y,并允许您使用所需的函数调用。
现在,有两种简单的方法可以解决这个问题:
syms y(x)
的脚本(或其他函数),然后按照您的方式调用L_Analytic3
(现在不需要syms y(x)
,已经定义了的话)。@(x) diff(x)==x
,并将L_Analytic3
的行略微更改为A = dsolve(eqn(y), cond);
这两种方式都可以正常工作,不知道第二个方法是否在更复杂的情况下中断。如果你做的是象征性的东西我可能会选择第一个版本,如果你想对数字和符号函数都有相同的函数调用,我可能会选择第二个版本。