3D плоскость наименьших квадратов

Если Ваш коллега испытывает недостаток в опыте, пишущий тесты, возможно, он испытывает затруднения при тестировании вне простых ситуаций, и это проявляется как несоответствующее тестирование. Вот то, что я попробовал бы:

  • Проводят некоторое время и методы тестирования доли, как внедрение зависимости, поиск пограничных случаев, и так далее с Вашим коллегой.
  • Предложение ответить на вопросы о тестировании.
  • Действительно кодируют обзоры тестов некоторое время. Попросите, чтобы Ваш коллега рассмотрел ваши изменения, которые являются образцовыми из хорошего тестирования. Посмотрите на их комментарии, чтобы видеть, читают ли они действительно и понимают Ваш тестовый код.
  • , Если существуют книги, которые соответствуют особенно хорошо философии тестирования Вашей команды, дают ему копию. Могло бы помочь, ссылаются ли Ваша обратная связь обзора кода или обсуждения на книгу, таким образом, у него есть поток, чтобы взять и следовать.

я особенно не подчеркнул бы фактор позора/вины. Стоит указать, что тестирование является широко принятой, хорошей практикой и что запись и поддержание хороших тестов являются профессиональной любезностью, таким образом, Ваши помощники команды не должны проводить свои выходные на работе, но я не лупил бы те точки.

, Если действительно необходимо "жестко вести себя" тогда, устанавливают беспристрастную систему; никому не нравится чувствовать, что они выбираются. Например, Ваша команда могла бы потребовать, чтобы код поддержал определенный уровень тестового покрытия (способный играться, но по крайней мере способная быть автоматизированной); потребуйте, чтобы новый код имел тесты; потребуйте, чтобы рецензенты рассмотрели качество тестов при выполнении обзоров кода; и так далее. Учреждение той системы должно прибыть из согласия команды. При модерировании обсуждения тщательно, Вы могли бы раскрыть другие базовые причины, тестирование Вашего коллеги не то, что Вы ожидаете.

23
задан Pete Kirkham 9 September 2009 в 17:05
поделиться

4 ответа

Если у вас есть n точек данных (x [i], y [i], z [i]), вычислите симметричный размер 3x3. матрица A, элементы которой:

sum_i x[i]*x[i],    sum_i x[i]*y[i],    sum_i x[i]
sum_i x[i]*y[i],    sum_i y[i]*y[i],    sum_i y[i]
sum_i x[i],         sum_i y[i],         n

Также вычислите 3-элементный вектор b:

{sum_i x[i]*z[i],   sum_i y[i]*z[i],    sum_i z[i]}

Затем решите Ax = b для данных A и b. Три компонента вектора решения являются коэффициентами для плоскости аппроксимации методом наименьших квадратов {a, b, c}.

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

39
ответ дан 29 November 2019 в 01:20
поделиться

Как и в случае любого метода наименьших квадратов, вы действуете следующим образом:

Перед тем, как начать кодирование

  1. Запишите уравнение для плоскости в некоторой параметризации, скажем 0 = ax + by + z + d в трех параметрах (a, b, d) .

  2. Найдите выражение D (\ vec {v}; a, b, d) для расстояния от произвольной точки \ vec {v} .

  3. Запишите сумму S = \ sigma_i = 0, n D ^ 2 (\ vec {x} _i) , и упростим, пока она не будет выражена в виде простых сумм компонентов v например \ sigma v_x , \ sigma v_y ^ 2 , \ sigma v_x * v_z ...

  4. Запишите выражения для минимизации каждого параметра dS / dx_0 = 0 , dS / dy_0 = 0 ... который дает вам набор из трех уравнений для трех параметров и суммы из предыдущего шага.

  5. Решите этот набор уравнений для параметров.

(или для простых случаев просто найдите форму). Использование пакета символьной алгебры (например, Mathematica) может значительно облегчить вам жизнь.

Кодирование

  • Напишите код для формирования необходимых сумм и найдите параметры из последнего набора выше.

Альтернативы

Обратите внимание, что если на самом деле у вас было только три точки, вам лучше просто найти плоскость, которая проходит через них.

Кроме того, если аналитическое решение неосуществимо (не в случае плоскости, но возможно в целом), вы можете выполнить шаги 1 и 2, и использовать минимизатор Монте-Карло для суммы на шаге 3.

3
ответ дан 29 November 2019 в 01:20
поделиться

Все, что вам нужно сделать, это решить систему уравнений.

Если это ваше мнение: (1, 2, 3), (4, 5, 6), (7, 8, 9)

Это дает вам уравнения:

3=a*1 + b*2 + c
6=a*4 + b*5 + c
9=a*7 + b*8 + c

Итак, ваш вопрос на самом деле должен быть: Как мне решить систему уравнений ?

Поэтому я рекомендую прочитать этот SO вопрос.

Если я неправильно понял ваш вопрос, дайте нам знать.

РЕДАКТИРОВАТЬ :

Не обращайте внимания на мой ответ, поскольку вы, вероятно, имели в виду что-то еще.

0
ответ дан 29 November 2019 в 01:20
поделиться

Похоже, все, что вам нужно, это линейная регрессия с двумя регрессорами. На странице википедии по этой теме вы найдете все, что вам нужно знать, и кое-что еще.

0
ответ дан 29 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: