Передача векторного ввода в функцию MATLAB - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь написать функцию в MATLAB, которая принимает 1x3 вектора в качестве входных данных. Мой код выглядит примерно так:

function myFunction=([x1, x2, x3], [y1, y2, y3], [z1, z2, z3])

, где все входные данные являются числами, а затем в теле функции я выполняю некоторые вычисления, индексируя числовые значения в векторах. я хочу, чтобы векторы вводились пользователем, поэтому пользователь будет вводить векторы и их компоненты (x1, x2 и т. д.) в аргумент функции. Однако я получаю сообщение об ошибке «Неверное выражение. При вызове функции или индексации переменной используйте скобки. В противном случае проверьте наличие несовпадающих разделителей». Поэтому я считаю, что у меня либо синтаксис, либо что-то еще не так. Я знаю, что MATLAB должен принимать векторные функции в функциях, поэтому, пожалуйста, дайте мне знать, что я делаю неправильно. Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

Что вам нужно сделать, это объявить вашу функцию следующим образом:

function myFunction(x,y,z)
% your function code here
end

Затем в вашей функции вы можете получить доступ к отдельным элементам векторов, используя x(1), y(2) и т. Д.

Чтобы вызвать функцию, включая любой номер, который вы хотите, вы можете ввести в командном окне Matlab (например) myFunction([1 2 3],[4 5 6],[7 8 9]), и код в вашей функции будет вызываться с переменной x, установленной на вектор[1,2,3], переменная y установлена ​​на [4,5,6] и z на [7,8,9]. Использование запятых для разграничения значений не является обязательным. Если ваша функция затем обращается к y(2), она получит второе значение вектора y, которое будет 5 - важно отметить, что индексирование в Matlab основано на 1, так что 1-й элемент x полученс x(1).

Если вам нужно вернуть значения, вы можете использовать:

function [a,b,c] = myFunction(x,y,z)

Затем просто присвойте a, b или c в своем коде перед оператором end.

См. Официальную документацию Matlab для получения дополнительной информации.

Я бы добавил, что большая часть преимуществ Matlab заключается в работе с данными в векторизованной форме, так что если вы можетево избежание разделения на отдельные элементы я бы так и сделал. Например, если вам нужно добавить два вектора, вы могли бы сделать z = [x(1)+y(1), x(2)+y(2), x(3)+y(3)], но гораздо лучше (более читабельно, более легко обслуживаемо, быстрее) - z=x+y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...