我想解决一个非线性方程组:
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)
答案 0 :(得分:2)
我相信你做的事情有三个问题:
您忘记在公式中使用点积:f=@(x,y)(x*y+exp(x)+y-5)
,它应该是:f=@(x,y)(x.*y+exp(x)+y-5)
,因为您在矩阵X和Y上使用它。这已经给出了正确的结果该功能。
使用绘制曲面2D轮廓图的轮廓,这不是您想要用来查看2D函数的零点的轮廓。 - >而是使用surf
您将x*y+exp(x)+y-5
绘制为尺寸x
中的15,这已经是1e6
...的数量级,所以当然,您看不到非常精确地过零的地方......
试试这段代码:
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)