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

时间:2017-05-22 14:51:27

标签: 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)

我不想操纵我的等式,因为在其他情况下,更大的等式并不那么容易操纵它们。 除了符号工具箱之外,有没有办法简单地以这种紧密的形式到达表面?

2 个答案:

答案 0 :(得分:3)

所以,让我们说你从"关闭形式"开始等式为anonymous function

z = @(w) w.'*p;

假定p已定义,并且需要输入为2 x 1。 MATLAB中的任何高级绘图程序(例如fsurf)如何知道输入应该是2乘1(即一组独立变量[x; y])?他们不会赢,除非你把这个函数包装在另一个函数中,如下所示:

fxy = @(x, y) z([x; y]);

因此,此函数需要两个变量作为输入,并将它们连接起来并以正确的形式将它们传递给函数z。但是,fxy函数如何处理xy的向量或矩阵输入?不太好,所以我们必须添加另一层包装来处理它(由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]);

这里是情节(这个例子只是一个简单的倾斜平面):

enter image description here

答案 1 :(得分:0)

[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 ;