用于求解非线性方程组的两个函数的水平曲线

时间:2014-02-26 07:54:49

标签: matlab plot

我想解决一个非线性方程组:

x ^ 2 + y * sin(y) - 3 = 0 x * y + exp(x)+ y -5 = 0

所以我介绍了两个函数f1 = x ^ 2 + y * sin(y)-3和f2 = x * y + exp(x)+ y -5。现在我试图绘制水平曲线(在0),这样我就可以看到有多少解决方案存在。但我无法绘制有意义的结果(即找到交叉点)。

代码

x=linspace(-15,15,400);

y=linspace(-15,15,400);

f=@(x,y)(x.^2+y.*sin(y)-3);

[X,Y]=meshgrid(x,y);

Z=f(X,Y);

contour(X,Y,Z,10)

hold on

f=@(x,y)(x*y+exp(x)+y-5);

[X,Y]=meshgrid(x,y);

Z=f(X,Y);

contour(X,Y,Z,100)

2 个答案:

答案 0 :(得分:2)

我相信你做的事情有三个问题:

  1. 您忘记在公式中使用点积:f=@(x,y)(x*y+exp(x)+y-5),它应该是:f=@(x,y)(x.*y+exp(x)+y-5),因为您在矩阵X和Y上使用它。这已经给出了正确的结果该功能。

  2. 使用绘制曲面2D轮廓图的轮廓,这不是您想要用来查看2D函数的零点的轮廓。 - >而是使用surf

  3. 您将x*y+exp(x)+y-5绘制为尺寸x中的15,这已经是1e6 ...的数量级,所以当然,您看不到非常精确地过零的地方......

  4. 试试这段代码:

    x=linspace(-15,5,30);
    y=linspace(-15,15,30);
    f=@(x,y)(x.^2+y.*sin(y)-3);
    [X,Y]=meshgrid(x,y);
    Z=f(X,Y);
    surf(X,Y,Z)
    hold on
    f=@(x,y)(x.*y+exp(x)+y-5);
    Z=f(X,Y);
    surf(X,Y,Z)
    

    看到它们变为零的地方并不是很清楚,但这是一个开始......

答案 1 :(得分:1)

为什么不能直接使用solve功能?

syms x y
[sol_x, sol_y]=solve(x^2 + y*sin(y) - 3 == 0, x*y + exp(x) + y -5 == 0,x,y)