Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/88: Рейтинг темы: голосов - 88, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 02.01.2018
Сообщений: 9
1

Ошибка - Index exceeds the number of array elements (1)

01.12.2019, 02:23. Показов 17532. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
clear all;
close all;
clc;
%-----------------------------------------------
%---ПРОГРАММА ПОСТРОЕНИЯ ТРАЕКТОРИИ СПУСКА ЛА---
%-----------------------------------------------
%_______Исходная информация
Rz=6371000; %радиус земли 
alf=0;
Ro0=1.225; % текущая плотность атмосферы
g=9.8;% сила гравитации
V0=7800; %скорость начальная 
Teta0=-3*pi/180;% угол наклона векотра скорости к плоскости местного горизонта
fi0=0; % угловая дальность
L0=0; % текущая дальность 
% Ftau=0; %текущие аэрдинамические силы по орте TAU
sigm=0.0006;  %баллистический параметр  
H0=120000; %высота ЛА над семной поверхностью 
%_______Построение Земной поверхности
K=1.5;
x0 = 0;
y0 = 0;
x=[];
y=[];
 for i=0:360
     x=[x x0+Rz*cos(i/180*pi)];
     y=[y y0+Rz*sin(i/180*pi)];
 end
%____________Шаг
h=1;
%______________Аэрдинамическое качество 
K=0.25;
%_______ОДУ  (система уравнений)
dV=@(H,V,Teta)           -0.5*sigm*Ro0*exp(-0.0001*H)*V^2-g*sin(Teta);
dTeta=@(H,V,Teta)        0.5*K*sigm*Ro0*exp(-0.0001*H)*V-g*cos(Teta)/V+V*cos(Teta)/(Rz+H);
dH=@(V,Teta)             V*sin(Teta);
dfi=@(H,V,Teta)          V*cos(Teta)/(Rz+H);
dL=@(fi)                 fi*Rz;
dX=@(H,V,fi)             (H+Rz)*V*sin(fi);
dY=@(H,V,fi)             (H+Rz)*V*cos(fi);
%)___________Реализуем меод рунге-кутта, для решения системы оду
V(1)=V0; Teta(1)=Teta0; H(1)=H0; L(1)=L0; fi(1)=fi0; t(1)=0;
X(1)=0; Y(1)=Rz+H0; i=1;
 
while H(i+1)>=0
i=i+1;
% t(i+1)=t(i)+h;
%Первый коэф.
K11=dV(H(i),V(i),Teta(i));
K12=dTeta(H(i),V(i),Teta(i));
K13=dH(V(i),Teta(i));
K14=dfi(H(i),V(i),Teta(i));
K15=dL(fi(i));
K16=dX(H(i),V(i),fi(i));
K17=dY(H(i),V(i),fi(i));
%второй коэф.
K21=dV(H(i)+h*K13/2,V(i)+h*K11/2,Teta(i)+h*K12/2);
K22=dTeta(H(i)+h*K13/2,V(i)+h*K11/2,Teta(i)+h*K12/2);
K23=dH(V(i)+h*K11/2,Teta(i)+h*K12/2);
K24=dfi(H(i)+h*K13/2,V(i)+h*K11/2,Teta(i)+h*K12/2);
K25=dL(fi((i)+h*K14/2));
K26=dX(H(i)+h*K13/2,V(i)+h*K11/2,fi(i)+h*K14/2);
K27=dY(H(i)+h*K13/2,V(i)+h*K11/2,fi(i)+h*K14/2);
%Третий  коэф.
K31=dV(H(i)+h*K23/2,V(i)+h*K21/2,Teta(i)+h*K22/2);
K32=dTeta(H(i)+h*K23/2,V(i)+h*K21/2,Teta(i)+h*K22/2);
K33=dH(V(i)+h*K21/2,Teta(i)+h*K22/2);
K34=dfi(H(i)+h*K23/2,V(i)+h*K21/2,Teta(i)+h*K22/2);
K35=dL(fi((i)+h*K24/2));
K36=dX(H(i)+h*K23/2,V(i)+h*K21/2,fi(i)+h*K24/2);
K37=dY(H(i)+h*K23/2,V(i)+h*K21/2,fi(i)+h*K24/2);
%Четвертый коэф.
K41=dV(H(i)+h*K33/2,V(i)+h*K31/2,Teta(i)+h*K32/2);
K42=dTeta(H(i)+h*K33/2,V(i)+h*K31/2,Teta(i)+h*K32/2);
K43=dH(V(i)+h*K31/2,Teta(i)+h*K32/2);
K44=dfi(H(i)+h*K33/2,V(i)+h*K31/2,Teta(i)+h*K32/2);
K45=dL(fi((i)+h*K34/2));
K46=dX(H(i)+h*K33/2,V(i)+h*K31/2,fi(i)+h*K34/2);
K47=dY(H(i)+h*K33/2,V(i)+h*K31/2,fi(i)+h*K34/2);
%Итерация
V(i+1)=V(i)+(K11+2*K21+2*K31+K41)*h/6;
Teta(i)=Teta(i)+(K12+2*K22+2*K32+K42)*h/6;
H(i+1)=H(i)+(K13+2*K23+2*K33+K43)*h/6;
fi(i+1)=fi(i)+(K14+2*K24+2*K34+K44)*h/6;
L(i+1)=L(i)+(K15+2*K25+2*K35+K45)*h/6;
X(i+1)=X(i)+(K16+2*K26+2*K36+K46)*h/6;
Y(i+1)=Y(i)+(K17+2*K27+2*K37+K47)*h/6;
end
 
 %___1)График траектории движения спускаемого аппарата
