2015-10-07 4 views
-1

Мне интересно построить в Matlab следующую функцию, но без успешной работы.Построение функции в Matlab

enter image description here

не удается построить точки.

x = -1:0.1:3; 
if (x<=1) 
    y = x*x-x+1 
    plot(x,y) 
else 
    y = 2*x+3 
    plot(x,y) 
end 
+0

Посмотрите [здесь] (http://math.stackexchange.com/questions/533221/piecewise-function-plot-in-matlab) некоторые советы. –

+1

Что должно быть f (x = 1) равным? – brodoll

+0

Вы используете оператор 'if' в сочетании с вектором. Чего вы ожидаете? – rayryeng

ответ

3

if заявления вы определяете принимает условие для всего массива, что означает всех записи должны придерживаться инструкций. Поскольку только первые 21 придерживаются поставленного условия, оператор if отправляется в else и отображает прямую линию.

Ваше уравнение для первой строки неверно, так как x*x приводит к ошибке, так как MATLAB предполагает, что это матричное умножение, а размеры неверны для этого. Причина, по которой вы не видите эту ошибку, связана с оператором if, поскольку, как объяснялось выше, никогда не достигает этой строки. Вы должны изменить это уравнение, используя умножение точек, которое делает вещи по-разному, в отличие от массива/матрицы.

Уравнение для второй строки является правильным.

Если ваш оператор if/else будет правильным, ваш первый сюжет будет перезаписан вторым, так как вы не указали переключатель hold on на фигуры.

В качестве примечания я также использовал точку с запятой ; после каждого утверждения, что не позволяет распечатать вывод строки на консоль.

x1 = [-1:0.01:1].'; 
x2 = [1:0.01:3].'; 
y1 = x1.^2-x1+1; 
y2 = 2*x2+3; 

figure; 
hold on 
plot(x1,y1) 
plot(x2,y2) 

plot

+0

'else' в исходном коде вызывает серьезное горе, я бы не сказал, что он правильный, за исключением' hold on'. –

+0

И «вы переписали свой участок первой части со вторым битом», определенно не относится к коду в вопросе. –

+0

@BenVoigt благодарит за это. Я ответил на оба вопроса в ответе. – Adriaan

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