Index exceeds the number of array elements (11).

2 views (last 30 days)
clc %Вар8
clear all
close all
a1=1.4; %Альфа
hx=0.1; %Шаг по пространству
x=0:hx:1; %Сетка (пространство)
M=length(x); %Кол-во элементов
tau=hx^2/2/a1; %Условие устойчивости для явной схемы
ht=1/ceil(1/tau); %Шаг по времени (если взять тау для ht, оно может не уложится в 0,5, след. интервал будет меньше (сетка должна быть равномерной), ceil - округляет до целого в большую сторону) (строка - для того, чтобы сделать равномерную сетку по t)
t=0:ht:1; %Сетка (время)
N=length(t);
u=zeros(N,M); %Обнулить пространство в оп. памяти, котороая будет отвдится для u (N - номер временного слоя, M - номер х)
u(1,:)=(2-x).*sin(pi*x); %Начальное условие (t=0) (Индексы начинаются только с 1) (. - *,/,^ (не надо при умножении числа)) (: - все столбцы первой строки) (((1=0(индекс))))
u(:,1)=0.5*t; %Граничное условие (на левой границе)
u(:,M)=3*t;% Граничное условие (на правой границе) (M-последний элемент)
for n=1:N-1
for m=2:M-1
u(n+1,m)=a1*ht/hx^2*(u(n,m+1)-2*u(n,m)+u(n,m-1))+...
ht*3.*sin(x(n)+1)*exp(t(m))+u(n,m);%n=1 -> m=2 -> u(2,2) -> m=3 -> u(2,3) -> ... u(2,10), потом n
end
end
figure(1)
hsl=10; %Фиксированный временной слой (каждые 10)
grid on
hold on
for n=1:hsl:N
plot(x,u(n,:)) %Вывод строки матрицы
axis([0 1 min(min(u))-0.1 max(max(u))+0.1]) %Аргумент х(0,1) при мин. знач. u и макс. знач u (и даем немного места путем 0.1) (?)
pause(0.05)
end
Thank you all.

Accepted Answer

Image Analyst
Image Analyst on 12 Dec 2020
I think you got confused because of bad choices for variable names for rows and columns. You're plotting x with rows index instead of columns. I've clarified it with better variable names, and corrected the index of x and made several other improvements. It now works:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 22;
fprintf('Beginning to run %s.m ...\n', mfilename);
a1=1.4; %Альфа
hx=0.1; %Шаг по пространству
x=0:hx:1; %Сетка (пространство)
columns = length(x); %Кол-во элементов
tau=hx^2/2/a1; %Условие устойчивости для явной схемы
ht=1/ceil(1/tau); %Шаг по времени (если взять тау для ht, оно может не уложится в 0,5, след. интервал будет меньше (сетка должна быть равномерной), ceil - округляет до целого в большую сторону) (строка - для того, чтобы сделать равномерную сетку по t)
t=0:ht:1; %Сетка (время)
rows = length(t);
u=zeros(rows, columns); %Обнулить пространство в оп. памяти, котороая будет отвдится для u (N - номер временного слоя, M - номер х)
u(1,:)=(2-x).*sin(pi*x); %Начальное условие (t=0) (Индексы начинаются только с 1) (. - *,/,^ (не надо при умножении числа)) (: - все столбцы первой строки) (((1=0(индекс))))
u(:,1)=0.5*t; %Граничное условие (на левой границе)
u(:,columns)=3*t;% Граничное условие (на правой границе) (M-последний элемент)
for row = 1 : rows-1
for col = 2 : columns-1
u(row+1,col) = a1*ht/hx^2*(u(row,col+1) - 2*u(row,col)+u(row,col-1)) +...
ht*3.*sin(x(col)+1)*exp(t(col))+u(row,col); %n=1 -> m=2 -> u(2,2) -> m=3 -> u(2,3) -> ... u(2,10), потом n
end
end
figure(1)
hsl=10; %Фиксированный временной слой (каждые 10)
grid on
hold on
legendStrings = cell(1, 1);
lIndex = 1;
for row=1:hsl:rows
fprintf('Plotting row #%d on iteration %d.\n', row, lIndex);
plot(x,u(row,:), '-', 'LineWidth', 2) %Вывод строки матрицы
axis([0 1 min(min(u))-0.1 max(max(u))+0.1]) %Аргумент х(0,1) при мин. знач. u и макс. знач u (и даем немного места путем 0.1) (?)
% Create legend.
legendStrings{lIndex} = sprintf('Row %d', row);
lIndex = lIndex + 1;
end
caption = sprintf('Plot of %d curves', lIndex-1);
title(caption, 'FontSize', fontSize);
xlabel('X', 'FontSize', fontSize);
ylabel('U', 'FontSize', fontSize);
legend(legendStrings, 'Location', 'northwest');
% Maximize figure window.
g = gcf;
g.WindowState = 'maximized';
fprintf('Done running %s.m ...\n', mfilename);

More Answers (0)

Categories

Find more on Numerical Integration and Differential Equations in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!