Код октавы для минимума и максимума и поисковый индекс - PullRequest
0 голосов
/ 25 мая 2020

Всем привет, Я пытался закодировать эту программу, чтобы найти максимальные и минимальные значения в векторе строк , и у меня возникла проблема с присваивая их размер индексы Я не могу понять, что не так C и D всегда отображаются как « 1 » Я новичок, не могли бы вы помочь мне

function [low,high,index1,index2] = Q1(x)
low = x(1);
high = x(1);
  index1 = x(1,2);
  index2 = x(1,2);
    for i = 2:length(x),
        if x(i) < low,
            low = x(i);
        index1 = find(low);
        elseif x(i) > high,

        high = x(i);
    index2 = find(high);

endif;
    endfor;
endfunction

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

index1 и index2 должны начинаться с 1 как low, а high начинаться с элемента x(1). При обнаружении условия присвойте x(i) значению и i relative index.

function [low,high,index1,index2] = Q1(x)
low = x(1);
high = x(1);
index1 = 1;
index2 = 1;
    for i = 2:length(x),
        if (x(i) < low)
            low = x(i);
            index1 = i;
        elseif (x(i) > high)
            high = x(i);
            index2 = i;
        endif
    endfor;
endfunction

, используя случайные данные для тестирования

octave:1> x=rand(10,1)
x =

   0.90588
   0.20695
   0.46777
   0.67169
   0.69547
   0.24960
   0.16570
   0.62231
   0.18489
   0.36467

octave:2> Q1(x)
ans =  0.16570
octave:3> [low,high,index_low,index_high]=Q1(x)
low =  0.16570
high =  0.90588
index_low =  7
index_high =  1
0 голосов
/ 27 мая 2020

Похоже, ваша функция может быть выполнена очень быстро без циклов с использованием функций min и max. Предполагая, что x является вектором строки:

>> x = [8 4 9 7 6 4 2 3 5 6] 
x =
   8   4   9   7   6   4   2   3   5   6

>> [min_x, min_x_loc] = min (x)
min_x =  2
min_x_loc =  7

>> [max_x, max_x_loc] = max (x)
max_x =  9
max_x_loc =  3

, если вы хотите поместить его в одну функцию, используя вашу запись:

function [low, high, index1, index2] = Q1(x)
  [low, index1] = min (x);
  [high, index2] = max (x);
end

(не обязательно, но с использованием end вместо endfuntion сохраняет совместимость с Matlab)

...