Как найти уравнение графика, соединяющего точки данных в Matlab?

У меня есть различные графики (с hold on), как показано на следующем рисунке: введите здесь описание изображения

Я хотел бы знать, как найти уравнения этих шести кривых в Matlab. Спасибо.


person Community    schedule 30.03.2012    source источник
comment
Существует любое количество уравнений, которые соответствовали бы этим кривым. Знаете ли вы что-нибудь об основных отношениях? например может ли он быть экспоненциальным, квадратичным и т. д.?   -  person Oliver Charlesworth    schedule 30.03.2012
comment
Мне не ясно ... Вы сами создаете кривую из данных или у вас просто есть график, сохраненный как .fig (я думаю, это формат MATLAB)?   -  person Jack_of_All_Trades    schedule 30.03.2012
comment
@ Оли: я не знаю основных отношений. @ Jack_of_All_Trades: я сам создаю кривую на основе данных.   -  person    schedule 30.03.2012
comment
@S_H: Тогда это проблема. Если вы не знаете основную форму уравнения, то вы найдете бесконечное количество различных уравнений, которые соответствуют данным.   -  person Oliver Charlesworth    schedule 31.03.2012


Ответы (5)


Я нашел интерактивный инструмент подбора в Matlab простым и полезным, хотя несколько ограничен по объему:

введите здесь описание изображения

person Community    schedule 01.04.2012
comment
К сожалению, эта ссылка мертва. - person Paxton Sanders; 18.12.2013
comment
Похоже, автор имел в виду это: mathworks.co .uk/help/matlab/data_analysis/ - person Danny; 20.05.2014

График выше выглядит как линейная интерполяция. Учитывая векторы данных X и Y, где X содержит аргументы, а Y — функциональные точки, вы можете сделать

f = interp1(X, Y, x)

чтобы получить линейно интерполированное значение f(x). Например, если данные

X = [0 1 2 3  4  5];
Y = [0 1 4 9 16 25];

тогда

y = interp1(X, Y, 1.5)

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

person richard    schedule 30.03.2012
comment
@richard: у меня есть данные, которые я начертил и показал в вопросе. Я хочу узнать уравнение того сюжета, которого я не знаю. - person ; 31.03.2012
comment
@S_H, просто чтобы прояснить, у вас действительно есть числовые данные, которые сгенерировали этот график? Уравнение сюжета, как я уже сказал, линейно (en.wikipedia.org/wiki/Linear_interpolation); другими словами, соедините точки. Но это один из многих возможных способов превратить дискретные данные в кривую. Вы должны быть более конкретными в том, что вы ищете. - person richard; 31.03.2012
comment
Я думаю, вы видите, что график выглядит как кривая (а не как прямая линия), и я хочу иметь возможность найти уравнение этой кривой. - person ; 31.03.2012
comment
Данные здесь имеют вид {(x_i, y_i) : i = 1,...,N}, дискретный набор точек. Это функция x_i --> y_i. Не существует уникальной кривой, описывающей эти данные. Как упоминал Jack_of_All_Trades (@Jack_of_All_Trades), существует бесконечное количество непрерывных (и дифференцируемых!) кривых, которые согласуются с приведенными выше дискретными данными. - person richard; 31.03.2012

rxns означает реакции? В этом случае ваши кривые, скорее всего, будут экспоненциальными. Экспоненциальная функция имеет вид: y = a*exp(b * x) . В вашем случае y — это ширина зоны смешения, а x — это время в годах. Теперь все, что вам нужно сделать, это запустить экспоненциальную регрессию в Matlab, чтобы найти оптимальную значения параметров a и b, и вы получите уравнения.

person Diego    schedule 30.03.2012

Совет от меня, хотя может быть и лучший ответ, таков: постарайтесь увидеть скорость увеличения кривой. Например, кубическое число является более репрезентативным, чем квадратичное, если скорость увеличения кажется быстрой, найдите полином и вычислите ошибку отклонения. Для неправильных кривых вы можете попробовать подгонку сплайном. Я предполагаю, что в Matlab также есть набор инструментов для подгонки сплайнов.

person Jack_of_All_Trades    schedule 30.03.2012

Существует способ извлечь информацию с текущим дескриптором фигуры (gcf) из вашего графика.

Например, вы можете получить ряды, которые были нанесены на график:

% Some figure is created and data are plotted on it
figure;
hold on;
A = [ 1 2 3 4 5 7] % Dummy data
B = A.*A % Some other dummy data
plot(A,B);
plot(A.*3,B-1);

% Those three lines of code will get you series that were plotted on your graph
lh=findall(gcf,'type','line'); % Extract the plotted line from the figure handle
xp=get(lh,'xdata'); % Extract the Xs
yp=get(lh,'ydata'); % Extract the Ys

Должна быть и другая информация, которую вы можете получить из методов "findall(gcf,...)".

person Mesop    schedule 30.03.2012