2016-04-06 5 views
0

Мне было интересно, знал ли кто-нибудь, как я мог бы окрасить область под кривой для кода ниже. Я попытался использовать area(Mu), однако это возвращает затененную область, немного отличающуюся от графика.Раскраска Ограниченная область под кривой Matlab

n=1; 
a=[0:0.001:4]; 
A=(a.*n); 
B=(n-n.*a); 
C=(1-n); 
Mu=(-B+sqrt((B.^2)-(4.*A.*C)))./(2.*A); 
plot(a,Mu) 
xlim([0 4]) 
ylim([0 .8]) 
+0

Это прямолинейно ... Просто замените 'plot' на' area', который даст вам строку 'area (a, Mu)'. Это можно найти в [документации] (http://ch.mathworks.com/help/matlab/ref/area.html) следующим образом: «*' area (X, Y) 'Для векторов' X' и ' Y', 'area (X, Y)' совпадает с «plot (X, Y)», за исключением того, что заполняется область между '0' и' Y'. * – Matt

+0

@Matt удаление вызова «plot» не правильный общий ответ, если пользователь хочет сделать что-то «особенное» с границей. ОП попытался «область», поэтому не похоже, что она не знает, что функция существует ... – excaza

+0

@excaza Конечно, если OP нужен «сюжет», ей нужно вызвать «область» после «удержания» или сначала постройте участок, а затем линию. Она попробовала 'area (Mu)', но не 'area (a, Mu)' ... Вот почему я использовал слово * replace *, чтобы подчеркнуть, что аргументы точно такие же. Это также соответствует цитате. – Matt

ответ

4

Вы почти у цели. area(Mu) использует значение по умолчанию, которое в этом случае фактически выполняет area([1:length(Mu)],Mu). Это дает вам нежелательный результат, в то время как area(a,Mu) совпадает с plot(a,Mu), за исключением того, что область между 0 и Mu заполнена.

Использование area(a,Mu). Затем нарисуйте свою линию поверх области или просто измените край области. См. Пример ниже:

n=1; 
a=[0:0.001:4]; 
A=(a.*n); 
B=(n-n.*a); 
C=(1-n); 
Mu=(-B+sqrt((B.^2)-(4.*A.*C)))./(2.*A); 
area(a,Mu) 
hold on 
xlim([0 4]) 
ylim([0 .8]) 
plot(a,Mu) 
+0

Я просто понял, что это почти то, что вы пробовали: P В любом случае, это должно сработать, и хорошо, если бы ответ был опубликован, если другие пользователи будут смотреть на ту же проблему в будущем. Пожалуйста, примите ответ и повысьте, если это то, что вы искали. Позвольте мне знать, если вам нужно что-нибудь еще. – JCKaz

+1

hmmm, возможно, захотите добавить 'hold on' туда? – GameOfThrows

+0

Если вы хотите, чтобы этот ответ был полезным для других пользователей, я предлагаю вам объяснить, как ваш код отличается и * почему * вы внесли изменения, а не копируете + вставляете блок кода без контекста. – excaza

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