Проблема с анонимными функциями в 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*cosx,

г (х) = 5 * грех * х, и

ч (а, б) = \ sqrt (а ^ 2 + б ^ 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 user2353565 Пожалуйста, проголосуйте, а также примите ответ. - person kkuilla; 14.11.2014
comment
@kkuilla Обратите внимание, что спрашивающий еще не получил доступа к голосованию (минимум 15 повторений). - person Dennis Jaheruddin; 14.11.2014
comment
@DennisJaheruddin А, не подумал об этом. Ну, теперь они... :-) - person kkuilla; 14.11.2014