В октаве ошибка: для x ^ A, A должна быть квадратной матрицей.Используйте. ^ Для поэлементной власти - PullRequest
0 голосов
/ 31 января 2019

В Octave я определил функцию в отдельном файле square.m

function y = square(x)
y = x^2;
endfunction

В другом файле script.m у меня есть

disp("Hello World 2");
fplot( @(x) square(x),[-1 1])

И я получаю ошибку: для x ^A, A должна быть квадратной матрицей.Используйте. ^ Для поэлементной мощности.

Также, если я попытаюсь

y = x.^2; 

внутри функции, я получу точно такое же сообщение

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Причина, по которой вы получаете эту ошибку, заключается в том, что fplot передает заданный диапазон сразу как вектор, обрабатывает вашу функцию как векторизованную функцию, ожидает входной вектор и возвращает векторный выход.

Вы можете подтвердить это, установив для параметра «отладка при ошибке» значение true, выполнив debug_on_error(true), запустив ошибочную строку и проверив x.

Следовательно, внутри вашей функции все идет не так,потому что вы пытаетесь получить квадрат вектора, что является недопустимой операцией (математически говоря).

Преобразование вашей функции в y = x.^2 должно работать в этом случае, потому что вы будете преобразовывать каждый элемент вектора в его квадрат, что вам и нужно.Но очевидно, что простое изменение ^ на .^ может не сработать для каждой проблемы.

В общем, лучше создавать собственные «диапазоны» и «выходы» и наносить их на график напрямую, используя plot;это дает вам гораздо больше контроля, и вы можете сначала проверить входы и выходы, чтобы убедиться, что вы выводите на экран то, что, как вы думаете, вы делаете.

0 голосов
/ 31 января 2019

Добро пожаловать в StackOverflow!

Я только что попробовал ваш код на https://octave -online.net / (не нужно создавать учетную запись или даже файлы).

Вторая версия работает "как положено": y = x .^ 2; внутри функции.

Убедитесь, что вы сохранили файл после модификации?

...