2301_81054153 2024-04-27 21:47 采纳率: 50%
浏览 93

matlab错误使用surf数据维度不一致


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数据维度不一致

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-27 21:47
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,surf(X, T, U)surf(X, T, wucha(2:end-1, 2:end-1)) 函数调用出现了问题,因为它们期望输入的数据是三维数组,但您提供的 Uwucha(2:end-1, 2:end-1) 是二维数组。

    为了解决这个问题,我们需要将二维数组转换为三维数组。这可以通过添加一个额外的维度来实现,这里我们可以使用 permute 函数来完成这个任务。以下是修改后的代码片段:

    % 绘制数值解结果
    U_3d = permute(U,[2,1,3]); % 将 U 转换为三维数组
    figure;
    surf(X,T,U_3d);
    xlabel('x');
    ylabel('t');
    zlabel('u(x,t)');
    title('数值解');
    
    % 绘制误差平方分布
    wucha_3d = permute(wucha,[2,1,3]); % 将 wucha 转换为三维数组
    figure;
    surf(X, T, wucha_3d);
    xlabel('x');
    ylabel('t');
    zlabel('Error^2');
    title('误差平方分布');
    

    通过这样处理,surf 函数就能正确地接受 U_3dwucha_3d 这两个三维数组了。现在,您的代码应该可以正常运行,并且不会出现 "错误使用surf数据维度不一致" 的错误。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月27日