Минимизация в Matlab

kdima

Доброго времени суток!
У меня есть задача:
Надо построить зависимость r(t,beta которая минимизирует ошибку между рыночными и теоретическими ценами облигаций. beta - вектор параметров. Формула для теоретических цен задается следующим образом:
P = c1/(1+r(t1,beta^t1 + ... + cn/(1+r(tn,beta^tn.
ci, ti известны. Таких облигаций много и n - разное для каждой из них.
Надо минимизировать сумму квадратов ошибок между теоретическими и реальными ценами.
Я нашел пример с функцией fminsearch. Но в нем оптимизируемая функция явно задается (вроде a * cos x + b * exp (x где a,b - параметры). В моем же случае явно задать не получится и нужно описать как минимум две дополнительные функции - r(t,beta) и P, а потом минимизировать третью функцию - сумму квадратов ошибок.
Собственно вопрос в том, как это сделать? Может кто-то решал похожие задачи? Или я не в том направлении копаю и нужну не fminsearch использовать?

stm7518204

Я правильно понял, что у тебя есть P(рыночные) - массив данных и P[r(beta, t)] - массив данных, полученный теоретически...
А причём тут n?
Варьируется что ты хочешь найти минимум (n ? t? и как ты считаешь ошибку?
Чтобы сумма всех облигаций стоила как сумма рыночных стоимостей, или каждая облигация стоила как рыночная?
Напиши поподробнее...
А уж с Матлабом то поможем)

sonik_23rus

Посмотри вот это:
lsqnonlin

kdima

сорри, что не ответил сразу - сидел, ковырялся с матлабом этим.
в итоге забил на него и сделал в excel. там, оказывается, тоже есть оптимизация.
а вообще по сути задачи. t известны, beta - параметры, по которым идет оптимизация, точнее, минимизация по типу МНК, то есть, сумма квадратов ошибок к 0. то есть, каждая облигация должна стоить как рыночная.
Расчетная цена дана в первом сообщении, соответствующая ей рыночная цена известна.
Вопрос был в следующем:
допустим, я хочу написать функцию, которая на вход получает массивы:
cji (m x n где cji - это ci в первом посте, j - jя облигация. tji (m x n) - аналогично. P (m) - массив цен - и минимизирует сумму квадратов ошибок. тогда это будет главная функция в m-файле. на выходе она должна выдавать вектор параметров beta.
я пишу подфункцию r(t, beta где t - число, beta - вектор параметров. туда просто вбивается формула, известная заранее. она выдает число.
теперь мне нужно в соответствии с расчетной формулой из первого сообщения настроить параметры beta. Как это сделать?
В принципе, сейчас мне это уже просто интересно и может пригодиться в будещем. Если не лень писать ответ, буду рад узнать, как это делается

spiritmc

Заколебали... В FAQ, что ли, внести?
Ключевые слова: Хук—Дживс (Hooke--Jeeves Нелдер---Мид (Nelder--Mead).
---
"Юношеству занятий масса.
Грамматикам учим дурней и дур мы."
Оставить комментарий
Имя или ник:
Комментарий: