【问题标题】:How to plot a nonlinear system of 3 equations with 3 symbolic variables in MATLAB?如何在 MATLAB 中绘制具有 3 个符号变量的 3 个方程的非线性系统?
【发布时间】:2009-05-29 11:27:51
【问题描述】:

我没有很多使用 Matlab 的经验。我知道您可以绘制带有 2 个变量的方程,如下所示:

ezplot(f1)
hold on
ezplot(f2)
hold off;

你将如何用 三个 符号变量绘制三个方程?

一个示例系统是:

x^2+y^2+z^2-1=0
2*x^2+y^2-4*z=0
3*x^2-4y+z^2=0

如果有办法绘制任何由 3 个方程组成的系统,那就太理想了。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    我相信ezsurf 接近你想要的。您首先必须为z 求解每个方程,然后为该方程创建一个函数并用ezsurf 绘制它。以下是如何使用上面的第一个方程式:

    func1 = @(x, y) sqrt(1-x.^2-y.^2);
    ezsurf(func1);
    

    这应该显示球体的上半部分。

    要同时显示所有三个方程,您可以执行以下操作:

    func1 = @(x, y) sqrt(1-x.^2-y.^2);
    func2 = @(x, y) 0.5.*x.^2+0.25.*y.^2;
    func3 = @(x, y) sqrt(4.*y-3.*x.^2);
    ezsurf(func1, [-1 1 -1 1]);
    hold on;
    ezsurf(func2, [-1 1 -1 1]);
    ezsurf(func3, [-1 1 -1 1]);
    axis([-1 1 -1 1 0 1]);
    

    结果图如下所示:

    通过旋转绘图,您会注意到所有三个表面相交处似乎有两个点,从而为您提供方程组的两个解。

    【讨论】:

    • 谢谢。这很有帮助,我接受你的回答。我知道我可以使用 solve(f1,z) 来解决 z 问题。但是我如何将返回的函数传递给 ezsurf?我试过 f = x^2+y^2+z^2-1; f = 解决(f,z); func1 = @(x,y) f; ezsurf(func1);这显然行不通,但我想问有没有办法做到这一点?
    • 您想要的正确语法如下: f = 'x^2+y^2+z^2-1'; f2 = 解决(f,'z'); ezsurf(f2(1));坚持,稍等; ezsurf(f2(2));轴相等;这将绘制球体的顶部和底部,不幸的是,“赤道”处的表面之间存在锯齿状不连续性。要绕过不连续性,您必须使用 SURF 而不是 EZSURF 并为自己定义渲染表面的 x 和 y 点。
    • 非常感谢您的帮助!
    【解决方案2】:

    “hold on”只是说不删除当前轴上的现有线条和标记。你应该能够做到

    ezplot(f1);
    hold on;
    ezplot(f2);
    ezplot(f3);
    hold off;
    

    我从未使用过 ezplot,所以无法帮助您。

    【讨论】:

    • 不幸的是,ezplot 只能使用不超过两个符号变量的函数。我正在寻找的是一种绘制 3 个变量的函数的方法。它不需要是 ezplot。
    • 糟糕,我抓住了“3 个方程式”,但错过了“3 个变量”部分。
    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多