не могу вычислить выражение

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

Faton_11
Пользователь
Сообщения: 9
Зарегистрирован: Сб ноя 17, 2012 6:49 pm

не могу вычислить выражение

Сообщение Faton_11 » Сб ноя 17, 2012 6:55 pm

Добрый вечер!
как вычислить выражение
z=(1-a).*x+a.*y;
если a меняется от 0 до 1 с шагом 0.0001?
т.е. нужно получить первый столбец со значениями z при а=0, второй столбец при а=0.0001, третий - при а=0.0002 и т.д.
x и y -случайные последовательности.

Была попытка создать цикл, но как правильно организовать массив - непонятно.


Код: Выделить всё

MU=0;
SIGMA=1;
x=normrnd(MU,SIGMA,[10001 1]);
y=normrnd(MU,SIGMA,[10001 1]);
%a=(0:0.0001:1)';
%z=(1-a).*x+a.*y;
 
n=1;
for a=0:0.0001:1
z=(1-a).*x+a.*y;
h[z;n]; % как организовать эту строчку?
n=n+1;
end;

А может есть способ попроще? Если знаете, подскажите, пожалуйста

abobroff
Пользователь
Сообщения: 488
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Re: не могу вычислить выражение

Сообщение abobroff » Сб ноя 17, 2012 11:35 pm

Код: Выделить всё

MU = 0;
SIGMA = 1;
x = normrnd(MU,SIGMA,[10001 1]);
y = normrnd(MU,SIGMA,[10001 1]);
a = 0:0.0001:1;

z = bsxfun(@times,1 - a,x) + bsxfun(@times,a,y);

Faton_11
Пользователь
Сообщения: 9
Зарегистрирован: Сб ноя 17, 2012 6:49 pm

Re: не могу вычислить выражение

Сообщение Faton_11 » Вс ноя 18, 2012 12:35 am

Мне долго пришлось с этим мучаться, а вы нашли такое оптимальное решение! Спасибо!

sandy
Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение sandy » Вс ноя 18, 2012 9:22 am

А зачем в этом случае bsxfun? достаточно простого матричного умножения:

Код: Выделить всё

z = x*(1 - a) + y*a;
С уважением

Александр Сергиенко