如何在 MATLAB 中绘制(冲浪)矢量化(矩阵形)方程?
How to plot (surf) vectorized (Matrix shaped) equation in MATLAB?
我想要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)
我不想操纵我的方程式,因为在其他情况下,更大的方程式不太容易操纵它们。
除了符号工具箱之外,还有什么方法可以简单地以这种紧密形式到达表面吗?
所以,假设您从 "close form" 方程式开始 anonymous function:
z = @(w) w.'*p;
假定 p
已经定义并且需要一个 2×1 的输入。 MATLAB 中的任何高级绘图例程(例如 fsurf
)如何知道输入应该是 2×1(即一组自变量 [x; y]
)?他们不会,除非你像这样把这个函数包装在另一个函数中:
fxy = @(x, y) z([x; y]);
因此,此函数需要两个变量作为输入,并将它们连接起来并以正确的形式将它们传递给函数 z
。但是函数 fxy
将如何处理 x
或 y
的向量或矩阵输入?不太好,所以我们必须添加另一层包装来处理这个问题(由 arrayfun
提供):
fxyMat = @(x, y) arrayfun(fxy, x, y);
现在你有一个函数,它接受两个变量的向量或矩阵输入,并最终计算你原始的、未改变的方程。您现在可以使用 fsurf
绘制它,而无需自己在多个点明确评估它(基本上,您让 fsurf
为您完成):
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 ;
我想要surf
这个功能:
z=w.'*p %(close form)
其中:
w=[w0; w1]
p=[cte0; cte1]
其中,w是可变的,cte0和cte1可以是任意数字。
要使用 surf
我们需要通过 meshgrid
:
[w0,w1]=meshgrid(-50:1:50)
现在我们只能通过将等式(z=w.'*p
)操作为这种形式来得到答案:
z=w0*cte0+w1*cte1 %(open form)
surf(z)
我不想操纵我的方程式,因为在其他情况下,更大的方程式不太容易操纵它们。 除了符号工具箱之外,还有什么方法可以简单地以这种紧密形式到达表面吗?
所以,假设您从 "close form" 方程式开始 anonymous function:
z = @(w) w.'*p;
假定 p
已经定义并且需要一个 2×1 的输入。 MATLAB 中的任何高级绘图例程(例如 fsurf
)如何知道输入应该是 2×1(即一组自变量 [x; y]
)?他们不会,除非你像这样把这个函数包装在另一个函数中:
fxy = @(x, y) z([x; y]);
因此,此函数需要两个变量作为输入,并将它们连接起来并以正确的形式将它们传递给函数 z
。但是函数 fxy
将如何处理 x
或 y
的向量或矩阵输入?不太好,所以我们必须添加另一层包装来处理这个问题(由 arrayfun
提供):
fxyMat = @(x, y) arrayfun(fxy, x, y);
现在你有一个函数,它接受两个变量的向量或矩阵输入,并最终计算你原始的、未改变的方程。您现在可以使用 fsurf
绘制它,而无需自己在多个点明确评估它(基本上,您让 fsurf
为您完成):
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 ;