-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathch3ex4.m
42 lines (39 loc) · 1.12 KB
/
ch3ex4.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function ch3ex4
% y(1) = y(x), y(2) = z(x), y(3) = y'(x), y(4) = z'(x)
global d
hold on
for i = 1:3
D = 4*i;
d = 1/D;
if i == 1
P = [-1; 0.5]; % Guess parameters P = [b; c]:
solinit = bvpinit(linspace(d,D,5),[d; 0; 0; 0],P);
else
solinit = bvpinit(sol,[d,D]);
end
sol = bvp4c(@odes,@bcs,solinit);
plot(sol.x,sol.y(1:2,:),sol.x(end),sol.y(1:2,end),'ro',...
sol.x(1),sol.y(1:2,1),'ko');
legend('y(x)','z(x)',0);
axis([0 12 0 1]);
drawnow
end
hold off
%===========================================================
function dydx = odes(x,y,P)
dydx = [ y(3); y(4); 2*(y(3) - y(2))/(3*y(1)); -y(1)*y(4) ];
function res = bcs(ya,yb,P)
global d
res = zeros(6,1);
res(1:4) = ya - series(d,P);
res(5:6) = [ yb(3); (yb(4) - (- yb(1)*yb(2))) ];
function y = series(x,P)
b = P(1);
c = P(2);
yx = x + b*x^(5/3) - c*x^2 - (5/7)*b^2*x^(7/3) ...
+ (7/6)*b*c*x^(8/3);
ypx = 1 + (5/3)*b*x^(2/3) - 2*c*x - (5/3)*b^2*x^(4/3)...
+ (28/9)*b*c*x^(5/3);
zx = 1 + c*x - (1/6)*c*x^3 - (9/88)*b*c*x^(11/3);
zpx = c - (1/2)*c*x^2 - (3/8)*b*c*x^(8/3);
y = [ yx; zx; ypx; zpx];