Векторизация в Matlab, непонятная разница в синтаксисе, вызывающая сбой
Я не понимаю, почему в приведенном ниже примере только x1 превращается в массив из 1000 столбцов, а y - одно число.
x = [0:1:999];
y = (7.5*(x))/(18000+(x));
x1 = exp(-((x)*8)/333);
Любые разъяснения будут высоко оценены!
3 ответа
Почему x1
1x1000
?
Как указано в документации,
exp(X)
возвращает экспонентуeˣ
для каждого элемента в массивеX
,
поскольку x
является 1x1000
, так -(x*8)/333
является 1x1000
и когда exp()
применяется к нему, вычисляются экспоненты всех 1000 элементов и, следовательно, x1
это также 1x1000
, В качестве примера,exp([1 2 3])
такой же как[exp(1) exp(2) exp(3)]
,
Почемуy
один номер?
Как указано в документации,
Если
A
это прямоугольникm
-от-n
матрица сm~= n
, а такжеB
это матрица сn
столбцы, тоx = B/A
возвращает решение системы уравнений наименьших квадратовx*A = B
,
В твоем случае, A
является 18000+x
а также size(18000+x)
является1x1000
т.е. m=1
а также n=1000
, а также m~=n
а такжеB
является 7.5*x
у которого естьn=1000
колонны.
⇒(7.5*x)/(18000+x)
возвращает вам решение уравнений методом наименьших квадратовx*(18000+x) = 7.5*x
,
Заключительные замечания:
x = [0:1:999];
Скобки здесь не нужны, и лучше использовать их так:x=0:1:999 ;
Кажется, что вы хотите сделать поэтапное деление для вычислений
x1
для чего вы должны использовать./
Оператор, как это:y=(7.5*x)./(18000+x); %Also removed unnecessary brackets
Также обратите внимание, что сложение всегда поэлементно. .+
не является допустимым синтаксисом MATLAB (хотя он работает в Octave). Смотрите действительные арифметические операторы массива и матрицы в MATLAB здесь.
3. x1
также есть некоторые ненужные скобки.
На этот вопрос уже ответили другие люди. Я просто хочу указать на небольшую вещь. Вам не нужно писать x = 0:1:999
, Лучше написано как x = 0:999
в качестве значения приращения по умолчанию для MATLAB или Octave используется значение 1.
Попробуйте явно указать, что вы хотите выполнять поэлементные операции, а не матричные операции:
y = (7.5.*(x))./(18000+(x));
В общем, .*
выполняет поэлементное умножение, ./
поэтапное деление и т. д. [1 2] .* [3 4]
доходность [3 8]
, Отсутствие точек приведет к тому, что Matlab будет использовать матричные операции всякий раз, когда сможет найти разумную интерпретацию ваших входных данных как матриц.