Что не так
Вы хотите использовать ./
деление массива, а не /
матричное деление.
Как отладить это
Во-первых, немного пробеловздесь, так что легче читать.И добавьте точки с запятой, чтобы подавить этот большой вывод.
x = linspace(0, 1, 101);
y = (x.*2.2*(10^-4)) / ( ( x.+6.25*(10^-2)) * (x.+2.2*(10^-2)) );
plot(x, y)
Затем вставьте его в функцию для упрощения отладки:
function my_plot_of_whatever
x = linspace(0, 1, 101);
y = (x.*2.2*(10^-4)) / ( ( x.+6.25*(10^-2)) * (x.+2.2*(10^-2)) );
plot(x, y)
Теперь попробуйте:
>> my_plot_of_whatever
error: my_plot_of_whatever: operator *: nonconformant arguments (op1 is 1x101, op2 is 1x101)
error: called from
my_plot_of_whatever at line 3 column 3
Когда вы получаете такую жалобу о *
или /
, это обычно означает, что вы выполняете матричные операции, когда вам действительно нужны поэлементные операции с «массивом» .*
и ./
.Исправьте это и попробуйте снова:
>> my_plot_of_whatever
>>
Так что здесь происходит?Давайте использовать отладчик!
>> dbstop in my_plot_of_whatever at 4
ans = 4
>> my_plot_of_whatever
stopped in /Users/janke/Documents/octave/my_plot_of_whatever.m at line 4
4: plot(x, y)
debug> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
x 1x101 808 double
y 1x1 8 double
Ага.Ваш y
является скалярным, поэтому он использует одно и то же значение Y для каждого значения X.Это потому, что вы используете /
матричное деление, когда вы действительно хотите ./
матричное деление.Исправьте это:
function my_plot_of_whatever
x = linspace(0, 1, 101);
y = (x.*2.2*(10^-4)) ./ ( ( x.+6.25*(10^-2)) .* (x.+2.2*(10^-2)) );
plot(x, y)
Бинго.