在SciLab中求解非线性方程组

时间:2018-10-16 01:00:57

标签: scilab

我正在尝试在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 :(得分:0)

检查help fsolve,您会看到fsolve适用于单参数函数。这意味着您的f3应该收到向量v而不是xy,而要有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^2 + y^2 = x^4 + y^4 - 10中的任何点(x,y)都是您系统的解决方案。因此,fsolve将根本找不到任何解决方案:

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

帮助页面上指出,对于info == 4,“迭代没有取得良好的进展。”