Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 y=k*x+c линейная интерполяция  [new]
DimAAA
Member

Откуда: долина
Сообщений: 5340
y=k*x+c

Приветствую всех кто силен в математике.

Есть табличка данных из двух колонок: Дата (x) и Число (y)
Нужно данные линейно интерполировать, то есть вычислить коэффициенты k и с.

Какой путь правильный?

(SQL2k)
20 авг 09, 15:40    [7562537]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а для етого разве диплома средней школы не досточно????
-------------------------------------
Jedem Das Seine
20 авг 09, 15:57    [7562666]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Roman Sergeev
Member

Откуда:
Сообщений: 15
Ну если данные чистые, то достаточно двух точек. :) Если шумные, то надо аппроксимировать. Через МНК, к примеру.
20 авг 09, 15:59    [7562678]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
DimAAA
y=k*x+c

Приветствую всех кто силен в математике.

Есть табличка данных из двух колонок: Дата (x) и Число (y)
Нужно данные линейно интерполировать, то есть вычислить коэффициенты k и с.

Какой путь правильный?

(SQL2k)
Как-то так :
declare
  @s1 double precision,
  @s2 double precision,
  @s3 double precision,
  @s4 double precision,
  @s5 double precision

select
  @s1 = count(*),
  @s2 = sum(cast(x as double precision)),
  @s3 = sum(cast(x as double precision)*cast(x as double precision)),
  @s4 = sum(y),
  @s5 = sum(x*y)
from tbl

declare @D double precision
set @D = @s1 * @s3 - @s2 * @s2

select
  k = (@s1 * @s5 - @s2 * @s4) / @D,
  b = (@s3 * @s4 - @s2 * @s5) / @D

ЗЫ. Давно я уже этой фигней не занимался. Ностальгия...
20 авг 09, 16:31    [7562926]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Var79
Member

Откуда:
Сообщений: 890
k и c вычислять относительно каких двух точек?
select top 2 x, y from tbl order by ?
20 авг 09, 16:35    [7562949]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Рабочий вариант выглядит так:
USE [tempdb]
GO

DECLARE @tbl TABLE (x DATETIME, y FLOAT)

INSERT INTO @tbl ([x],[y])
SELECT 1, 1 UNION ALL
SELECT 2, 3 UNION ALL
SELECT 3, 5 UNION ALL
SELECT 4, 7 UNION ALL
SELECT 5, 9

declare
  @s1 double precision,
  @s2 double precision,
  @s3 double precision,
  @s4 double precision,
  @s5 double precision

select
  @s1 = count(*),
  @s2 = sum(CONVERT(DOUBLE PRECISION, x)),
  @s3 = sum(CONVERT(DOUBLE PRECISION, x) * CONVERT(DOUBLE PRECISION, x)),
  @s4 = sum(y),
  @s5 = sum(CONVERT(DOUBLE PRECISION, x) * y)
from @tbl

declare @D double precision
set @D = @s1 * @s3 - @s2 * @s2

select
  k = (@s1 * @s5 - @s2 * @s4) / @D,
  b = (@s3 * @s4 - @s2 * @s5) / @D
20 авг 09, 16:38    [7562974]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Var79
Member

Откуда:
Сообщений: 890
почему то подумал нужно не вообще средние значения а какието приблеженные точки, с меншим набором данных в таблице
20 авг 09, 16:44    [7563028]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Var79
почему то подумал нужно не вообще средние значения а какието приблеженные точки, с меншим набором данных в таблице
Вопросов Ваших (если они предназначались мне) не вкурил. Какие еще "средние значения"? Почитайте про метод МНК.

Автор кстати ошибся похоже, когда сказал
автор
Нужно данные линейно интерполировать, то есть вычислить коэффициенты k и с.
Линейно интерполировать, т.е. используя полином 1-го порядка, можно только для 2-х точек и задача решается точно. Если точек больше двух, то используется приближенная аппроксимация по МНК.
20 авг 09, 16:56    [7563097]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
DimAAA
Member

