2014-02-09 4 views
0

Matlab newb здесь. Я искал и не нашел, как сделать следующее:Как ограничить переменную в Matlab

x=0.1:1/100:10; 
y=exp(a(a>=-1&a<=1)*sqrt(x)); 
plot(x,y) 

Я понимаю, что размеры x и a не совпадают, но я просто хочу, чтобы выразить: «что делает y выглядеть, когда константа, a, ограничена между -1 и 1 ", например.

Любые советы приветствуются. Заранее спасибо.

+0

Если ответы ниже не помогают, возможно, вы может пересмотреть ваш вопрос. Мне кажется, что вы хотите изучить форму exp (a * sqrt (x) как меняется, но я могу ошибаться. Если это так, вам нужен 3-й график y vs x и a или набор следов y vs x для разных a? Если да, то в каком диапазоне должен меняться? –

+0

Я просто надеялся на 2D и «множество следов y vs x для разных a. У меня на самом деле разные диапазоны я но в примере, который я представил, меня интересует -1 <= a <= 1. Я понимаю, что в Matlab существует множество способов подхода к решению проблем, поэтому, если у вас есть больше информации, пожалуйста, я бы хотел здесь, здесь. Позже, когда я получаю очки, я могу пересмотреть здесь, чтобы дать вам несколько ответов. Ответы ниже были очень полезны для меня. – Joe

ответ

1

Допуская a и x независимы, вы можете идти по этим линиям, используя bsxfun для расчета y для всех комбинаций a и x:

x = 0.1:1/100:10; %// define x values 
a = linspace(-1,1,10); %// define a values 
y = exp(bsxfun(@times, a, sqrt(x).')); %'// compute y for all combinations 
plot(x,y); %// this plots each column of y. Each colum represents a value of a 

enter image description here

Или сюжет как 3D-графика (y как функция a и x):

mesh(a,x,y) 
xlabel('a') 
ylabel('x') 
zlabel('y') 

enter image description here

+0

Большое спасибо Луису, глядя в документы, благодаря вашему предложению, я вижу, что bsxfun - действительно полезная функция. – Joe

+0

@Joe Я обнаружил 'bsxfun' здесь, в StackOverflow, несколько месяцев назад, и это определенно изменилось, как я думаю (в Matlab) :-) –

+0

Luis Mendo, знаете ли вы, что у вас есть ярлыки, показывающие значение, прикрепленное на каждый разный след y, заданный a, т. е. для каждого столбца y? – Joe

1

можно сделать следующим образом:

x=0.1:1/100:10; % 991 clips 
a=-1:1/495:1;  % use 1/495 here to make it also 991 clips 
y=exp(a.*sqrt(x)); 
plot(x,y) 

Это даст вам следующий рисунок:

enter image description here

+0

Спасибо, herohyongtao, еще одно полезное предложение. Оцените. – Joe

+0

Мы можем сделать a = -1: 1/floor (длина (x)/2): 1;% используйте 1/495 здесь, чтобы сделать это также 991 клипс – Joe

+0

Я вроде обобщил этот шаблон для себя и для кого-либо еще может помочь: https://gist.github.com/anonymous/8904953 – Joe

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