Решение нелинейной системы уравнений в SciLab - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь решить следующую систему уравнений в SciLab:

  x^2 + y^2 = 0
  x^4 + y^4 - 10 = 0

Я определил следующую функцию в SciLab:

function y=f3(x,y)
    y = [x^2+y^2,x^4+y^4-10]
endfunction

Это, похоже, работает.Я обнаружил, что f3(1,1) - это: 2. -8. Итак, я запустил следующее:

fsolve([0,0], f3)

и получил:

fsolve: exception caught in 'fct' subroutine.
at line     2 of function f3
in builtin                fsolve

Undefined variable: y

Затем я определил функцию fct следующим образом:

function y=fct(x,y)
    y = [2*x+2*y, 4*x^3+4*y^3]
endfunction

Затем я выполнил команду:

fsolve([0,0], f3, fct)

, и это привело к следующему сообщению:

fsolve: exception caught in 'jac' subroutine.
at line     2 of function f3
in builtin                fsolve

Undefined variable: y

Есть дополнительные комментарии?Что я делаю не так?

1 Ответ

0 голосов
/ 16 октября 2018

Отметив help fsolve, вы увидите, что fsolve работает с функциями с одним аргументом.Это означает, что ваш f3 должен получить вектор v вместо x и y, имеющий эти x = v(1) и y = v(2).Таким образом, ваша функция должна быть:

function y = f3(v)
    y = [v(1)^2 + v(2)^2,...
         v(1)^4 + v(2)^4-10]
endfunction

Это решит проблему невозможности запустить fsolve. Однако , более серьезная проблема заключается в том, что ваша система не имеет единственного решения, потому что любая точка (x, y), лежащая на кривой x^2 + y^2 = x^4 + y^4 - 10, является решением вашей системы.Следовательно, fsolve не сможет найти никакого решения вообще:

--> [y,val,info]=fsolve([0,0],f3)
 info  = 
   4.
 val  = 
   0.  -10.
 y  = 
   0.   0.

На странице справки сказано, что для info == 4 "итерация не дает хороших результатов".

...