偏积分微分方程

时间:2015-10-18 23:17:31

标签: matlab pde

我是部分积分微分方程的新手,目前我正在努力学习解决这个模型。首先,我尝试解决本文给出的模型(例如等式(1.6)):

http://www.cmc.edu/pages/faculty/CKao/KaoLouShen2.pdf

结果显示在图3中。我使用线的方法求解该模型,即使用有限差分(如第5节中所述)对扩散项进行离散化(空间),并且使用梯形规则评估积分项。然后我使用内置的Matlab求解器ode15s对得到的方程进行积分。

问题是我没有得到与图3类似的结果。你能否帮我指出我的编码有什么问题。这是我的代码:

function dydt = f(t,y,N,x,K1,K2)

global m t1 t2 d1 d2 a h

x = linspace(0,1,N);

h = x(2)-x(1);

K1 = 16.*(x.*(1-x)).^2+ 0.5;
K2 = 16.*(x.*(1-x)).^2+ 0.5;

K = cell2mat(arrayfun(@(a1,a2)[a1,a2],K1,K2,'uni',false)); %engine

kappa = @(w) m*exp(1./(abs(w./(4*pi)).^2-1))/(4*pi);

trapez = ones(N,1)*h;
trapez(1) = h / 2;
trapez(end) = h / 2;

z = zeros(N,N);
k = zeros(N,N);

for j = 1:length(x)

x = x(:);
z(:,j)=abs(x(j)-x);
k(:,j) = kappa(z(:,j));

end

kk = cell2mat(arrayfun(@(a1,a2)[a1,a2],k,k,'uni',false)); %engine

dydt = zeros(2*N,size(y,2));      % preallocate dy/dt

for i = 3:2:2*N-3;
for j = 1:length(x)

    dydt(1,:) = (y(1,:)).*(K(1)-y(1,:)-a.*y(2,:))+ d1.*((t1./h.^2).*(y(3,:)-2.*y(1,:)+y(2*N-3,:)) + (1-t1).*(dot(k(j,:).*y(j,:),trapez)-y(1,:)));
    dydt(2,:) = (y(2,:)).*(K(2)-y(2,:)-a.*y(1,:)) + d2.*((t2./h.^2).*(y(4,:)-2.*y(2,:)+y(2*N-2,:)) + (1-t2).*(dot(k(j,:).*y(j,:),trapez)-y(2,:)));

    dydt(i,:) = (y(i,:)).*(K(i)-y(i,:)-a.*y(i+1,:)) + d1.*((t1./h.^2).*(y(i-2,:)-2*y(i,:)+y(i+2,:)) + (1-t1).*(dot(k(j,:).*y(j,:),trapez)-y(i,:)));
    dydt(i+1,:) = (y(i+1,:)).*(K(i+1)-y(i+1,:)-a.*y(i,:)) + d2.*((t2./h.^2).*(y(i-1,:)-2*y(i+1,:)+y(i+3,:)) + (1-t2).*(dot(k(j,:).*y(j,:),trapez)-y(i+1,:)));

    dydt(2*N-1,:) = (y(2*N-1,:)).*(K(2*N-1)-y(2*N-1,:)-a.*y(2*N,:)) + d1.*((t1./h.^2).*(y(2*N-3,:)-2.*y(2*N-1,:)+y(3,:)) + (1-t1).*(dot(k(j,:).*y(j,:),trapez)-y(2*N-1,:)));
    dydt(2*N,:) = (y(2*N,:)).*(K(2*N)-y(2*N,:)-a.*y(2*N-1,:)) + d2.*((t2./h.^2).*(y(2*N-2,:)-2.*y(2*N,:)+y(4,:)) + (1-t2).*(dot(k(j,:).*y(j,:),trapez)-y(2*N,:)));

end
end
--------------------------------------

global m t1 t2 d1 d2 a h

N = 21;
L = 1;
x = linspace(0,L,N);

m = 2.252283621;
t1 = 0.1;
t2 = 0.9;
d1 = 0.05;
d2 = 0.05;
h = x(2)-x(1);

K1 = 16.*(x.*(1-x)).^2+ 0.5;
K2 = 16.*(x.*(1-x)).^2+ 0.5;

a = 1;

K = cell2mat(arrayfun(@(a1,a2)[a1,a2],K1,K2,'uni',false));

tspan = [0; 200];
y0 = [1+0.25.*cos((2*pi/(N+1))*(1:N)); 1+0.25.*sin((2*pi/(N+1))*(1:N))];

options = odeset('RelTol',1e-13,'AbsTol',1e-13);

[t,y] = ode15s(@f,tspan,y0,options,N,x,K1,K2);

u = y(:,1:2:end);
v = y(:,2:2:end);

figure(1);plot(x,u(end,:));holdall;plot(x,v(end,:));xlabel('x');ylabel('N(x)');

0 个答案:

没有答案