2015-06-01 4 views
-1

Предположим, что у меня есть полиномы legendre в ячейке Array P как функции. Теперь я использую линейное преобразование x = 2/3 * t-1. Теперь я хочу получить массив ячеек Q, который имеет дескриптор функции преобразования. Итак, P = [1, @ (x) x, 1/2 * (3 * x^2-1), ...] в Q = [1, @ (t) 2/3 * t-1 ,. ..]Ручка функции линейной трансформации

Спасибо!

+0

Может быть, этот сайт может быть лучше подходит к вашему вопросу ?: HTTP : //math.stackexchange.com/ – Kmeixner

+0

@Kmeixner Я думаю, что это скорее вопрос программирования, чем математический вопрос. –

+0

@ user307380 Вам будет лучше использовать символические функции для этой задачи –

ответ

0

Предполагая, что у вас есть Символическое Toolbox, вы можете сделать это следующим образом:

  1. Преобразовать ваш массив ячеек анонимных функций в массив ячеек строк
  2. ли изменение переменной с помощью subs. В результате получается symbolic objects.
  3. Преобразование символических объектов в анонимные функции с помощью matlabFunction:

Код:

P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)};  %// data 
f = cellfun(@func2str, P, 'uniformoutput', 0); %// step 1 
Q = arrayfun(@(k) matlabFunction(subs(f{k}(5:end), 'x', '2/3*t-1')), 1:numel(P),... 
    'uniformoutput', 0);       %// steps 2 and 3. 
    %// Note that the "(5:end)" part is used for removing the initial "@(x)" 
    %// from the string obtained from the function 

Результата в этом примере:

Q{1} = 
    @()1.0 
Q{2} = 
    @(t)t.*(2.0./3.0)-1.0 
Q{3} = 
    @(t)(t.*(2.0./3.0)-1.0).^2.*(3.0./2.0)-1.0./2.0 
0

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

Код:

%// The original polynomials 
P = {@(x) 1, @(x) x, @(x) 1/2*(3*x^2-1)}; 

%// The transformation function 
x = @(t)2/3*t-1; 

%// The composition 
Q = cellfun(@(f) @(t)f(x(t)), P, 'UniformOutput', false); 

Результатом будет массив ячеек функций, которые будут делать вещи:

x == 1 --> t == 3 
P{2}(1) --> 1 
Q{2}(3) --> 1 

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

  • Нет связанных вопросов^_^