如何在MATLAB中绘制矢量化(矩阵形)方程?

如何在MATLAB中绘制矢量化(矩阵形)方程?,matlab,surface,Matlab,Surface,我想surf此功能: z=w.'*p %(close form) 其中: w=[w0; w1] p=[cte0; cte1] 在这里,w是可变的,cte0和cte1可以是任意数字。 要使用surf我们需要通过meshgrid生成w0和w1: [w0,w1]=meshgrid(-50:1:50) 现在我们只能通过将方程(z=w.*p)处理为以下形式来得到答案: z=w0*cte0+w1*cte1 %(open form) surf(z) 我不想操纵我的方程,因为在另一种情况下,更大的方程并

我想
surf
此功能:

z=w.'*p %(close form)
其中:

w=[w0; w1]
p=[cte0; cte1]
在这里,w是可变的,cte0和cte1可以是任意数字。 要使用
surf
我们需要通过
meshgrid
生成w0和w1:

[w0,w1]=meshgrid(-50:1:50)
现在我们只能通过将方程(
z=w.*p
)处理为以下形式来得到答案:

z=w0*cte0+w1*cte1 %(open form)
surf(z)
我不想操纵我的方程,因为在另一种情况下,更大的方程并不容易操纵它们。
除了符号工具箱之外,还有什么方法可以简单地以这种闭合形式到达曲面吗?

那么,假设您从“闭合形式”方程开始:

假设已经定义了
p
,并且需要一个2乘1的输入。MATLAB中的任何高级绘图例程(例如)如何知道输入应该是2×1(即一组自变量
[x;y]
)?它们不会,除非您将此函数包装到另一个函数中,如下所示:

fxy = @(x, y) z([x; y]);
因此,该函数需要两个变量作为输入,并将它们串联起来,以正确的形式传递给函数
z
。但是函数
fxy
如何处理
x
y
的向量或矩阵输入?不太好,因此我们必须添加另一层包装来处理(由提供):

现在有了一个函数,它接受两个变量的向量或矩阵输入,并最终计算原始的、不变的方程。现在,您可以使用
fsurf
来绘制它,而无需自己在多个点上对其进行显式计算(基本上,您是让
fsurf
为您进行计算):

下面是图(本例中仅为一个简单的倾斜平面):


您的代码有什么问题?您在这里没有使用符号工具箱。@AnderBiguri我不想以开放形式可视化它,我想以封闭形式可视化它?除了符号工具箱,还有其他解决方案吗?您需要更清楚。你说的“开/关”是什么意思?无论您以何种方式创建功能,表面都是一样的,视觉上它不能改变。您是在寻找类似于
ezsurf
(或更新版本)的东西吗?相关问题:,它很聪明,但它遗漏了一些东西。即使替换
Z=w.*p,答案也不完全正确通过
Z=w.*p。这是检查代码:
[w0,w1]=meshgrid(-50:1:50);cte0=2;cte1=2;p=[repmat(cte0,尺寸(w0));repmat(cte1,尺寸(w1))];w=[w0;w1];Z=w.'*p;表面(w0,w1,Z)图形符号w0;syms w1;w=[w0;w1];Z=w.*[2;2];fmesh(Z,[-50])解释得很好,但是,在运行代码之后,为什么这是无效的:
surf(fxyMat(w0,w1))
w0
w1
是由
meshgrid
在主要问题中定义的。确切地说,
fxyMat(w0,w1)
是无效的。@mohammaddtmnd:它怎么是无效的?对我来说很好。你有错误吗?这给了我与
fsurf
相同的绘图,只是分辨率更高:
surf(w0,w1,fxyMat(w0,w1))它起作用了,这并不简单:(但效果很好,泰。
fxy = @(x, y) z([x; y]);
fxyMat = @(x, y) arrayfun(fxy, x, y);
p = [1; 2];
z = @(w) w.'*p;
fxy = @(x, y) z([x; y]);
fxyMat = @(x, y) arrayfun(fxy, x, y);
fsurf(fxyMat, [-50 50]);
[w0,w1] = meshgrid(-50:1:50) ;

cte0 = rand ;
cte1 = rand ;
p = [repmat(cte0,size(w0)) ; repmat(cte1,size(w1))] ;
w = [w0 ; w1] ;
Z = w.*p ;