我在打印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
答案 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')
第二个选项,将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)
这是上述表面的一部分。