Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35

Необходимо создать цикл расчета не для одной станции, а для всех (их всего 518) находящихся в файле.

01.04.2013, 14:25. Показов 1687. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня по циклу тоже есть вопрос, простая задача, но я туплю и не могу ее решить.
Есть матлаб код, для расчета значения mmm для 1 станции - 86, необходимо создать цикл расчета mmm не для одной станции, а для всех (их всего 518) находящихся в файле.

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
load c:\data\precep.txt;
 
ff=find(precep(:,1)==86);
st86=precep(ff,;
 
mmm=[];
for ii=1:12
  st86d=st86(:,ii+2);
  frow=[];
  frow= find(st86d~=-9999); 
  st=[];
   st=st86d(frow);
 
%%%%%%%%%%%%
f0=find(st~=0);
[n0]=histc(st,[0:0.1:max(st)]);
 
prob=n0/sum(n0); 
prob1=zeros(length(st),1);
prob1(1)=prob(1);
 
 
[p,ci] = gamfit(st(f0)) 
 
g=sort(st); 
g1=gamcdf(st,p(1),p(2));
g11=[];
for i=1:length(g1)
   g11(i)=prob(1)+(1-prob(1))*g1(i); 
end
 
c0=2.515517
c1=0.802853
c2=0.010328
d1=1.432788
d2=0.189269
d3=0.001308
 
t=[];
for i=1:length(g11)
  if g11(i)<=0.5
    t(i)=sqrt(log(1/(g11(i))^2));
  else
    t(i)=sqrt(log((1/(1-g11(i))^2)));
  end
end
 
z=[];
for i=1:length(g11)
  if g11(i)<=0.5
    z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
  else
     z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
  end
end 
%%%%%%%%%%
 
mmm1=zeros(length(st86d),1)-9999; 
mmm1(frow)=z; 
mmm=[spi spi1];
 
 
end
 
mmm
То что зеленым подчеркнуто, вообще не влияет на количество станций, я понимаю, что изменить нужно начальные строк 5, но все мои изменения заканчиваются бесконечным циклом или ошибками(((((

Данные для расчета (сам файл precep.) весят 1.5 метра, не прикрепляются к сообщению. Если сможете помочь - буду безмерно благодарна!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2013, 14:25
Ответы с готовыми решениями:

Как создать разом ярлыки для всех папок и файлов, находящихся в определённой папке?
Есть папка в ней ещё много папок и под папок и разные файлы. Как разом создать ярлыки для все папок и файлов? Чтобы получить своего...

Создать запрос для расчёта средней стоимости всех заказов
Необходимо создать запрос для расчёта средней стоимости всех заказов

Создать базу данных для автобусной станции
1.Создать базу данных для автобусной станции. а) Хранить инфо о маршрутах, машинах и водителях. Поиск. б) 3 пользователя: покупатель...

19
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.04.2013, 14:33
Лапа, без файла врядли что-то выйдет! Упакуй в архив и выложи!
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
01.04.2013, 17:00  [ТС]
Спасибо! Вот он.

В коде число 86 (встречающееся в строках 3,8,10,12 и 58-ой) - это станция 20046, первая в прикрепленном файле.
Вложения
Тип файла: rar precep.rar (409.8 Кб, 4 просмотров)
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
01.04.2013, 17:07
в начале добавляется for i=1:518, 86 заменяется на i, в конце добавляется end. Попробуйте так... Только все 518 результатов сразу на экран посыпятся - найдите способ их разобрать...
Кликните здесь для просмотра всего текста
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
for i=1:518
load c:\data\precep.txt;
display('for station number');
i 
ff=find(precep(:,1)==i);
st86=precep(ff,;
 
mmm=[];
for ii=1:12
  st86d=st86(:,ii+2);
  frow=[];
  frow= find(st86d~=-9999); 
  st=[];
   st=st86d(frow);
 
%%%%%%%%%%%%
f0=find(st~=0);
[n0]=histc(st,[0:0.1:max(st)]);
 
prob=n0/sum(n0); 
prob1=zeros(length(st),1);
prob1(1)=prob(1);
 
 
[p,ci] = gamfit(st(f0)) 
 
g=sort(st); 
g1=gamcdf(st,p(1),p(2));
g11=[];
for i=1:length(g1)
   g11(i)=prob(1)+(1-prob(1))*g1(i); 
end
 
c0=2.515517
c1=0.802853
c2=0.010328
d1=1.432788
d2=0.189269
d3=0.001308
 
t=[];
for i=1:length(g11)
  if g11(i)<=0.5
    t(i)=sqrt(log(1/(g11(i))^2));
  else
    t(i)=sqrt(log((1/(1-g11(i))^2)));
  end
end
 
z=[];
for i=1:length(g11)
  if g11(i)<=0.5
    z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
  else
     z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
  end
end 
%%%%%%%%%%
 
mmm1=zeros(length(st86d),1)-9999; 
mmm1(frow)=z; 
mmm=[spi spi1];
 
 
end
 
mmm
end


Добавлено через 1 минуту
а, файлик появился... Надо посмотреть....
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
01.04.2013, 17:26  [ТС]
Мысль аналогичная была, но как-то она не привела к должному результату. Пока выдает ошибку. Может я где забыла заменить индекс. Спасибо в любом случае за ответ!
1
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
01.04.2013, 17:47
а какие именно ошибки. Я вот, например, в строчке st86=precep(ff,; явно вижу ошибку - на нее должно ругаться, если в запускаемом коде написано так же
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
02.04.2013, 01:24  [ТС]
это я вижу...я подумала, что модератор убрал эту скобку, ибо сочетание двоеточие и скобка - на форуме показывается как смайлик)

Добавлено через 1 час 15 минут
Тааккк-с....

смотрите, рассмотрим основной кусок, который нам и нужно поменять...Я вместо i взяла ij, так как индекс i встречается ниже в другом куске кода...
Так вот...

Matlab M
1
2
3
4
5
6
7
8
9
10
11
for ij=1:518 % может проблема в этом? ибо, в файле precep. 
% нам нужно, чтобы прога перебрала все значения для каждой станции... 
% Т.е.,конечно логично, что станций 518, но в файле у них же не нумерация 1, 2, 3, и т.д....
% а 20046, 20069, 20087 ....или это не принципиально?
 
ff=find(precep(:,1)==ij); %тут должны находится все значения принадлежащие 1ой станции, 
% потом второй, потом третье и т.ж.....
 
st20046=precep(ff,:); %приписывается параметру st20046 все значения осадков за 12 месяцев 
% имеющиеся в файле precep. и принадлежащие опять же сначала первой станции,  
% потом второй....и т.д. Т.о. я так понимаю, ее тоже нужно зациклить, включить в общий цикл...
остальное в принципе нам менять особо не нужно...

но если просто заменить как вы предложили значения номера станции индексом ij выдается ошибка

Attempted to access prob(1); index out of bounds because numel(prob)=0.
...по-моему истина где то рядом)
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
02.04.2013, 04:24
ну да, раз нумерация 20046, 20069, 20087... , то надо эти значения внести в некий массив, например, nums_st=[ 20046, 20069, 20087 ...] и
for ij=1:518
ff=find(precep(:,1)==nums_st(ij))
...

Добавлено через 12 минут
к сожалению, не могу посмотреть вложенный файл (мой архиватор под линуксом не справился), как выглядит в нем первый столбец?
В нем есть числа и 86 и 20046, 20069, 20087? Если так, то можно сделать следующее, чтобы не набивать руками массив:
Matlab M
1
2
3
nums_st=precep(:,1);
for ij=1:length(nums_st)
  ff=find(precep(:,1)==nums_st(ij))
И тут стр 4 можно просто убрать, т.к. мы перебираем по-порядку и получим
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nums_st=precep(:,1); % прочитали номера станций в массив
for ij=1:length(nums_st) % перебираем по всем номерам станций
  %ff=find(precep(:,1)==nums_st(ij))
   st86=precep(ij,:); % прочитали данные для станции номер из ij строки первого столбца
   disp('номер станции:');
   st86(ij,1)
   mmm=[];
   for ii=1:12
    st86d=st86(:,ii+2);
    frow=[];
    frow= find(st86d~=-9999); 
    st=[];
    st=st86d(frow);
    ...
Добавлено через 2 минуты
там дальше еще идет какой-то поиск (ищется станция, для которой некий параметр -9999), поэтому могут всплыть подводные камни )))
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
02.04.2013, 22:51  [ТС]
Разбираюсь с вашим предложением. У нас уже есть файл с номерами станций и их координатами - это stations.txt.
Пробую перекрепить файл precep.


-9999 это значения дырок в станциях, поэтому ищутся все значения не равные -9999 и по ним считается индекс mmm
Вложения
Тип файла: zip dataprecep.zip (530.9 Кб, 2 просмотров)
Тип файла: txt stations.txt (10.8 Кб, 2 просмотров)
0
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
03.04.2013, 01:33  [ТС]
C учетом ваших корректировок, код принимает вид:
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
load c:\data\precep.txt;
 load c:\data\stations.txt;
 
st1=stations(:,1); % станции из файла stions.txt - массив
for ij=1:length(st1) % перебор количества станций, из файла stations -518
ff=find(precep(:,1)==st1(ij));%находит значения осадков из dataprecep для станций из stions
s=precep(ij,:);% прочитали данные для станции номер из ij строки первого столбца
 
  
  
 
  mmm=[];
 
for ii=1:12
st20046d=s(:,ii+2);
frow=[];
frow= find(st20046d~=-9999); 
st=[];
st=st20046d(frow); 
 
[n0]=histc(st,[0:0.1:max(st)]);
 
prob=n0/sum(n0); 
prob1=zeros(length(st),1);
prob1(1)=prob(1);  
 
%[phat, pci] = gamfit(st); 
%Note phat(1) = ? and phat(2) = b. The MLE for parameter a is 10.98, 
%compared to the true value of 10. The 95
% confidence interval for a goes from 7.4 to 14.6, which includes the true value
f0=find(st~=0);
[p,ci] = gamfit(st(f0)) 
 
 g=sort(st); 
 g1=gamcdf(st,p(1),p(2));
g11=[];
for i=1:length(g1)
g11(i)=prob(1)+(1-prob(1))*g1(i); 
 
 
c0=2.515517
c1=0.802853
c2=0.010328
d1=1.432788
d2=0.189269
d3=0.001308
 
t=[];
for i=1:length(g11)
if g11(i)<=0.5
t(i)=sqrt(log(1/(g11(i))^2));
else
t(i)=sqrt(log((1/(1-g11(i))^2)));
end
end
 
 
z=[];
for i=1:length(g11)
if g11(i)<=0.5
z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
else
z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
end
end 
 
mmm1=zeros(length(st20046d),1)-9999; 
mmm1(frow)=z;  
mmm=[mmm mmm1];
 
 
end
end
end
 
 mmm
Ошибка с prob(1) и index out of bounds because numel(prob)=0.

А так в целом, мне все нравится, (кроме строк 19-20) хорошо могло бы получится, если бы не было ошибки
0
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
04.04.2013, 16:44  [ТС]
Цитата Сообщение от Зосима Посмотреть сообщение
Лапа, без файла врядли что-то выйдет! Упакуй в архив и выложи!

В общем, как то глухо с этой задачей...
Зосима, вы не поможете, если у вас есть время...?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
04.04.2013, 19:02
Заяц, не только с этой еще две штуки висят, ждут меня, но всё некогда
1
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
04.04.2013, 20:06
Цитата Сообщение от kreozotica Посмотреть сообщение
C учетом ваших корректировок, код принимает вид:
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
load c:\data\precep.txt;
 load c:\data\stations.txt;
 
st1=stations(:,1); % станции из файла stions.txt - массив
for ij=1:length(st1) % перебор количества станций, из файла stations -518
ff=find(precep(:,1)==st1(ij));%находит значения осадков из dataprecep для станций из stions
s=precep(ij,:);% прочитали данные для станции номер из ij строки первого столбца
 
  
  
 
  mmm=[];
 
for ii=1:12
st20046d=s(:,ii+2);
frow=[];
frow= find(st20046d~=-9999); 
st=[];
st=st20046d(frow); 
 
[n0]=histc(st,[0:0.1:max(st)]);
 
prob=n0/sum(n0); 
prob1=zeros(length(st),1);
prob1(1)=prob(1);  
 
%[phat, pci] = gamfit(st); 
%Note phat(1) = ? and phat(2) = b. The MLE for parameter a is 10.98, 
%compared to the true value of 10. The 95
% confidence interval for a goes from 7.4 to 14.6, which includes the true value
f0=find(st~=0);
[p,ci] = gamfit(st(f0)) 
 
 g=sort(st); 
 g1=gamcdf(st,p(1),p(2));
g11=[];
for i=1:length(g1)
g11(i)=prob(1)+(1-prob(1))*g1(i); 
 
 
c0=2.515517
c1=0.802853
c2=0.010328
d1=1.432788
d2=0.189269
d3=0.001308
 
t=[];
for i=1:length(g11)
if g11(i)<=0.5
t(i)=sqrt(log(1/(g11(i))^2));
else
t(i)=sqrt(log((1/(1-g11(i))^2)));
end
end
 
 
z=[];
for i=1:length(g11)
if g11(i)<=0.5
z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
else
z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
end
end 
 
mmm1=zeros(length(st20046d),1)-9999; 
mmm1(frow)=z;  
mmm=[mmm mmm1];
 
 
end
end
end
 
 mmm
Ошибка с prob(1) и index out of bounds because numel(prob)=0.

А так в целом, мне все нравится, (кроме строк 19-20) хорошо могло бы получится, если бы не было ошибки
эта ошибка вылезает и в исходнике, когда речь шла об 1 станции. Программа не рабочая была...

Добавлено через 6 минут
эта ошибка из-за того, что в первом столбце нет числа 86. Массив пустой. Проверки на такую ошибку нет и она не обрабатывается. Приведите текст задания. Что ищется в каком столбце и как надо реагировать на события:
а) нашли;
б) не нашли.

