2016-05-17 2 views
1

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

У меня есть набор значений, 69 значений для x и y, для кривой, где я хочу решить x-перехват. Однако у меня нет соответствующего значения для x = 0.

Моя идея состояла в том, чтобы интерполировать линейно между точками, ближайшими к 0, чтобы получить коэффициенты для прямой, а затем решить для x = 0, но я не могу понять, как это сделать.

Я нашел ближайшие значения х = 0, и хранить их в векторах:

x = [0.251287 0.2555517]; 
y = [0.014228 -0.003326]; 

Так что я уже знаю, что х-перехват составляет около 0,25.

Мой подход заключается в использовании interp1:

pp = interp1(x,y,'linear','pp'); 

И затем использовать коэффициенты, которые я получаю от С. ее решить. Коэффициенты составляют -4.11677 и 0.014228. Если я использую эти значения для x = 0, я получаю ответ, который очень далеко, 0.003456.

У меня возникает ощущение, что что-то в моем подходе ошибочно. Может ли кто-нибудь указать мне в правильном направлении?

ответ

0

interp1 предназначен для интерполяции значений между двумя точками. Таким образом, второй коэффициент, который вы получаете, - это просто значение y вашей первой пары очков. Если вы хотите использовать interp1, вам необходимо экстраполировать на внешний мир между двумя вашими значениями x, но это будет очень неуклюжий способ сделать линейную регрессию.

Вместо этого вы должны использовать polyfit, чтобы соответствовать вашим данным полиномам вашего заказа. Вы можете сделать это на весь набор данных или на 2 пары значений, которые вы идентифицировали. Так как во втором случае, вы уже с использованием линейной регрессии (полином порядка 1), вы могли бы сделать:

p = polyfit(x,y,1) 

и p(2) будет ваш у-перехват. Х отсекаемый бы:

x-intercept = -p(2)/p(1) 

Смотрите информацию Matlab на polyfitHERE.

+0

Если я использую polyfit для двух пар значений, p хранит два значения: -4.11677 и 1.04872. Первое значение совпадает с тем, которое я получил от interp1, но второе отличается. Если я использую коэффициенты из полифита как k и m в линейном уравнении y = kx + m и решает при y = 0, я нахожу x равным 0.25474. Кажется, это правильный ответ. Почему тогда ответы от polyfit отличаются от ответов в interp1. Мне кажется, что они должны быть одинаковыми. – Victoria

+0

Если вы хотите перехватить, вы должны искать x = 0, а не y = 0. –

+0

Я хочу перехват x, поэтому, когда кривая пересекает ось x. Вы имеете в виду перехват y. Но я получил хороший ответ, используя полифит, тем не менее, так что это было очень полезно. У вас есть идеи, почему результаты от interp1 и polyfit настолько различны? – Victoria

Смежные вопросы