clc; % 清除命令窗口的内容
clear; % 清除工作空间的所有变量
close all; % 关闭所有的Figure窗口
M =7;
N =100;
h = 1/M; % 空间步长
tau = 1/N; % 时间步长
%构造空间和时间网格
x = linspace(0,1,M+1);
t = linspace(0,1,N+1);
% 初始化
u = zeros(M+1,N+1);
% 精确解表达式
uexa= zeros(M+1, N+1);
for j = 1:M+1
for n = 1:N+1
uexa(j,n) = exp(x(j)) .* sin(0.5 - t(n));
end
end
% 初始条件和边界条件
u(:,1) = exp(x(:)) .* sin(0.5); % 初始条件
u(1,:) = sin(0.5 - t); % 左边界条件
u(end,:) = exp(1) .* sin(0.5 - t); % 右边界条件
% 时间迭代
for n = 1:N
for j = 2:M-1 % 内部节点
u(j,n+1) = u(j,n) + tau/h^2 * (u(j-1,n) - 2*u(j,n) + u(j+1,n));
end
end
% 计算误差
error = u - uexa;
% 绘制数值解结果
X = x(2:end-1); % 去掉边界点
T = t(2:end-1);
U = u(2:end-1,2:end-1);
figure;
surf(X,T,U);
xlabel('x');
ylabel('t');
zlabel('u(x,t)');
title('数值解');
% 绘制误差平方分布
wucha = error.^2;
figure;
surf(X, T, wucha(2:end-1, 2:end-1));
xlabel('x');
ylabel('t');
zlabel('Error^2');
title('误差平方分布');
% 显示误差平方
disp('误差平方:');
disp(wucha(2:end-1, 2:end-1));
一直显示错误使用surf数据维度不一致