2014-10-04 4 views
0

Я работаю над кодом Matlab для интерполяции Лагранжа.Как использовать уравнения в Matlab?

Моя проблема заключается в работе с уравнениями.

Для решения Лагранжа вам нужно найти Li(x)'s (L0(x) to Ln(x)) первые:

например для L0(x) у нас есть:

L0(x) = (x-x1) (x-x2) (x-x3)/(x0-x1) (x0-x2) (x0-x3) 

, который для примера это будет:

l0(x) = (x^3 - (2 * x^2) + 2x)/6 

, которое является уравнением.

Я пишу код, но он не будет принимать переменную z (который я использовал вместо X), и он говорит: «Неопределенная функция или переменная„г“»

Это, безусловно, правильно, потому что это переменная, а не данные, но как я могу ее использовать или писать?

+1

Попробуйте выполнить 'syms z', затем повторите попытку. – rayryeng

ответ

1

MATLAB по умолчанию не любит неопределенные переменный (как и большинство языков программирования!)

У вас есть два пути решения вашей проблемы: численное решение задачи Лагранжа «вручную» - то есть с функциями, как ode45, или пытаться сделать это символически. Это означает, что вам нужно либо явно определить x как символическую переменную - с syms x и использовать symbolic maths toolbox, или, альтернативно, использовать цифровую схему и что-то вроде ode45.

Если вы хотите определить функцию в MATLAB, вам нужно выложить определение в отдельный файл и сохранить его.

Например:

function out = ellZero(x, a) 
    x0 = a(1); x1 = a(2); x2 = a(3); x3 = a(4);    % SET Constants 
    out = (x-x1).*(x-x2).*(x-x3)./((x0-x1).*(x0-x2).*(x0-x3)); % RET Expression 
end 

Если вы хотите узнать больше о том, как MATLAB обрабатывает functions и 'суб- functions', посмотреть на the documentation. Вы также можете быть заинтересованы в Partial Differential Equation Toolbox.

Надеюсь, что это поможет!

+0

Спасибо большое. Символическая математическая панель инструментов работала правильно, но только один вопрос, что такое точка после фигурных скобок (x-x1). ? – deansam

+1

По умолчанию переменные в matlab являются, по существу, n-мерными тензорами (!) - они могут быть многомерными матрицами. Вот почему Matlab называется MATLAB - это сокращение от «Лаборатории Матрицы» (или, во всяком случае, было). Если 'x' является скаляром,' x. * X' и 'x * x' идентичны. Однако, если это не так, 'x * x' является матричным произведением, а' x. * X' является, по существу, внутренним произведением. Например, если 'x = [1 2 3]', то 'x. * X' является' [1 4 9] ',' x * x' не определен (и 'x * x'' равно 14). Как правило, рекомендуется использовать умножение и деление по элементам, если вы явно не хотите умножения матрицы. – Landak

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