Octave не отображает функцию - PullRequest
1 голос
/ 12 апреля 2019

Я готовлю график поведения связывающего белка.

x = linspace(0,1,101)
y = ( x.*2.2*(10^-4))/(( x.+6.25*(10^-2))*(x.+2.2*(10^-2)))
plot(x,y)

Должен привести к кривой колокола (возможно) или кривой, но я получаю линейный график.Я проверил с другим программным обеспечением и полученной кривой эту функцию.Любая помощь, пожалуйста?

1 Ответ

1 голос
/ 20 апреля 2019

Что не так

Вы хотите использовать ./ деление массива, а не / матричное деление.

Как отладить это

Во-первых, немного пробеловздесь, так что легче читать.И добавьте точки с запятой, чтобы подавить этот большой вывод.

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
>>

bad linear plot

Так что здесь происходит?Давайте использовать отладчик!

>> 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)

Бинго.

enter image description here

...