How to solve a boundary value problem x"+x'=1, x(0)=1, x(1)=2 , with an impulse condition x(i/3+)=2*x(i/3)+1, x'(i/3+)=3*x'(i/3)-1;
3 次查看(过去 30 天)
显示 更早的评论
function impulsbound %x"+x'=1, x(0)=1, x(i/3+)=2*x(i/3)+1, x'(i/3+)=3*x'(i/3)-1, i=1,2. x(1)=2;
format long
clear all
t=linspace(0,1,100);
solinit = bvpinit(t,[1 2]) ;
x1=1;
u=2;
teta(1)=0;
%teta(u+2)=0.2;
for i=1:u
teta(i+1)=i/3;
end
for j=1:1
for k=1:u
%initial_func=[x1,x2];
%[t,x] = ode45(@s,[teta(k):0.0001:teta(k+1)],[x1(j) x2(j)]);
x = bvp4c(@s,@bc2,solinit,[teta(k):0.0001:teta(k+1)],[x1(j) x2(j)]);%
n=length(t);
%disp(size(x));
x1(j)=x(n,1)+x(n,1)+1;
x2(j)=x(n,2)+2*x(n,2)-1;
hold on
%view(30,15);
hold on
figure(1)
subplot(2,1,1);
plot(t,x(:,1),'color','r','Linewidth',1.2);
xlabel('\bf t'); ylabel('$$z$$','interpreter','latex','fontsize',16); zlabel('\bf \psi_2');
grid on
hold on
subplot(2,1,2);
plot(t,x(:,2),'color','r','Linewidth',1.2);
xlabel('\bf t'); ylabel('$$y$$','interpreter','latex','fontsize',16); zlabel('\bf \psi_3');
grid on
hold on
end
end
function dx=s(t,x)
dx=zeros(2,1); % создает нулевой вектор-столбец
dx(1)=x(2);
dx(2)=1-x(1);
function res = bc2(xa, xb)
res = [xa(1)-1
xb(1)-2];
Reference to a cleared variable x2.
Error in impulsbound (line 17)
x = bvp4c(@s,@bc2,solinit,[teta(k):0.0001:teta(k+1)],[x1(j) x2(j)]);%
0 个评论
回答(1 个)
Torsten
2023-6-22
编辑:Torsten
2023-6-22
syms t x1(t) x2(t)
eqn1 = diff(x1,t,2) + diff(x1,t) == 1;
Dx1 = diff(x1,t);
eqn2 = diff(x2,t,2) + diff(x2,t) == 1;
Dx2 = diff(x2,t);
eqns = [eqn1,eqn2];
conds = [x1(0) == 1, x2(1/3) == 2*x1(1/3)+1, Dx2(1/3) == 3*Dx1(1/3)-1, x2(1) == 2];
sol = dsolve(eqns,conds)
hold on
fplot(sol.x1,[0,1/3])
fplot(sol.x2,[1/3,1])
hold off
grid on
3 个评论
Torsten
2023-6-22
编辑:Torsten
2023-6-23
Then you will have to write a little more: you will have equations and transmission conditions for x1(t),...,x10(t).
And also the above code is set up for only one transmission condition at x=1/3, not both at x=1/3 and x=2/3. So already in this case, you have to use x1(t), x2(t) and x3(t) as follows:
syms t x1(t) x2(t) x3(t)
eqn1 = diff(x1,t,2) + diff(x1,t) == 1;
Dx1 = diff(x1,t);
eqn2 = diff(x2,t,2) + diff(x2,t) == 1;
Dx2 = diff(x2,t);
eqn3 = diff(x3,t,2) + diff(x3,t) == 1;
Dx3 = diff(x3,t);
eqns = [eqn1,eqn2,eqn3];
conds = [x1(0) == 1, ...
x2(1/3) == 2*x1(1/3)+1, Dx2(1/3) == 3*Dx1(1/3)-1,...
x3(2/3) == 2*x2(2/3)+1, Dx3(2/3) == 3*Dx2(2/3)-1,...
x3(1) == 2];
sol = dsolve(eqns,conds)
hold on
fplot(sol.x1,[0,1/3])
fplot(sol.x2,[1/3,2/3])
fplot(sol.x3,[2/3,1])
hold off
grid on
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!