Откуда: долина
Сообщений: 5340
Senya_L
Линейно интерполировать, т.е. используя полином 1-го порядка, можно только для 2-х точек и задача решается точно. Если точек больше двух, то используется приближенная аппроксимация по МНК.


Во, точно .. аппроксимировать.

Но, если мы инженеры, то алгоритм должен, кроме k и c, еще некую Сигму посчитать.

Которая показывает степень вырожденности данных, то есть достоверность k и c.
Можно такие данные придумать, которые будут аппроксимироваться разными k и c с одинаковой истинностью, ткаие данные называют вырожденными.

Вроде..

не знаю как насчет вышеприведенных селектов, но видел на паскале алгоритм сантиметров 60 точно.
20 авг 09, 18:28    [7563715]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
DimAAA
Member

Откуда: долина
Сообщений: 5340
Maxx
а для етого разве диплома средней школы не досточно????


вообще-то по этой теме рубятся ведущие математики всего мира
20 авг 09, 18:30    [7563732]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
DimAAA


Вроде..

не знаю как насчет вышеприведенных селектов, но видел на паскале алгоритм сантиметров 60 точно.


ну и что ? вы задачу как поставили так вам ее и решили :)
20 авг 09, 18:34    [7563749]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
DimAAA

Но, если мы инженеры, то алгоритм должен, кроме k и c, еще некую Сигму посчитать.
Считайте. Даю добро. Ностальгия у меня уже прошла по численным методам, так что сами как-нибудь. :) Не знаю, какую Вы сигму считать собрались, но могу догадаться, что речь идет о коэффициенте корреляции.
автор
не знаю как насчет вышеприведенных селектов, но видел на паскале алгоритм сантиметров 60 точно.
С дуру можно и буй... утопить. Кстати, любопытный подход - измерять размер кода сантиметрами. Мне привычнее количеством строк.
+ OFF
Program li_approx;

type
  TReal = double;

var
  n,k: integer;
  x,y: array[1..10] of TReal;
  s1,s2,s3,s4,s5,a0,a1,kcorr: TReal;
begin

  writeln;
  write('n:='); readln(n);
  for k:=1 to n do
    begin
      write('x[',k,']='); readln(x[k]);
      write('y[',k,']='); readln(y[k]);
    end;
  s1 := n; s2 := 0.0; s3 := 0.0; s4 := 0.0; s5 := 0.0;
  for k:=1 to n do
    begin
      s2 := s2 + x[k];
      s3 := s3 + sqr(x[k]);
      s4 := s4 + y[k];
      s5 := s5 + x[k]*y[k];
    end;
  a0 := (s3*s4 - s2*s5)/(s1*s3 - sqr(s2));
  a1 := (s1*s5 - s2*s4)/(s1*s3 - sqr(s2));
  writeln;
  writeln('a0=',a0:10:4);
  writeln('a1=',a1:10:4);

{coefficient of correlation}
  s2 := s2/n; s4 := s4/n;
  s1 := 0.0; s3 :=0.0; s5 := 0.0;
  for k := 1 to n do
    begin
      s1 := s1 + (x[k] - s2)*(y[k] - s4);
      s3 := s3 + sqr(x[k] - s2);
      s5 := s5  + sqr(y[k] - s4);
    end;
  kcorr := s1/( sqrt(s3)*sqrt(s5) );
  writeln('r=',kcorr:10:5);
end.
20 авг 09, 22:01    [7564167]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
lepton
Member

Откуда: Протвино
Сообщений: 1261
DimAAA
y=k*x+c

Приветствую всех кто силен в математике.

Есть табличка данных из двух колонок: Дата (x) и Число (y)
Нужно данные линейно интерполировать, то есть вычислить коэффициенты k и с.

Какой путь правильный?

(SQL2k)


Правильный путь решать задачи с sql-ex самостоятельно =)
20 авг 09, 23:14    [7564247]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Leierkastenmann
Member

Откуда: Москва
Сообщений: 113
Senya_L
DimAAA

Но, если мы инженеры, то алгоритм должен, кроме k и c, еще некую Сигму посчитать.
Считайте. Даю добро. Ностальгия у меня уже прошла по численным методам, так что сами как-нибудь. :) Не знаю, какую Вы сигму считать собрались, но могу догадаться, что речь идет о коэффициенте корреляции.


