Как мне построить график вывода уравнения в Matlab? - PullRequest
1 голос
/ 06 сентября 2011

В Matlab у меня есть функция:

функция [Результат] = Calc_Result (A, B, C, D)

Как мне построить график вывода этой функции для значений от A = 0,00 до A = 1,00 с шагом 0,01? Переменные B, C, D являются константами.

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

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Как строго сказано 27, если ваша функция может иметь дело с векторизацией, вы можете просто использовать

x=0:0.01:1;
y=Calc_Result(A, B, C, D);
plot(x,y,'.-');

Если нет, вы можете использовать arrayfun, чтобы избежать цикла:

x=0:0.01:1;
y=arrayfun(@(A) Calc_Result(A, B, C, D),x);
plot(x,y,'.-');

plot по умолчанию изящно обрабатывает NaN (он не отображает их и не ломает линию, которую рисует при каждом NaN).

3 голосов
/ 06 сентября 2011
fplot(@(A) Calc_Result(A, B, C, D), [0 1]);

fplot немедленно наносит Calc_Result на интервал [0 1]. fplot не отображает NaN значений. Обратите внимание, что в этом коде не указано, что вы хотите построить 100 точек между 0 и 1 (то есть, построить с шагом 0,01); fplot не заботится об этом.

Если вам нужны эти данные в дополнение к графику, вы всегда можете сначала сгенерировать их, а затем построить данные позже. Если функция еще не создана для работы с матричными входами, вы можете сделать это:

xvals = [];
yvals = [];
for A = 0:0.01:1
    y = Calc_Result(A, B, C, D);
    if ~ isnan(y)
        yvals = [yvals y];
        xvals = [xvals A];
    end
end
plot(xvals, yvals);

Если построен для работы с матричными входами (т. Е. У вас есть . в нужных местах для выполнения поэлементного умножения и деления), вы можете просто сделать что-то вроде

A = 0:0.01:1;
y = Calc_Result(A, B, C, D);

Не зная, когда он возвращает значения NaN, я думаю, что вам лучше всего пойти на цикл for. Это может быть немного медленнее, чем при использовании матричных входов, но при расчете только 100 значений я не думаю, что это имеет большое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...