Кубическая экстраполяция шлица

Я сделал запись в Документации переполнения стека, объясняющую, как это сделать:

Контекст проверки

Любая проверка требует контекста, чтобы дать некоторую информацию о том, что проверяется. Это может включать различную информацию, такую ​​как проверяемый объект, некоторые свойства, имя, отображаемое в сообщении об ошибке и т. Д.

ValidationContext vc = new ValidationContext(objectToValidate); // The simplest form of validation context. It contains only a reference to the object being validated.

После создания контекста существует несколько способов проверки.

Проверка объекта и всех его свойств

ICollection results = new List(); // Will contain the results of the validation
bool isValid = Validator.TryValidateObject(objectToValidate, vc, results, true); // Validates the object and its properties using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

Проверка свойства объекта

ICollection results = new List(); // Will contain the results of the validation
bool isValid = Validator.TryValidatePropery(objectToValidate.PropertyToValidate, vc, results, true); // Validates the property using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

И еще

Чтобы узнать больше о проверке вручную, см. :

5
задан Will Ness 16 August 2015 в 11:06
поделиться

4 ответа

Для этого вам не нужен новый код.

Чтобы экстраполировать сплайн, вы можете экстраполировать параметры первого и последнего сплайна.

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

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

6
ответ дан 18 December 2019 в 14:51
поделиться

Вам действительно придется немного расширить этот вопрос. Кроме того, «кубический сплайн» - очень широкий термин.

Если вас интересуют сплайны, я могу искренне порекомендовать Карла де Бурса «Практическое руководство по сплайнам». Однако он немного математически ориентирован, но в него включены примеры кода (их можно скачать с домашней страницы автора). Поиск в Google и wiki для "кубического сплайна" может привести к некоторым примерам, возможно, даже на определенных языках - еще одна вещь, которую нужно добавить к вопросу (если вы ищете код).

Если вас интересует экстраполяция и подгонка кривой , поиск в Google мог бы помочь. Пакет Matlab имеет очень хороший набор инструментов для подгонки кривых. В Википедии есть ссылки на полезные ссылки

На самом деле, это слишком широкий вопрос, чтобы даже начать угадывать ответ.

Кроме того, не могли бы вы объяснить, что именно вы пытаетесь сделать? Какие данные? Что-нибудь?


Edit1: Вот, попробуйте это: здесь вы можете найти что-нибудь полезное - ссылка

2
ответ дан 18 December 2019 в 14:51
поделиться

Обычно для сплайн-интерполяции вы используете переменную t для интерполяции по линии. Пока 0 <= t <= 1, вы интерполируете. Однако, когда t <0 или t> 1, вы просто экстраполируете сплайн.

1
ответ дан 18 December 2019 в 14:51
поделиться

You need to write better requirements for requested code. Splines are usually used for interpolation of some unknown or complex function by using of some fixed data set. If you want to have an estimate of function's value outside of boundaries of this data set then you shouldn't use splines.

If your spline is function defined in the place where you really want to evaluate your value (cubic, but not piecewise-cubic) then you already can evaluate that value.

If you want to have ability to evaluate your spline outside of interpolation range, but leave it as piecewise-cubic function with the same values inside of interpolation range then you should extend spline range by some nodes, and add some logic of evaluation values at the new nodes (for example you want to have your spline be not only a continuous function, but also have some number of first derivatives be also continuous functions)

Really I suggest you to use some algorithm more suitable for extrapolation, like usage of Lagrange polynomial if everything you really need is single value not very far from points of original data set.

1
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

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