用bvp4c求解二阶微分方程(没有匹配的维数)

时间:2017-01-27 22:34:53

标签: matlab differential-equations

假设我有BVP

ny ^(n-1)-2 * phi * y''= 0,其中给出n和phi。 Y(0)= Y(5)= 4

为了使用BVP4c,我首先将其转换为一阶微分方程组

说y_1 = y和y_2 = y'

然后我们得到系统

y'_1 = y2, y'_2 =(nx ^(n-1))/(2 * phi)

我现在写一个matlab函数来做这个,即

function sol=bvpsolve(n,phi)

function dydx = odefun(x,y)
dydx = [y(2);(n*y(1)^(n-1))/(2*phi)]
end

function res = bcfun(ya,yb)
res = [ ya(1) -1.0; yb(1) -4.0]
end


solinit = bvpinit(linspace(0,5,4),[1 0]);
sol = bvp4c(@odefun,@bcfun,solinit);
end

然后我在终端中调用该函数,即

sol=bvpsolve(2,1);

然后我收到此错误

In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in bvp4c>colloc_RHS (line 600)
Phi(1:nBCs) = Gbc(y(:,Lidx),y(:,Ridx),ExtraArgs{1:nExtraArgs});

Error in bvp4c (line 189)
  [RHS,yp,Fmid,NF] = colloc_RHS(n,x,Y,ode,bc,npar,xyVectorized,mbcidx,nExtraArgs,ExtraArgs);

Error in bvpsolve (line 13)
sol = bvp4c(@odefun,@bcfun,solinit);

Error in hw4 (line 3)
sol=bvpsolve(2,1);

这似乎是匹配错误,即由于某种原因我没有匹配尺寸。我匹配了puphpet.com

中找到的文档

基本上只是重做第一个例子的内容。有人可以轻易看到我出错的地方吗?

1 个答案:

答案 0 :(得分:1)

你的行

"Aug 4th, 1948 2 PM"

看起来像2×2矩阵的构造,实际上你想要返回边界条件(你在问题陈述中说res = [ ya(1) -1.0; yb(1) -4.0] ?)

基本上,这是一个CAS在解释白空间含义时过多考虑自己的问题。只需删除空格

即可
y(0)=4

或使格式更明确

res = [ ya(1)-1.0; yb(1)-4.0]

在这个例子中,他们使加号独立,这似乎也可以防止错误解释,

res = [ [ ya(1) - 1.0 ]; [ yb(1) - 4.0 ] ]