Добавлено через 1 минуту
86 - это д.б. номер станции или год (года там во втором столбце)?

Добавлено через 7 минут
и еще есть неопределенные переменные spi и spi1. Текст программы приведен не полностью. Придется Вам привести его в порядок, если хотите руку помощи...
Если речь действительно идет о годах, то в массив надо перечислить года и перебирать по ним. В исходнике 86 замените на 1986, а номер столбца с 1 на 2.
2
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
05.04.2013, 17:46  [ТС]
Цитата Сообщение от sova_f Посмотреть сообщение
эта ошибка вылезает и в исходнике, когда речь шла об 1 станции. Программа не рабочая была...

Добавлено через 6 минут
эта ошибка из-за того, что в первом столбце нет числа 86. Массив пустой. Проверки на такую ошибку нет и она не обрабатывается. Приведите текст задания. Что ищется в каком столбце и как надо реагировать на события:
а) нашли;
б) не нашли.

Добавлено через 1 минуту
86 - это д.б. номер станции или год (года там во втором столбце)?

Добавлено через 7 минут
и еще есть неопределенные переменные spi и spi1. Текст программы приведен не полностью. Придется Вам привести его в порядок, если хотите руку помощи...
Если речь действительно идет о годах, то в массив надо перечислить года и перебирать по ним. В исходнике 86 замените на 1986, а номер столбца с 1 на 2.

забейте на spi и т.д. Последний вариант с учетом всех корректировок. Я писала выше, что 86 - это станция 20046. Мы переименовывали эти станции раз по 50. Т.е. 86=20046

Изначально прога работала и продолжает работать.

А где массив пустой, если я обращаюсь к файлу stations, к первому столбцу, там и прописаны номера станций, дальше прога обращается к файлу precep (или dataprecep.txt - не принципиально, называйте как хотите) и берет данные уже оттуда и по ним считает mmm. У меня при расчете, почему то переменная mmm=20046. А потом пишет указанную выше ошибку.


Текст задания: мы написали прогу для расчета mmm для одной станции 20046, теперь нужо чтобы mmm расчитывал для всех станций по данным precep

Добавлено через 2 часа 33 минуты
Если нужно, еще раз привожу текст исходной программы, для расчета 1 станции, файлы прикрепленные раннее рабочие.

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
clear all
load c:\data\dataprecep.txt;
 load c:\data\stations.txt;
  
 
ff=find(dataprecep(:,1)==20046);
st20046=dataprecep(ff,:);
 
mmm=[];
for ii=1:12
st20046d=st20046(:,ii+2);
frow=[];
frow= find(st20046d~=-9999); 
st=[];
st=st20046d(frow);
 
[n0]=histc(st,[0:0.1:max(st)]);
 
prob=n0/sum(n0); 
prob1=zeros(length(st),1);
prob1(1)=prob(1);
 
f0=find(st~=0);
[p,ci] = gamfit(st(f0)) 
 
 g=sort(st); 
 g1=gamcdf(st,p(1),p(2));
g11=[];
for i=1:length(g1)
g11(i)=prob(1)+(1-prob(1))*g1(i); 
end
 
c0=2.515517
c1=0.802853
c2=0.010328
d1=1.432788
d2=0.189269
d3=0.001308
 
t=[];
for i=1:length(g11)
if g11(i)<=0.5
t(i)=sqrt(log(1/(g11(i))^2));
else
t(i)=sqrt(log((1/(1-g11(i))^2)));
end
end
 
z=[];
for i=1:length(g11)
if g11(i)<=0.5
z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
else
z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
end
end 
 
mmm1=zeros(length(st20046d),1)-9999; 
mmm1(frow)=z;  
mmm=[mmm mmm1];
 
 
end
 
mmm
0
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
05.04.2013, 20:25
ну, тодыть вот так:
Кликните здесь для просмотра всего текста

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
clc;
clear all
load .\data\dataprecep.txt;
load .\data\stations.txt;
  
st1=stations(:,1); % станции из файла stions.txt - массив
for ij=1:length(st1) % перебор количества станций, из файла stations -518
    clear ff st20046 frow st n0 prob prob prob1 f0 p ci g g1 g11 t z mmm mmm1
    disp('номер станции:');
    st1(ij)
    
    ff=find(dataprecep(:,1)==st1(ij));%находит значения осадков из dataprecep для станций из stions
    st20046=dataprecep(ff,:);% прочитали данные для станции номер st1(ij)
 
    mmm=[];
    for ii=1:12
        st20046d=st20046(:,ii+2);
        frow=[];
        frow= find(st20046d~=-9999); 
        st=[];
        st=st20046d(frow);
 
        [n0]=histc(st, [0:0.1:max(st)]);
 
        prob=n0/sum(n0); 
        prob1=zeros(length(st),1);
        prob1(1)=prob(1);
 
        f0=find(st~=0);
        [p,ci] = gamfit(st(f0)) 
 
        g=sort(st); 
        g1=gamcdf(st,p(1),p(2));
        g11=[];
        for i=1:length(g1)
            g11(i)=prob(1)+(1-prob(1))*g1(i); 
        end
 
        c0=2.515517
        c1=0.802853
        c2=0.010328
        d1=1.432788
        d2=0.189269
        d3=0.001308
 
        t=[];
        for i=1:length(g11)
            if g11(i)<=0.5
                t(i)=sqrt(log(1/(g11(i))^2));
            else
                t(i)=sqrt(log((1/(1-g11(i))^2)));
            end
        end
 
        z=[];
        for i=1:length(g11)
            if g11(i)<=0.5
                z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
            else
                z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
            end
        end 
 
        mmm1=zeros(length(st20046d),1)-9999; 
        mmm1(frow)=z;  
        mmm=[mmm mmm1];
 
    end
    mmm
