Попытка создать массив точек для построения графика.Как вы добавляете больше точек в массив? - PullRequest
0 голосов
/ 02 апреля 2019

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

for index = 1:N
        x = [lines(index)-.5*dx(index), lines(index)-.5*dx(index), lines(index+1)-.5*dx(index), lines(index+1)-.5*dx(index)];
        y = [0 f(index) f(index) 0];
        ****points = [x;y] + points;

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

Ошибка при использовании + Размеры матрицы должны совпадать.

Ошибка в средней точке (строка 13) очки = [х; у] + очки;

1 Ответ

0 голосов
/ 03 апреля 2019

Более чистые и короткие без петель:

clear

%% setup
f=@(x) sin(x)+x.^2; %function
x0=-pi; x1=pi; %range
N=20; %num of mid points

%% calculations
xs=linspace(x0,x1,N+1); %rectangles xs
xm=(xs(1:end-1)+xs(2:end))/2; %N mid points
ym=f(xm); %value at midpoint
midpoint_area=sum(ym)*(x1-x0)/N;

%% print results
trapezoid_area=trapz(xm,ym); %compare to trapezoid matlab function
fprintf('midpoint_area=%.2f, trapezoid_area=%.2f\n',midpoint_area,trapezoid_area)

%% plots
figure(1); cla; 
fplot(f,[x0,x1]); 
hold on;
xrects=[xs(1),repelem(xs(2:end-1),2),xs(end)] ; %for ploting. each xs used for 2 mid points values
yrects=repelem(ym,2);
stem(xrects,yrects,'Color','black','Marker','none') %plot rectangles
plot(xrects,yrects,'Color','black') %plot rectangles
if N<40
    plot(xm,ym,'Og') %midpoint
    text(xm,ym,strcat('\leftarrow',sprintfc('[%.1f',xm),sprintfc(',%.1f] ',ym)))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...