2015-10-12 2 views
3

Я пытаюсь интегрировать функцию, которая включает в себя векторное умножение. Однако я все время получаю сообщение об ошибке.Интегрируя произведение вектора в Matlab

Предполагается, что alphas - это некоторый вектор. и рассмотрим следующий фрагмент кода:

g = @(x)prod(x.*alphas); 
integral(g,-10,10); 

Это дает следующее сообщение об ошибке:

Error using .*

Matrix dimensions must agree.

Error in @(x)prod(x.*alphas)

Теперь, наивной точки зрения. g - скалярная функция. Если x - это некоторое число, то g (x) - это номер.

Я совершенно новичок в Matlab, и я не могу полностью понять проблему. Любая помощь была бы полезной. Спасибо.

ответ

2

Если alphas - это вектор, он должен иметь значение для каждого x. Когда вы даете integral() функцию для интеграции, она пытается оценить функцию g как например g(-10:0.1:10). Если нет одинакового количества альфов, как x, тогда эта ошибка будет выброшена.

Проблема с использованием integral() здесь есть, что вы не контролируете количество x данное g внутри integral, таким образом, вы не можете определить g так, как вы сделали, если вы хотите интегрировать.

EDIT: Следующее выполнит эту работу! спасибо @Andras Deak

integral(g,-10,10,'arrayvalued',true); 
+0

Спасибо! каков был бы правильный способ определить * g *, то? – Cain

+0

@Cain Что вы хотите сделать? Какая у вас функция, которая имеет разные альфы? Можете ли вы опубликовать еще один вопрос, объясняющий, что вы хотите сделать? –

+2

@Cain Как насчет этого? 'g = @ (x) prod (x (:) * alphas, 2); интеграл (г, -10,10, 'arrayvalued', правда) '? Обратите внимание, что кажется, что '' arrayvalued '== true' остановит векторную оценку, поэтому вы можете просто использовать 'prod (x * alphas)'. –

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