Не, это ему видимо дисперсия нужна :)
21 авг 09, 12:58    [7566361]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Ирина Тихонова
Member

Откуда: Кама
Сообщений: 393
Leierkastenmann, Речь идёт о среднеквадратичном отклонении относительно среднего значения (сигма!). Похоже пытаются рассчитать воспроизводимость CR, Ср, Cpk и пригодность процесса PR, Pp, Ppk… Никто по этой проблеме не бьётся всё давно решено.
21 авг 09, 13:09    [7566463]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Leierkastenmann
Member

Откуда: Москва
Сообщений: 113
Ирина Тихонова
Leierkastenmann, Речь идёт о среднеквадратичном отклонении относительно среднего значения (сигма!). Похоже пытаются рассчитать воспроизводимость CR, Ср, Cpk и пригодность процесса PR, Pp, Ppk… Никто по этой проблеме не бьётся всё давно решено.


Среднеквадратичное отклонение от среднего значения и есть дисперсия.
21 авг 09, 13:14    [7566507]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
DimAAA
Member

Откуда: долина
Сообщений: 5340
я имел ввиду, то что алгоритм аппроксимации должен помимо вычисленных коэффициентов линии выдать ответ - вычисленные (весьма точно) коэффициенты бессмысленны, они не имеют смысла, никакой линейной зависимости между точками не обнаружено

поэтому не надо делать никаких выводов по полученным данным
линейных зависимостей математическим аппаратом не обнаружено

наблюдается рост или падение - непонятно

К сообщению приложен файл. Размер - 0Kb
21 авг 09, 14:04    [7566827]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
DimAAA
наблюдается рост или падение - непонятно
Значит интерпретировать значения коэффициентов вы не можете? Вот это как раз таки школьная программа. 10 класс. Тождество
k = tg (alpha)
хоть знаете?
21 авг 09, 14:12    [7566893]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
DimAAA
Member

Откуда: долина
Сообщений: 5340
Senya_L
DimAAA
наблюдается рост или падение - непонятно
Значит интерпретировать значения коэффициентов вы не можете? Вот это как раз таки школьная программа. 10 класс. Тождество
k = tg (alpha)
хоть знаете?


Так на Ваш взгляд по графику у данных линейная тенденция к росту или падению?
данные растут или падают во времени?

Вам нужно
- открыть вентиль на Саяно-Шушенской ГЭС, потому что давление растет
- закрыть вентиль на Саяно-Шушенской ГЭС, потому что давление падает
- или лучше ничего не делать, ситуация неопределенная, волатильность зашкаливает?
21 авг 09, 15:41    [7567676]     Ответить | Цитировать Сообщить модератору
 Re: y=k*x+c линейная интерполяция  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
DimAAA
Senya_L
DimAAA
наблюдается рост или падение - непонятно
Значит интерпретировать значения коэффициентов вы не можете? Вот это как раз таки школьная программа. 10 класс. Тождество
k = tg (alpha)
хоть знаете?


Так на Ваш взгляд по графику у данных линейная тенденция к росту или падению?
данные растут или падают во времени?

Вам нужно
- открыть вентиль на Саяно-Шушенской ГЭС, потому что давление растет
- закрыть вентиль на Саяно-Шушенской ГЭС, потому что давление падает
- или лучше ничего не делать, ситуация неопределенная, волатильность зашкаливает?
1. У каждого метода есть границы применимости. У МНК они тоже есть.
2. Учитесь выражать свои мысли и хотелки. :) Только теперь кое-как понял что надо.
То, что вам хочется называется отысканием диапазонов тренда. Хотя могу и ошибаться, т.к. этой темы касался вскользь. Средствами SQL такую задачу если и можно, то вряд ли целесообразно. Если очень хочется - погуглите, найдите метод, сформулируйте здесь и спросите как такое реализовать. Вещь специфическая и вникать в нее никто не захочет.
21 авг 09, 16:12    [7567913]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить