Singular Jacobian in bvp4c while Mathematica has no problem

조회 수: 2 (최근 30일)
Alexander Erlich
Alexander Erlich 2021년 12월 6일
편집: Torsten 2021년 12월 28일
Hi,
I am trying to solve the following boundary value problem:
,
with boundary conditions at and at . The parameters are all positive real numbers and .
Sadly, Matlab gives me the classic error: Unable to solve the collocation equations -- a singular Jacobian encountered. I paste my code below.
Note that there is no particular reason this should be ill behaved for , the system has an analytical solution which is regular over the mentioned interval. Mathematica's boundary value problem solver has no problem:
Could you please help me figure out what is going wrong in my Matlab code?
A=0.1;
B=7;
mu=1;
gammaR=2;
gammaTheta=5;
solinit = bvpinit( linspace(A,B,100),@(x)guess(x, gammaR, gammaTheta, B, mu));
sol = bvp4c(@(x,y)bvpfcn(x,y, gammaR, gammaTheta, mu), @(ya, yb)bcfcn(ya,yb, A), solinit);
--------------
function dydx = bvpfcn(x,y, gammaR, gammaTheta, mu)
dydx = zeros(2,1);
dydx = [gammaR*gammaTheta*x/y(1)
2*mu*gammaR/(x*gammaTheta)*(1-x^4*gammaTheta^4/y(1)^4 )];
end
--------------
function res = bcfcn(ya,yb, A)
res = [ya(1)-A
yb(1)];
end
--------------
function g = guess(x, gammaR, gammaTheta, B, mu)
g = [mu*(gammaR/gammaTheta - gammaTheta / gammaR)*log(x/B)
x*sqrt(gammaR*gammaTheta)];
end
  댓글 수: 4
Star Strider
Star Strider 2021년 12월 7일
편집: Star Strider 2021년 12월 28일
My pleasure!
Since no other person has posted anything, Contact Support since this may well be a bug that hasn’t previoously been discovered. Include the URL of this thread in the message so that you don’t have to repeat everything.
Please post back here with what MathWorks suggests, since others may have the same problem and would be searching for it on Answers. (I would also be interested in knowing what the problem is and what the fix for it is.)
EDIT — (28 Dec 2021 at 2:08)
I submitted a bug report to MathWorks on this. The reply I got last week was not helpful, so I am not posting it.
.
Torsten
Torsten 2021년 12월 28일
편집: Torsten 2021년 12월 28일
function res = bcfcn(ya,yb, A)
res = [ya(1)-A
yb(2)];
...
end

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by