Neuman边界条件

Neuman边界条件

对这样一个问题
在这里插入图片描述
我的目标:
在这里插入图片描述
我们有如下的效果:

一阶近似

  1. t=0.06
    在这里插入图片描述

  2. t = 0.1
    在这里插入图片描述

  3. t = 0.9
    在这里插入图片描述

二阶近似

1.t=0.6
在这里插入图片描述
2.t=0.1
在这里插入图片描述
3.t = 0.9
在这里插入图片描述

误差的差别

在这里插入图片描述

改变步长

在这里插入图片描述
取t=0.9
1.M=20,dt = 0.001

一阶

在这里插入图片描述

二阶

在这里插入图片描述

差别

在这里插入图片描述
2.M=40,dt=0.0003,t=0.6
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二道题

在这里插入图片描述
t = 0.9
在这里插入图片描述
在这里插入图片描述
描述了物体受到的热量扩散的情况,一定空间内,距离热源比较远的地方,随着时间的增长,该处也会发生热交换的现象

全部代码如下:

clear; clc; close all;
%%1.4
%% 一阶近似
m = 40; dt=0.0003;t = 0.06;a=1;dx = 1/m;n = t/dt;
u = zeros(n+1,m+1);
v = zeros(n+1,m+1);% 真解
x = zeros(1,m+1);
%一阶近似 u(0,t)=u(dx,t),u(x,0)=cos(pi*x/(2*180))
for i = 1:m
    x(i) = (i-1)*dx;
    u(1,i) = cos(pi*x(i)/2);
end
for j = 1:n
     for i = 2:m%u(1,t)=0导致的
         u(j+1,i) = u(j,i) + a*(dt/dx^2)*(u(j,i+1)-2*u(j,i)+u(j,i-1));
     end
     u(j+1,1) = u(j+1,2);%这是由一阶近似dux(0,t)=0决定的
end
%真解
f = @(x,t)(exp(-4*((pi)^2)*(a^2)*t)*sin(2*pi*x));
n = t/dt;
T = zeros(1,n+1);
for j = 1:n+1
    T(j) = (j-1)*dt;
end
for j = 1:n+1
     for i = 1:m+1
         v(j,i) = f(T(j),x(i));
     end
end
error1 = abs(u-v);
%draw
vecx = 0:dx:1;
vect = 0:dt:t;
[xx,tt] = meshgrid(vecx,vect);
figure(1)
surf(xx,tt,error1)
title('error')
%% 二阶近似
m = 40; dt=0.0003;t = 0.06;a=1;dx = 1/m;n = t/dt;
u = zeros(n+1,m+1);
v = zeros(n+1,m+1);% 真解
x = zeros(1,m+1);
%一阶近似 u(0,t)=u(dx,t),u(x,0)=cos(pi*x/(2*180))
for i = 1:m
    x(i) = (i-1)*dx;
    u(1,i) = cos(pi*x(i)/2);
end
for j = 1:n
     for i = 2:m%u(1,t)=0导致的
         u(j+1,i) = u(j,i) + a*(dt/dx^2)*(u(j,i+1)-2*u(j,i)+u(j,i-1));
     end
     u(j+1,1) = u(j,1)+a*(dt/dx^2)*(u(j,2)-u(j,1));%二阶近似
end
%真解
f = @(x,t)(exp(-4*((pi)^2)*(a^2)*t)*sin(2*pi*x));
n = t/dt;
T = zeros(1,n+1);
for j = 1:n+1
    T(j) = (j-1)*dt;
end
for j = 1:n+1
     for i = 1:m+1
         v(j,i) = f(T(j),x(i));
     end
end
error2 = abs(u-v);
%draw
vecx = 0:dx:1;
vect = 0:dt:t;
[xx,tt] = meshgrid(vecx,vect);
figure(2)
surf(xx,tt,error2)
title('error')
%% difference
figure(3)
surf(xx,tt,error2-error1)
title('error')

%%1.4
%% 
m = 10; dt=0.05;t = 0.9;a=1;dx = 1/m;n = t/dt;
u = zeros(n+1,m+1);
u(1,:) = 0;%f=0
u(:,m+1) = 0;%u(0,t)=0
T = 0:dt:t;
at = sin(4*pi*T);
u(:,1) = at;
for j = 1:n
     for i = 2:m%u(1,t)=0导致的
         u(j+1,i) = u(j,i) + a*(dt/dx^2)*(u(j,i+1)-2*u(j,i)+u(j,i-1));
     end
end
%draw
vecx = 0:dx:1;
vect = 0:dt:t;
[xx,tt] = meshgrid(vecx,vect);
figure(1)
surf(xx,tt,u)
title('re')
xlabel('space') 
ylabel('time') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值