Using trapz function to provide answers using loop

2 vues (au cours des 30 derniers jours)
Dyl
Dyl le 28 Sep 2022
Commenté : Chunru le 28 Sep 2022
Hey,
I am trying to use the trapz function in a loop:
y_approx = zeros ([21 1]);
for i = 1:length(x)
y_approx = trapz(x(i),y)
end
It is providing me the 21 answers but they are incorrect. I think it is using the 21 y for each iteration of x. 21 y values for 1 x value, 21 y values for 2 x values etc. How do I alter the code to make it use the same number of y values as x values?

Réponse acceptée

Chunru
Chunru le 28 Sep 2022
% The way to use trapz
x= 1:20; % x
y = randn(20, 1); % y
ytrapz = trapz(x, y) % integral y dx
ytrapz = -0.0920
  4 commentaires
Dyl
Dyl le 28 Sep 2022
I need the trapz fuction as I am estimating y values using the trapezoidal method. Basically, I need a loop that does:
y2 = trapz(x(1:2),y(1:2))
y3 = trapz(x(1:3),y(1:3))
...
y19 = trapz(x(1:20),y(1:20))
y20 = trapz(x(1:21),y(1:21))
Chunru
Chunru le 28 Sep 2022
That is not really necessary since the looping code above is doing the trapz job in a more efficient way when you want the intermidiate results.
However, if you insisit, you can do the following (definitely not recommended):
x= 1:20; % x
y = randn(20, 1); % y
ytrapz = trapz(x, y) % integral y dx
ytrapz = 3.5232
yloop = zeros(size(x));
for i=2:length(x)
yloop(i) = yloop(i-1) + (y(i) + y(i-1))/2*(x(i)-x(i-1));
end
yloop([1:3 end-3:end])
ans = 1×7
0 -0.7511 -0.5029 5.0386 4.9629 4.9692 3.5232
% Not recommended:
yloop1 = zeros(size(x));
for i=2:length(x)
yloop1(i) = trapz(x(1:i), y(1:i));
end
yloop1([1:3 end-3:end])
ans = 1×7
0 -0.7511 -0.5029 5.0386 4.9629 4.9692 3.5232

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by