我想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)
我不想操纵我的等式,因为在其他情况下,更大的等式并不那么容易操纵它们。 除了符号工具箱之外,有没有办法简单地以这种紧密的形式到达表面?
答案 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
函数如何处理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]);
这里是情节(这个例子只是一个简单的倾斜平面):
答案 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 ;