2016-08-16 2 views
1

Если я хочу нарисовать sin(x) график, используя октаву, я быPlotting ошибка «память исчерпана или запрашиваться слишком большой размер»

x = -6:0.1:6; 
plot (x, sin(x)); 

и это работает.

Я хотел нарисовать функцию сигмовидной поэтому я попытался

x = -6:0.1:6; 
plot (x, 1/(1+exp(-x))); 

Но это дает мне

error: memory exhausted or requested size too large for range of Octave's index type -- trying to return to prompt 

Я попытался с x = -4:0.2:4; и на этот раз получил

error: invalid conversion of NDArray to Matrix 
error: evaluating argument list element number 2 

Что такое проблема?

+0

Try 'plot (x, 1 ./ (1 + exp (-x)));' –

+0

Хмм. оно работает. В чем смысл? используя реальное число 1 (1.)? О, теперь я вижу элемент мудрого разделения. –

ответ

1

Проблема в 1/(1+exp(-x)). Ошибка MATLAB бросает это:

Error using/
Matrix dimensions must agree. 

Согласно Carandraug's comment Октав терпит неудачу с:

operator /: nonconformant arguments (op1 is 1x1, op2 is 1x121) 

Что вы хотите elementwise division (обратите внимание на точку):

x = -6:0.1:6; 
plot (x, 1./(1+exp(-x))); 

enter image description here

+0

Я вижу, что элемент мудрый оператор точки нужен только тогда, когда может быть путаница. (например, деление, умножение, ..). Благодарю. –

+1

@ChanKim '+', 'exp',' sin' и т. Д. Уже выполняются элементально (проверьте их документацию). '/' и '*', однако, действуют как * матричные операторы *, поэтому вы должны явно сказать, что нужно идти по элементам, т. е. поставить перед ними точку. – Adriaan

+2

Фактически, Octave также не работает на этой операции с 'operator /: несоответствующие аргументы (op1 равно 1x1, op2 равно 1x121)' и не транслируется. Вероятно, ошибка OP происходит откуда-то еще и не может быть воспроизведена с его кодом в Octave (я пробовал Octave 3.8, 4.0 и unreleased 4.1). – carandraug

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