Проблем с анонимни функции в matlab

Имам проблем с отпечатването на h_a_b. Мога да получа функции f и g, но не и тази. Трябва да използвам функцията h_a_b, за да мога да направя h(f(x),g(x)) и да изчисля sqrt на h(a,b). виж уравнения

Винаги получавам тази грешка

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 

person user2353565    schedule 14.11.2014    source източник
comment
Кой ред задейства конзолата на MATLAB да върне съобщението за грешка? Предполагам, че имате нужда от друга анонимна функция, за да представите всичко. Пример: h_x = @(x) h_a_b(f(x),g(x));   -  person heriantolim    schedule 14.11.2014
comment
О!!! Това не го разбрах!!! Добро мислене!   -  person user2353565    schedule 14.11.2014


Отговори (1)


Тъй като вашата функция (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)

въведете описание на изображението тук

Което е един отрязък от горната повърхност.

person rozsasarpi    schedule 14.11.2014
comment
Как изглежда, ако го начертая като 2-D? - person user2353565; 14.11.2014
comment
@user2353565 Моля, гласувайте за, както и приемете отговора. - person kkuilla; 14.11.2014
comment
@kkuilla Обърнете внимание, че питащият все още не е получил достъп до гласуване (мин. 15 повторения). - person Dennis Jaheruddin; 14.11.2014
comment
@DennisJaheruddin А, не се сетих за това. Е, сега го правят... :-) - person kkuilla; 14.11.2014