Построение композиции двух функций в Matlab
Я не могу понять, что не так с моим кодом здесь, в Matlab:
syms t
x=[1 2 3];
g=t*t;
f=sin(x);
y=compose(g,f);
plot(x,y,'o')
этот код, который я написал для построения y=sin(x)^2 . Поскольку у меня нет matlab на моем компьютере, поэтому он запускался на онлайн-компиляторе Octave, он выдает ошибку 'syms' undefined near line 1 column 1
,
Пожалуйста, если кто-нибудь может помочь объяснить, где я не прав в коде?
1 ответ
Похоже, у вас не установлен символический набор математических инструментов, поэтому вы не можете использовать compose
, Хотя есть способ обойти это. Помните, состав двух функций при вызове compose(f,g)
таков, что мы возвращаемся f(g(y))
за f = f(x)
а также g = g(y)
,
Что вы можете сделать, это построить это численно, не полагаясь на syms
, Объявите числовой вектор времени, который... скажем... из t = 0
в t = 5
по шагам 0.01
, После, объявите свои собственные дескрипторы функций, которые будут вычислять каждую функцию. Дескрипторы функций или анонимные функции - это небольшие однострочные функции, которые обычно представляют собой математические или вычислительные операторы, которые могут принимать входные данные любого размера, будь то одно значение, вектор или матрица, и применяют этот вычислительный оператор к каждому значению в ваших входных данных., Вы обозначаете анонимную функцию с помощью @
символ, затем в круглых скобках вы указываете переменные, которые будут составлять оператор, который вы хотите вычислить. В этом случае есть только одна переменная, которую мы будем называть t
, но это может быть любая переменная на самом деле.
Поэтому я определяю функцию g
который выполняет t^2
к каждому элементу в нашем входе. Обратите внимание, что я должен делать поэлементные операции. Если бы мы только что сделали t*t
Если я предоставлю вектор или матрицу, это будет интерпретироваться как умножение матрицы, а это не то, что вы хотите. Точно так же мы определяем анонимную функцию f
такой, что он производит sin(t)
в качестве выхода.
С этим определенным, все, что вам действительно нужно сделать, это:
t = 0 : 0.01 : 5;
g = @(t) t.*t;
f = @(t) sin(t);
y = g(f(t)); %// Composition of the two functions (compose(g,f));
plot(t, y, 'o');