fig1=figure('NumberTitle','off','Name','Траектория движения спускаемого аппарата');
plot(X,Y,'--'); hold on;
plot(x,y); grid on; hold on; 
axis(gca,'equal')
legend('K=0.5','Поверхность Земли','Location','southwest');
title('Траектория движения спускаемого аппарата')
xlabel('L');
ylabel('H','rotation',0);



считаю методом рунге-кутты, выдает такую ошибку :
Index exceeds the number of array elements (1).

Error in SLA1 (line 45)
while H(i+1)>=0
перевод фразы я знаю, но как вот это решить я сам пока еще не понял, сижу уже часа два и пока не исправил это.
возможно я неправильно указываю окончание расчета или что-то подобное.
Если изменить на другие условия, к примеру:
H(end)>=0
то будет писать такое:
Index exceeds the number of array elements (1).

Error in SLA1 (line 49)
K11=dV(H(i),V(i),Teta(i));

может кто пояснит в чем моя ошибка и что не так возможно делаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2019, 02:23
Ответы с готовыми решениями:

Интеграл методом трапеций; ошибка: Index exceeds array bounds
n = 160; a1 = 1; b1 = 2; h = (b1-a1) / n; x=a1:h:b1; y=((((x.^2)-0.16).^(1/2))/x); F =...

Функции (find out the array in which total number of positive elements is bigger)
You given two one-dimention arrays with N numbers inside. You task is to find out the array in...

Ошибка In an assignment A(:) = B, the number of elements in A and B must be the same
На картинке кусок скрин куска программы, вычисляется вероятности pm на некоторых интервалах. Не...

Ошибка number of elements differs from declaration
Ошибка number of elements differs from declaration полностью на эту часть. Понимаю что чт-то с...

5
Модератор
1741 / 1587 / 532
Регистрация: 13.09.2015
Сообщений: 5,512
01.12.2019, 05:22 2
Цитата Сообщение от 444женя5555 Посмотреть сообщение
считаю методом рунге-кутты
А встроенные решатели не подойдут?
0
0 / 0 / 0
Регистрация: 02.01.2018
Сообщений: 9
01.12.2019, 10:25  [ТС] 3
Не вариант, мне надо его вручную метод написать
0
Модератор
1741 / 1587 / 532
Регистрация: 13.09.2015
Сообщений: 5,512
01.12.2019, 10:41 4
444женя5555, не очень ясно, какие дифференциальные уравнения вы решаете. В смысле, как они выглядят.
0
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
01.12.2019, 14:00 5
Цитата Сообщение от 444женя5555 Посмотреть сообщение
while H(i+1)>=0
Оно еще не существует, только H(1) есть, а Вы хотите H(2) сравнять с нулем.
Плохая идея каждый раз в массив долавлять элементы
Matlab M
1
2
3
4
5
6
7
8
% for i=0:360
%     x=[x x0+Rz*cos(i/180*pi)];
%     y=[y y0+Rz*sin(i/180*pi)];
% end
% используйте
t = linspace(0,2*pi,360);
x = x0+Rz*cos(t);
y = x0+Rz*sin(t);
Смотрите код, сделал несколько упрощений (только для Вас)
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
clear all;
close all;
clc;
%-----------------------------------------------
%---ПРОГРАММА ПОСТРОЕНИЯ ТРАЕКТОРИИ СПУСКА ЛА---
%-----------------------------------------------
%_______Исходная информация
Rz=6371000; %радиус земли 
alf=0;
Ro0=1.225; % текущая плотность атмосферы
g=9.8;% сила гравитации
V0=7800; %скорость начальная 
Teta0=-3*pi/180;% угол наклона векотра скорости к плоскости местного горизонта
fi0=0; % угловая дальность
L0=0; % текущая дальность 
% Ftau=0; %текущие аэрдинамические силы по орте TAU
sigm=0.0006;  %баллистический параметр  
H0=120000; %высота ЛА над семной поверхностью 
%_______Построение Земной поверхности
K=1.5;
x0 = 0;
y0 = 0;
t = linspace(0,2*pi,360);
x = x0+Rz*cos(t);
y = x0+Rz*sin(t);
 
