使用“bvp4c”Matlab函数求解微分方程组,错误-->错误使用bvp4c输入参数过多

使用“bvp4c”Matlab函数求解微分方程组,错误-->错误使用bvp4c输入参数过多,matlab,Matlab,我很难尝试使用bvp4c Maltab函数运行微分方程代码,总是使用bvp4c获得相同的错误太多输入参数我尝试了太多来自不同作品的其他代码,但结果是一样的!需要帮忙吗?代码如下所示: function bvp4c L=0.2; xlow=0; xhigh=L; solinit=bvpinit(linspace(xlow,xhigh,20),[1 -1]); sol=bvp4c(@bvp4ode,@bvp4bc,solinit); xint=linspace(xlow,xhigh); sxint=

我很难尝试使用bvp4c Maltab函数运行微分方程代码,总是使用bvp4c获得相同的错误太多输入参数我尝试了太多来自不同作品的其他代码,但结果是一样的!需要帮忙吗?代码如下所示:

function bvp4c
L=0.2;
xlow=0;
xhigh=L;
solinit=bvpinit(linspace(xlow,xhigh,20),[1 -1]);
sol=bvp4c(@bvp4ode,@bvp4bc,solinit);
xint=linspace(xlow,xhigh);
sxint=deval(sol,xint);
plot(xint,sxint(1,:))
%-----------------
function dydx=bvp4ode(x,y)
L=0.2;
V=1;
E0=8.85e-12;
Er1=2.64;
Er2=3.25;
K11=6.95e-12;
AE=Er2-Er1;
Vth=pi*(K11/(E0*AE))^1/2;
dydx=[y(2) (V^2/Vth^2)*(pi^2/L^2)*sin(y(1))*cos(y(1))];
%-----------------
function res=bvp4bc(ya,yb)
res=[ya(1) yb(1)];
您定义了一个函数bvp4c,并在该函数中尝试调用内置的MATLAB bvp4c函数。这是行不通的。当您定义一个与内置函数同名的函数时,MATLAB只使用您的函数。这就是为什么输入参数过多时会出现错误:bvp4c函数没有输入参数,而在内部,您使用三个参数调用它

要解决此问题,请将函数重命名为callBvp4c或MATLAB未使用的任何其他名称。此外,还要确保将文件重命名为callBvp4c.m,因为MATLAB通过函数名对函数进行寻址


我假设这三个函数都保存在同一个.m文件中。这通常是可能的,但是bvp4ode和bvp4bc只在callBvp4c中可见。当你给索尔打电话时=bvp4c@bvp4ode,则为bvp4c函数提供函数句柄,但它找不到相应的函数。这就是错误所说的:它找不到bvp4ode。要解决这个问题,您必须为每个函数创建一个单独的.m文件,并确保.m文件与函数同名。在您的例子中:callBvp4c.m、bvpode.m和bvp4bc.m.

谢谢hbadert,我仍然有错误,这次是:未定义函数“bvpode”,用于类型为“double”的输入参数。bvparguments行106 testODE=odex1,y1,odeExtras{:}中出错;bvp4c第130行中的错误[n、npar、n区域、atol、rtol、Nmax、xyVectorized、printstats]=。。。callBvp4c第6行出现错误=bvp4c@bvp4ode,@bvp4bc,solinit;所有三个函数都在一个文件中定义了吗?好的,我在答案中添加了一段,应该可以解决这个问题。你好,hbaderts,我做了这个,我制作了一个包含三个文件的文件夹:callBvp4c.m,bvpode.m和bvp4bc.m,对于bvpode.m和bvp4bc.m,我在文件函数bvpode和函数bvp4bc中写到,而对于callBvp4c,我在设置路径后使用它来运行代码。然而,不幸的是,我也犯了同样的错误。我不知道我是否严格遵守了你的程序。