2015-01-19 6 views
0

Генерировать график, показывающий графикиMATLAB черчения семейство функций

y=(2*a+1)*exp(-x)-(a+1)*exp(2*x) 

в диапазоне х ∈ < -2, 4> для всех целых значений а между -3 и 3

I знаете, как сделать типичный график для двух значений и установить диапазон по осям, но как рисовать график в зависимости от параметра a?

+0

Ах, конечно ... вы захотите использовать 'bsxfun'. –

+1

У меня есть файлы в формате pdf о матлабе с различными задачами и (иногда) примерами, к сожалению, к этой проблеме у меня нет никаких советов. В дополнение к предыдущим примерам это должно быть очень просто, но я думаю, что я что-то упустил ... Это не домашнее задание в любом случае, я пытаюсь понять, что Matlab сдал экзамен, и я основываюсь на этих файлах :) – Neri

ответ

1

Вы можете сделать это, используя простой цикл, как показано ниже. Вы в основном зацикливаете каждое значение a и строите соответствующую функцию y.

clear 
clc 
close all 

x = -2:4; 

%// Define a 
a = -3:3; 

%// Counter for legend 
p = 1; 
LegendText = cell(1,numel(a)); 

figure; 
hold on %// Important to keep all the lines on the same plot. 

for k = a 

    CurrColor = rand(1,3); 

    y= (2*k+1).*exp(-x)-(k+1).*exp(2.*x); 

    plot(x,y,'Color',CurrColor); 

    %// Text for legend 
    LegendText{p} = sprintf('a equals %d',k); 
    p = p+1; 
end 
legend(LegendText,'Location','best') 

Что дает что-то вроде этого:

enter image description here

Вы можете настроить график, как вам нравится. Надеюсь, это поможет вам начать!

+0

все понятно , спасибо – Neri

+0

awesome рад помочь! –

3

Выработать на Ben Voigt's comment: более продвинутая техника будет заменить for -loop с вызовом bsxfun сгенерировать матрицу оценок M(i,j) = f(x(i),a(j)) и вызвать plot с этой матрицей. Затем Matlab будет использовать столбцы матрицы и отображать каждый столбец с отдельными цветами.

%%// Create a function handle of your function 
f = @(x,a) (2*a+1)*exp(-x)-(a+1)*exp(2*x); 
%%// Plot the data 
x = linspace(-2, 4); 
as = -3:3; 
plot(x, bsxfun(f,x(:),as)); 
%%// Add a legend 
legendTexts = arrayfun(@(a) sprintf('a == %d', a), as, 'uni', 0); 
legend(legendTexts, 'Location', 'best'); 

Вы также можете создать матрицу оценки с помощью ndgrid, которая явно возвращает все комбинации значений x и as. Здесь вам нужно уделять больше внимания правильному векторизации кода. (Нам повезло, что bsxfun подход работал без изменения оригинального f.)

f = @(x,a) (2*a+1).*exp(-x)-(a+1).*exp(2*x); %// Note the added dots. 
[X,As] = ndgrid(x,as); 
plot(x, f(X,As)) 

Family of plots

Однако для начала, вы должны ознакомиться с петлями.

+0

Красиво сделано! Я всегда забываю о bsxfun. +1! –

Смежные вопросы