% for i=0:360
%     x=[x x0+Rz*cos(i/180*pi)];
%     y=[y y0+Rz*sin(i/180*pi)];
% end
%____________Шаг
h=1;
%______________Аэрдинамическое качество 
K=0.25;
%_______ОДУ  (система уравнений)
df = @(H,V,Teta,fi) [ ...
                -0.5*sigm*Ro0*exp(-0.0001*H)*V^2-g*sin(Teta);                      % dV
                0.5*K*sigm*Ro0*exp(-0.0001*H)*V-g*cos(Teta)/V+V*cos(Teta)/(Rz+H);  % dTheta
                V*sin(Teta);                                                       % dH    
                V*cos(Teta)/(Rz+H);                                                % dfi
                fi*Rz;                                                             % dL
                (H+Rz)*V*sin(fi);                                                  % dX
                (H+Rz)*V*cos(fi)];                                                  % dY
%)___________Реализуем меод рунге-кутта, для решения системы оду
[V,Teta,H,L,fi,X,Y] = deal( nan(500,1) );
V(1)=V0; Teta(1)=Teta0; H(1)=H0; L(1)=L0; fi(1)=fi0; t(1)=0;
X(1)=0; Y(1)=Rz+H0; i=1;
 
while H(i) >= 0
    % t(i+1)=t(i)+h;
    %Первый коэф.
    k1 = 1/2*h*df( H(i),V(i),Teta(i),fi(i) );
    %второй коэф.
    k2 = 1/2*h*df( H(i)+k1(3), V(i)+k1(1), Teta(i)+k1(2), fi(i)+k1(4) );
    %Третий  коэф.
    k3 = h*df( H(i)+k2(3), V(i)+k2(1), Teta(i)+k2(2), fi(i)+k2(4) );
    %Четвертый коэф.
    k4 = h*df( H(i)+k3(3), V(i)+k3(1), Teta(i)+k3(2), fi(i)+k3(4) );
    %Итерация
    du = (2*k1 + 4*k2 + 2*k3 + k4)/6;
    V(i+1) = V(i) + du(1);
    Teta(i+1) = Teta(i) + du(2);
    H(i+1) = H(i) + du(3);
    fi(i+1) = fi(i) + du(4);
    L(i+1) = L(i) + du(5);
    X(i+1) = X(i) + du(6);
    Y(i+1) = Y(i) + du(7);
    i = i + 1;
end
 
 %___1)График траектории движения спускаемого аппарата
fig1=figure('NumberTitle','off','Name','Траектория движения спускаемого аппарата');
plot(X,Y,'--'); hold on;
plot(x,y); grid on; hold on; 
axis(gca,'equal')
legend('K=0.5','Поверхность Земли','Location','southwest');
title('Траектория движения спускаемого аппарата')
xlabel('L');
ylabel('H','rotation',0);
1
0 / 0 / 0
Регистрация: 02.01.2018
Сообщений: 9
01.12.2019, 15:38  [ТС] 6
Уравнения движения обычные. Из книги брал

Добавлено через 3 минуты
Спасибо за помощь, очень помогло!!
0
01.12.2019, 15:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 15:38
Помогаю со студенческими работами здесь

Ошибка: Index exceeds matrix dimensions
% Концентрация ср препарата в теле моделируется формулой %...

Ошибка Index exceeds matrix dimensions
Здравствуйте! Разбиваю изображение по каналам RGB. Возникает такая ошибка "Index exceeds matrix...

Ошибка в программе Index exceeds matrix dimensions
Задача состоит в том, чтобы с помощью подпрограммы вычислить минимальный из элементов матрицы,...

Ошибка при обработке изображений: Index exceeds matrix dimensions
В универе для расчётнографической работы дали задание Так звучит задание: Предположим, что Вы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru