麻烦与matlab中的匿名函数

时间:2014-11-14 05:43:36

标签: matlab anonymous-function function-handle

我在打印h_a_b时遇到问题。我能够得到函数f和g但不能得到这个函数。我需要使用h_a_b函数,所以我可以做h(f(x),g(x))并计算h(a,b)的sqrt。看方程式

我总是收到此错误

Undefined function 'h_a_b' for input arguments of type 'function_handle'.

我想编写一个程序来创建代表函数的3个匿名函数

需要的公式

f(x)= 10 * cos x,

g(x)= 5 * sin * x,

h(a,b)= \ sqrt(a ^ 2 + b ^ 2)。

这是我的代码

f = @ (x) 5*sin(x); 

g = @ (x) 10*cos(x); 

h_a_b = @ (a,b) sqrt(a.^2 + b.^2);

然后我用这个赋予我的功能绘制它。

function plotfunc(fun,points)
%PLOTFUNC Plots a function between the specified points.
% Function PLOTFUNC accepts a function handle, and
% plots the function at the points specified.
% Define variables:
% fun -- Function handle
% msg -- Error message
%

msg = nargchk(2,2,nargin);
error(msg);
% Get function name
fname = func2str(fun);
% Plot the data and label the plot
plot(points,fun(points));
title(['\bfPlot of ' fname '(x) vs x']);
xlabel('\bfx');
ylabel(['\bf' fname '(x)']);
grid on;

end 

1 个答案:

答案 0 :(得分:4)

因为你的函数(h_a_b)将一个向量作为输入并将标量作为输出,它代表一个表面,因此plot不能用于可视化它(仅用于2D,标量标量)地块)。

你在寻找这样的东西吗?:

f       = @ (x) 5*sin(x); 
g       = @ (x) 10*cos(x); 
h_a_b   = @ (a,b) sqrt(a.^2 + b.^2);

z       = @(a,b) sqrt(h_a_b(f(a),g(b)));

[A, B]  = meshgrid(0:0.1:8, 0:0.1:9);
Z       = z(A,B);

surfc(A,B,Z)
xlabel('a')
ylabel('b')
figure
contourf(A,B,Z)
xlabel('a')
ylabel('b')

enter image description here enter image description here


第二个选项,将z视为标量标量函数并使用plotfunc函数:

f       = @ (x) 5*sin(x); 
g       = @ (x) 10*cos(x); 
h_a_b   = @ (a,b) sqrt(a.^2 + b.^2);

z       = @(x) sqrt(h_a_b(f(x),g(x)));

points = 0:0.1:8;
plotfunc(z,points)

enter image description here

这是上述表面的一部分。