Я хочу решить систему нелинейных уравнений
x1 = f(x1, x2)
x2 = g(x1, x2)
при условии x1 >= 0
, x2 >= 0
Используя nleqslv, я оптимизировал возвращаемый вектор моей функции следующим образом:
y[1] = x[1] - f(x[1], x[2])
y[2] = x[2] - g(x[1], x[2])
y[3] = -x[1]
y[4] = -x[2]
где последние два должны отражать неотрицательные ограничения.
Вызов nleqslv дает:
«Якобиан в единственном числе (1/условие=0.0e+000) (см. опцию allowSingular)»
и вызов с помощью allowSingular = T дает:
"значения x в пределах допуска 'xtol'"
что имеет смысл, поскольку y[4] не меняется при изменении x[4] (по построению вообще не реагирует на это).
Как я могу сделать это правильно?
x[..]
. Назовите аргументыz
вместоx
. А затем используйтеx <- exp(z)
, который заставитx>0
. Вы также можете попробоватьx <- z^2
, то есть использовать возведение в квадрат. Однако это может сделать вашу проблему плохо обусловленной. Вам придется экспериментировать. Если вам нужна дополнительная помощь, вам нужно будет предоставить фактическое определение ваших функцийf
иg
. - person Bhas   schedule 27.10.2016sqrt(x)
, верно? Не очень помогло.f(x1,x2) = .9- x2
иg(x1,x2) = 2 - sqrt(x1+x2)
. Для этого простого случая я, конечно, мог бы решить его вручную, но в конечном итоге я хочу расширить его до системыN
уравнений. - person bonifaz   schedule 27.10.2016z[1]
иz[2]
, и вы устанавливаетеx <- z^2
. И тогдаx[1]
положительный. Если вы хотите, вы можете использоватьx <- x^2
напрямую, но я чувствую, что это скрывает трансформацию. - person Bhas   schedule 27.10.2016x = z^2
в начале. Но чтобы сохранить правильное назначениеy[1]
иy[2]
, я должен использоватьy[1]=sqrt(x[1]) - f(sqrt(x[1]), sqrt[x[2]])
, не так ли? - person bonifaz   schedule 27.10.2016x
. - person Bhas   schedule 27.10.2016