end


Добавлено через 1 минуту
Может, лучше не на экран выводить, а в файл с именем по номеру станции? А то 518 станций... матлаб столько информации в одном окне не покажет. Начало затирать будет.

Добавлено через 6 минут
можно еще так:
Кликните здесь для просмотра всего текста

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
 
clc;
clear all
load .\data\dataprecep.txt;
load .\data\stations.txt;
  
st1=stations(:,1); % станции из файла stions.txt - массив
for ij=1:length(st1) % перебор количества станций, из файла stations -518
    clear ff st20046 frow st n0 prob prob prob1 f0 p ci g g1 g11 t z mmm mmm1
    disp('номер станции:');
    st1(ij)
    
    ff=find(dataprecep(:,1)==st1(ij));%находит значения осадков из dataprecep для станций из stions
    st20046=dataprecep(ff,:);% прочитали данные для станции номер st1(ij)
 
    mmm=[];
    for ii=1:12
        st20046d=st20046(:,ii+2);
        frow=[];
        frow= find(st20046d~=-9999); 
        st=[];
        st=st20046d(frow);
 
        [n0]=histc(st, [0:0.1:max(st)]);
 
        prob=n0/sum(n0); 
        prob1=zeros(length(st),1);
        prob1(1)=prob(1);
 
        f0=find(st~=0);
        [p,ci] = gamfit(st(f0)) 
 
        g=sort(st); 
        g1=gamcdf(st,p(1),p(2));
        g11=[];
        for i=1:length(g1)
            g11(i)=prob(1)+(1-prob(1))*g1(i); 
        end
 
        c0=2.515517
        c1=0.802853
        c2=0.010328
        d1=1.432788
        d2=0.189269
        d3=0.001308
 
        t=[];
        for i=1:length(g11)
            if g11(i)<=0.5
                t(i)=sqrt(log(1/(g11(i))^2));
            else
                t(i)=sqrt(log((1/(1-g11(i))^2)));
            end
        end
 
        z=[];
        for i=1:length(g11)
            if g11(i)<=0.5
                z(i)=-(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
            else
                z(i)=(t(i)-[[c0+c1*(t(i))+c2*(t(i)^2)]/[1+d1*(t(i))+d2*(t(i)^2)+d3*(t(i)^3)]]);
            end
        end 
 
        mmm1=zeros(length(st20046d),1)-9999; 
        mmm1(frow)=z;  
        mmm=[mmm mmm1];
 
    end
    mmm
    disp('нажмите пробел для продолжения...');
    pause
end

после каждой станции - пауза, нажать кнопку для продолжения (518 раз нажимать придется)...
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
06.04.2013, 16:11  [ТС]
Ребятушки, я вас так люблю, вы не представляете как! sova_f -Вы гений!! АААА, спасибо огромнейшеееееее!!!!!


P.S. ДА, так и планировалось ,чтобы матлаб в файл записал! Спасибо!!
1
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
06.04.2013, 16:17
а в файл-то записали? Я этого не делала, только предложила...
0
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
06.04.2013, 16:19  [ТС]
Цитата Сообщение от sova_f Посмотреть сообщение
а в файл-то записали? Я этого не делала, только предложила...
Да, я знаю) на это я все-таки способна самостоятельно, спасибо!
1
301 / 214 / 7
Регистрация: 16.10.2012
Сообщений: 485
06.04.2013, 16:23
Успехов в освоении Матлаба и учебе )))
1
4 / 4 / 0
Регистрация: 28.02.2013
Сообщений: 35
06.04.2013, 16:26  [ТС]
Спасибо!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2013, 16:26
Помогаю со студенческими работами здесь

Приложение для формирования БД на основе данных, находящихся в текстовом файле
Здравствуйте! Я новичок в программировании и прошу помощи в разработке приложения в С++ Builder. Суть работы приложения заключается в...

Необходимо найти ошибку в коде для расчета премии работнику
Sub ZapPrem() Dim theDefault As String, thePrompt As String, theTitle As String Dim theReply As String, OKFlag As Boolean, theB As...

Записать цикл для расчета кредита равными долями
Записала формулу для расчета кредита равными долями. Суть в том, что нужно рассчитать сколько будет выплачивать клиент за год и 2 месяца...

Необходимо накопить сумму всех элементов массива, находящихся в интервале от А до В, и вывести её на экран.
Всем доброго времени суток!!! Вкратце о проблеме: учусь на гуманитарном, новая специальность, никакой учебной программы нет. И тут нам...

Определить, в каком необходимо построить школу для удобства всего населенного пункта
Имеется населенный пункт(т А1,А2,...).Определить,в каком необходимо построить школу для удобства всего населенного пункта.(Решение...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru