2016-05-20 2 views
2

Я новый пользователь MATLAB и я хочу, чтобы решить следующую задачу:Как написать функцию индикатора в MATLAB

Я хочу построить кусочно-постоянную функцию f. f должен быть анонимной функцией, такой как [email protected](t)1[0,0.25)(t). Однако число интервалов для кусочно-постоянной функции вообще не фиксировано. Вместо этого кусочный интервал зависит от ввода пользователей.

Например, если один входит 4, интервал становится кусочно

[0,0.25), [0.25,0.5), [0.5,0.75) и [0.75,1)

затем

F = @ (т) a1 * 1 [0,0.25) (т) + а2 * [0.25,0.5) (т) + а3 * 1 [0.5,0.75) (т) + а4 * 1 [0.75,1) (т);

В то время как, если человек входит 5, интервал становится кусочно

[0,0.2), [0.2,0.4), [0.4,0.6), [0.6,0.8) и [0.8,1)

Есть ли хорошие способы решения проблемы?

+0

Обратите внимание, что в любой ситуации, где вы используете анонимный функции, вы также можете использовать обычную функцию Matlab и оператор @, чтобы получить дескриптор функции. Например. '@ sum' будет дескриптором функции для функции' sum'. –

+0

Можете ли вы привести пример использования @sum? Когда я пытаюсь в Matlab, он дает сообщение об ошибке, что я не могу сделать это таким образом. –

+0

Когда вы выполняете 'f = @ (x) x.^2, вы присваиваете переменной' f' дескриптор функции функции, которая вычисляет 'x.^2'. Вы также можете создать файл 'myfunction.m' с текстом' function result = myfunction (x) ... result = x.^2', а затем назначить 'f = @ myfunction'. Во втором случае' f' будет также назначается дескриптор функции для функции, которая вычисляет 'x.^2'. –

ответ

0

Предполагая, что вес a1, ..., ак уже определена, вы можете использовать следующий подход:

%defines weight vector. for example: a1=1, a2=2, a3=3, a4=4,a5=5 
A = 1:5; 
%defines a range vector 
ranges = [0:(1/length(A)):1,inf]; 
%The padding is for handling cases where t<0 or t>=1 
APadded = [0,A,0]; 
%define f 
[email protected](t)APadded(find(t<ranges,1,'first')) 

Результат:

f(0.1) = 1 
f(0.3) = 2 
f(0.5) = 3 
f(0.7) = 4 
f(0.9) = 5 
f(-0.1) = f(1.1) = 0; 
Смежные вопросы