Форум программистов, компьютерный форум, киберфорум
Наши страницы
Зосима
Войти
Регистрация
Восстановить пароль
Оценить эту запись

MATLAB. Точки пересечения дискретных данных

Запись от Зосима размещена 04.02.2019 в 20:16
Метки matlab

Скриптик для MATLAB для нахождения точек пересечения последовательностей данных (одинакового размера).
В отличии от функций fzero или fsolve он возвращает все точки пересечений на промежутке. Тут применена линейная интерполяция, поэтому результат точнее, чем простой поиск ближайшего значения. Также не требуется точное выражение функции, а лишь отдельные точки данных, что очень удобно для обработки экспериментальных данных с шумами.
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
clear, clc
% некоторые данные: 
x = 0:10;
y1 = randn(size(x));
y2 = randn(size(x));
 
% находим индексы элементов, где разность меняет знак
d = y2-y1;
s = abs(diff(sign(d))); 
id = find( s>0 );
 
% пустые массивы (заготовки)
t = zeros(size(id));
f = zeros(size(id));
for k = 1:length(id)
  i = id(k); % индексы левых точек
  % находим коэф-ты прямой:
  a1 = (y1(i+1)-y1(i))/(x(i+1)-x(i));
  a2 = (y2(i+1)-y2(i))/(x(i+1)-x(i));
  b1 = y1(i)-a1*x(i);
  b2 = y2(i)-a2*x(i);
  % имеем два уравнения:
  % f = a1*t + b1;
  % f = a2*t + b2;
  % получаем систему:
  % -a1*t + f = b1;
  % -a2*t + f = b2;
  % матрица коэф-тов:
  A = [-a1, 1; 
       -a2, 1];
  % столбец левой части: 
  B = [b1; b2];
  u = A\B; % решаем систему
  % сохраняем результат:
  t(k) = u(1);
  f(k) = u(2);
end
 
% plot them all! ^__^
plot(x, y1,'-b', x,y2,'-r', t,f,'ok','linew',2)
grid on
Результаты разных вариантов данных:
Нажмите на изображение для увеличения
Название: 01.jpg
Просмотров: 15
Размер:	47.5 Кб
ID:	5184 Нажмите на изображение для увеличения
Название: 02.jpg
Просмотров: 12
Размер:	47.3 Кб
ID:	5185

Нажмите на изображение для увеличения
Название: 03.jpg
Просмотров: 13
Размер:	43.9 Кб
ID:	5186 Нажмите на изображение для увеличения
Название: 04.jpg
Просмотров: 13
Размер:	41.6 Кб
ID:	5187
Размещено в Без категории
Просмотров 63 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru