Как векторизовать при использовании функции fplot? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую fplot.(Я мог также использовать plot, я только нашел больше примеров fplot).Я хочу построить две прямые линии вида y = m * x, где m = V1 и V2.V1 и V2 являются скалярами.Следующий код дает мне ошибку.

Matlab Code

fplot(@(x) V1,[-4 4],'green')
xlim([-4 4])
ylim([-4 4])

В сообщениях об ошибках говорится, чтобы векторизовать.Я не уверен, как это сделать?Позже я добавлю к этому графику указанную сетку с помощью функции meshgrid.

[x,y]=meshgrid(-4:.5:4,-4:.5:4);

Меня беспокоит то, что я не указываю приращение .5 в выражении fplot.Код Matlab

fplot(@(x) V1,[-4 4],'green')

выдает следующие сообщения об ошибках:

Сообщения об ошибках Предупреждение. Функция неожиданно работает на входах массива.Чтобы улучшить производительность, правильно векторизовать вашу функцию, чтобы возвращать выходные данные с тем же размером и формой, что и входные аргументы

  In matlab.graphics.function.FunctionLine>getFunction
  In matlab.graphics.function.FunctionLine/updateFunction
  In matlab.graphics.function.FunctionLine/set.Function_I
  In matlab.graphics.function.FunctionLine/set.Function
  In matlab.graphics.function.FunctionLine
  In fplot>singleFplot (line 234)
  In fplot>@(f)singleFplot(cax,{f},limits,extraOpts,args) (line 193)
  In fplot>vectorizeFplot (line 193)
  In fplot (line 163)
  In m01 (line 121) 

Может кто-нибудь помочь мне собрать это воедино?Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы сказали, что хотите построить две линии с помощью уравнения y = m * x, где x - это вектор, а m - это скалярные V1 и V2, и, следовательно, вы хотите построить 2 линии для обоих скаляров натот же сюжет.

Таким образом, вы можете напрямую поместить анонимную функцию в команду fplot (), используя V1 и V2 по одному.

close all

% declare the x interval
x =[-4:1:4];


% declare the m values as V1 and V2
V1 = 3;
V2 = 4;

% plot the 1st function
fplot(@(x)V1*x, 'green')
% hold the axis to plot the
% 2nd function within the same axis
hold on
% plot the 2nd function
fplot(@(x)V2*x, 'red')

xlim([-4 4])
ylim([-4 4])
hold off

Одна самая важная вещь, которую следует отметитьпри объявлении функции необходимо использовать оператор точка (.) при объявлении функции, если применимо, к векторизации функции правильно.

например,

y = @(x)x.^2 + 2*x;
0 голосов
/ 21 декабря 2018

Дескриптор функции, данный fplot, должен реализовывать функцию y(x), которую вы хотите построить.Поэтому, если вы хотите построить линию y = V1*x, вам нужно умножить V1 на x в дескрипторе функции, например так:

fplot(@(x) V1*x,[-4 4],'green');

Ваш код пытался построить y = V1функция, которая является просто константой.MATLAB ожидает, что выходные данные дескриптора функции будут иметь то же измерение, что и x, но, поскольку ваша функция всегда возвращает скаляр V1, она не будет работать должным образом (отсюда и предупреждение).Если вы действительно хотите построить постоянную функцию, вы можете избавиться от предупреждения, выполнив:

fplot(@(x) V1*ones(size(x)),[-4 4],'green');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...