Preciso ajustar duas curvas (que devem pertencer a funções cúbicas) em um conjunto de pontos com o JuMP.
Eu já fiz o ajuste de uma curva, mas estou lutando para ajustar 2 curvas no mesmo conjunto de dados.
Eu pensei que se eu puder distribuir pontos em curvas - então, se cada ponto puder ser usado apenas uma vez - eu posso fazê-lo como abaixo, mas não funcionou. (Eu sei que posso usar coisas muito mais complicadas, quero simplificar.)
Esta é uma parte do meu código atual:
# cubicFunc is a two dimensional array which accepts cubicFunc[x,degree]
@variable(m, mult1[1:4]) // 0:3 because it's cubic
@variable(m, mult2[1:4]) // 0:3 because it's cubic
@variable(m, 0 <= includeIn1[1:numOfPoints] <= 1, Int)
@variable(m, 0 <= includeIn2[1:numOfPoints] <= 1, Int)
# some kind of hack to force one of them to 0 and other one to 1
@constraint(m, loop[i in 1:numOfPoints], includeIn1[i] + includeIn2[i] == 1)
@objective(m, Min, sum( (yPoints - cubicFunc*mult1).*includeIn1 .^2 ) + sum( (yPoints - cubicFunc*mult2).*includeIn2 .^2 ))
Mas dá vários erros, dependendo do que estou tentando; *includeIn1
e, .*includeIn1
não funciona, tentei fazê-lo via, @NLobjective
mas isso me deu gritos ~ 50 linhas de erros etc.
A minha ideia é realista? Posso entrar no código?
Qualquer ajuda será muito apreciada. Muito obrigado.
yPoints = [ 3, 6, 5, 7, 3, 3, 1, 0, 4, 1]