2016-07-17 6 views
3

Я хочу рассчитать площадь между оранжевой и синей линией. Мне удалось затенять область. Но я не знаю, как применить функцию trapz, чтобы получить область. В этом посте: Area under surface between two curves У меня есть некоторые решения, но у меня нет конкретного уравнения для кривых как раз сами по себе.Площадь между линией и кривой (нет функции)

Код для оранжевой линии:

x_1 = [0,M1_1]; 
y_1 = [c1,c1]; 
v = plot(x_1,y_1,'LineWidth',2) 

Синяя кривая представляет собой график массивов с длиной (10000x1) -abscissa и (1x10000) -ordinate.

Если я использую

%c0_1: Intersection blue curve with y-axis 
%c1_1: Intersection orange curve with y-axis 
A = trapz(ab1(0:c1_1),ab_y1(c1_1:c0_1)) 

Я получаю следующее сообщение об ошибке:

Warning: Integer operands are required for colon operator when used as index Warning: Integer operands are required for colon operator when used as index Error using trapz (line 58) LENGTH(X) must equal the length of Y in dim 2.

Как я могу применить свою trapz функцию легко на моей проблеме?

enter image description here

+2

Возможный дубликат [Площадь под поверхности между двумя кривыми] (HTTP://stackoverflow.com/questions/38409981/area-under-surface-between-two-curves) – Matt

+0

Да, я изменил сюжет, чтобы лучше понять мою проблему. Если я изменю старый вопрос, люди увидят его? – MatlabNewb

+0

Да, люди могут видеть это, потому что это затронет вопрос в верхней части * активного * списка на главной странице. См. [This] (http://meta.stackoverflow.com/questions/313528/does-the-question-will-be-bumped-to-top-of-queue-when-it-get-edited) Мета-сообщение и [this] (http://stackoverflow.com/help/privileges/edit) в [help], где написано: «* Редактирование сообщения также сталкивается с вопросом в верхней части главной страницы. [...] * ». Обратите внимание, что задание одного и того же вопроса дважды обескураживается и в основном плохо воспринимается сообществом. – Matt

ответ

1

Вот ответ, хотя я не уверен, что разница между ситуацией здесь и here, и поэтому я не уверен, что truelly отвечает на ваш вопрос ...

Во всяком случае, вам не нужно явно знать функцию y1, просто чтобы иметь свою «серию данных».

x = 0:0.1:12;  % x data 
y1 = 3*exp(-0.5*x); % y data 
y2 = 0.5; 
lineStart = find(x>=0,1); 
lineEnd = find(y1<=y2,1); 
f = plot(x,y1,'b',x,ones(1,length(x))*y2,'r','LineWidth',2); 
ylim([0 4]) 
hold on 
area(x(lineStart:lineEnd),y1(lineStart:lineEnd), y2,... 
    'EdgeColor', 'none', 'FaceColor', [0.5 0.5 1],'ShowBaseLine','off') 
hold off 
A = trapz(x(lineStart:lineEnd),y1(lineStart:lineEnd)); 

Я добавил также иллюстрации интегрированной области: Integrating between y1 and y2

сказать мне, что решает проблему;)

+0

Спасибо вам большое! Я видел, что мне не удалось правильно настроить условия пересечения! Теперь это очень очевидно, особенно благодаря вашему коду! Очень дорогой помощник! :) – MatlabNewb

+0

У какого подразделения есть этот район? – MatlabNewb

+1

Единицы вашей оси 'y', так как вы интегрируете более' x'. – EBH

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