Index exceeds the number of array elements (11).
2 views (last 30 days)
Show older comments
Serik Sanbayev
on 12 Dec 2020
Answered: Image Analyst
on 12 Dec 2020
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.
0 Comments
Accepted Answer
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);
0 Comments
More Answers (0)
See Also
Categories
Find more on Numerical Integration and Differential Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!