查看: 195|回复: 7|关注: 0

[已解决] 我在用matlab编二维非稳态热传导时,出现“索引超出矩阵维度”,有没有大神帮忙给看一下,蟹蟹啦

[复制链接]

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
我在用matlab编二维非稳态热传导时,出现“索引超出矩阵维度”,有没有大神帮忙给看一下,蟹蟹啦

捕获.JPG

入门

154 麦片

财富积分


50500


2

主题

51

帖子

3

最佳答案
  • 关注者: 1
发表于 2019-10-4 17:18:40 | 显示全部楼层
能否发程序出来,可能是你29行变量T所在的for循环的问题,T的维度可能没有M维

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-10-4 17:20:40 | 显示全部楼层
tongyee 发表于 2019-10-4 17:18
能否发程序出来,可能是你29行变量T所在的for循环的问题,T的维度可能没有M维 ...

好的,
clear;clc;close all;
lambda = 150; % thermal conductivity
alfa1 = 100; % heat transfer coefficient
alfa2 = 500; % heat transfer coefficient
density = 2700;% density
cp = 880;% heat capacity
L_x= 1; % length x-direction
L_y= 0.2; % length y -direction
Tfluid1 = 25; % air temperature
Tfluid2 = 95; % Fluid temperature
Tinit = 25;% Initial tempearature
%M = input('Number of grids in x-direction = ')
%N = input('Number of grids in y-direction = ')
M=100;N=20;timeMax=60;
ni = M+1; % grid points x-direction
nj = N+1; % grid points y-direction
dx = L_x/M;
dy = L_y/N;
dt = 1;
t = 1:timeMax;
for i = 1:M+1
  for j = 1:N+1
    T(i,j) = Tinit;  %Initial temperature
f=lambda*dt/(density*cp*(dx)^2);
for i=2:M
  for j=2:N
    T(i,j,t+1)=T(i,j,t)+f*T(i-1,j,t)+f*T(i+1,j,t)+f*T(i,j-1,t)+f*T(i,j+1,t)-4*f*T(i,j,t);
  end;
end;
for i=2:M
  for j=1
    T(i,j,t+1)=T(i,j,t)+2*f*T(i,j+1,t)+f*T(i-1,j,t)+f*T(i+1,j,t)-4*f*T(i,j,t);
  end;
end;
for i=M+1
  for j=2:N
    T(i,j,t+1)=T(i,j,t)+2*f*T(i-1,j,t)+f*T(i,j-1,t)+f*T(i,j+1,t)-4*f*T(i,j,t);
  end;
end;
for i=82:M
  for j=N+1
    T(i,j,t+1)=T(i,j,t)+f*T(i-1,j,t)+f*T(i+1,j,t)+2*f*T(i,j-1,t)-4*f*T(i,j,t)+2*alfa2*dt*(Tfluid2-T(i,j,t))/(density*cp*(dx));
  end;
end;
for i=2:80
  for j=N+1
    T(i,j,t+1)=T(i,j,t)+f*T(i-1,j,t)+f*T(i+1,j,t)+2*f*T(i,j-1,t)-4*f*T(i,j,t);
  end;
end;
for i=1
  for j=2:N
    T(i,j,t+1)=T(i,j,t)+2*f*T(i+1,j,t)+f*T(i,j-1,t)+f*T(i,j+1,t)-4*f*T(i,j,t)+2*alfa1*dt*(Tfluid1-T(i,j,t))/(density*cp*(dx));
  end;
end;
for i=1
  for j=N+1
    T(i,j,t+1)=T(i,j,t)+2*f*T(i+1,j,t)+2*f*T(i,j-1,t)-4*f*T(i,j,t)+2*alfa1*dt*(Tfluid1-T(i,j,t))/(density*cp*(dx));
  end;
end;
for i=1
  for j=1
    T(i,j,t+1)=T(i,j,t)+2*f*T(i+1,j,t)+2*f*T(i,j+1,t)-4*f*T(i,j,t)+2*alfa1*dt*(Tfluid1-T(i,j,t))/(density*cp*(dx));
  end;
end;
for i=M+1
  for j=1
    T(i,j,t+1)=T(i,j,t)+2*f*T(i-1,j,t)+2*f*T(i,j+1,t)-4*f*T(i,j,t);
  end;
end;
for i=M+1
  for j=N+1
    T(i,j,t+1)=T(i,j,t)+2*f*T(i-1,j,t)+2*f*T(i,j-1,t)-4*f*T(i,j,t)+2*alfa2*dt*(Tfluid2-T(i,j,t))/(density*cp*(dx));
  end;
end;
for i=81
  for j=N+1
    T(i,j,t+1)=T(i,j,t)+f*T(i+1,j,t)+2*f*T(i,j-1,t)+f*T(i-1,t)-4*f*T(i,j,t)+alfa2*dt*(Tfluid2-T(i,j,t))/(density*cp*(dx));
  end;
end;
end;

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-10-4 17:26:20 | 显示全部楼层
tongyee 发表于 2019-10-4 17:18
能否发程序出来,可能是你29行变量T所在的for循环的问题,T的维度可能没有M维 ...

我自己写的,也不知道对不对

入门

154 麦片

财富积分


50500


2

主题

51

帖子

3

最佳答案
  • 关注者: 1
发表于 2019-10-4 17:36:55 | 显示全部楼层 |此回复为最佳答案
liujuan123 发表于 2019-10-4 17:20
好的,
clear;clc;close all;
lambda = 150; % thermal conductivity

你的T是一个1×21的变量,在你29行的for循环中i是从2到M(也就是100),超出了变量T的索引维度

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-10-4 17:46:38 | 显示全部楼层
tongyee 发表于 2019-10-4 17:36
你的T是一个1×21的变量,在你29行的for循环中i是从2到M(也就是100),超出了变量T的索引维度 ...

我想表示的是内节点(i,j)的坐标(1<i<101,1<j<21),那这种情况下我该如何表示

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-10-4 18:47:07 | 显示全部楼层
liujuan123 发表于 2019-10-4 17:46
我想表示的是内节点(i,j)的坐标(1

您能帮我纠正一下维度的调整吗?万分感谢

入门

154 麦片

财富积分


50500


2

主题

51

帖子

3

最佳答案
  • 关注者: 1
发表于 2019-10-5 14:32:01 | 显示全部楼层
liujuan123 发表于 2019-10-4 18:47
您能帮我纠正一下维度的调整吗?万分感谢

你仿真的这个很具体的内容我不是很了解,抱歉哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表