Matlab function for cumulative power

3 visualizzazioni (ultimi 30 giorni)
Herr K
Herr K il 24 Mar 2020
Commentato: Herr K il 24 Mar 2020
Is there a function in MATLAB that generates the following matrix for a given scalar r, where each row behaves somewhat like a power analog of the CUMSUM function?:
1 r r^2 r^3 ... r^n
0 1 r r^2 ... r^(n-1)
0 0 1 r ... r^(n-2)
...
0 0 0 0 ... 1
  1 Commento
Rik
Rik il 24 Mar 2020
I doubt there is a direct function. Have you tried writing one yourself?

Accedi per commentare.

Risposta accettata

Birdman
Birdman il 24 Mar 2020
Try the following code. By changing r and n values, you can see the corresponding results.
r=9;n=4;
A=zeros(n+1,n+1);
for i=1:size(A,1)
for j=1:size(A,2)
if (j-i)<0
A(i,j)=0;
else
A(i,j)=r^(j-i);
end
end
end
A

Più risposte (1)

Rik
Rik il 24 Mar 2020
Modificato: Rik il 24 Mar 2020
This code does what you ask without loops.
%define inputs
r=9;
n=4;
[a,b]=meshgrid(0:n);
exponents=a-b;
exponents(exponents<0)=NaN;
result=r.^exponents;
result(isnan(result))=0;
  5 Commenti
Rik
Rik il 24 Mar 2020
This is actually a nice illustration of the fact that a non-loop version isn't always faster. In this case (at least on my computer with Windows 10 and R2019a) the looped version is faster up to about n=30. For huge values of n there may very well be a tangible benefit (or if this code is going to be run very often).
clc,clear
r=9;
n_list=[1:100 200:100:1000];
t=zeros(2,numel(n_list));
for it=1:size(t,2)
n=n_list(it);
t(1,it)=timeit(@() option_loop(r,n));
t(2,it)=timeit(@() option_grid(r,n));
end
figure(1),clf(1)
plot(n_list,t(1,:),n_list,t(2,:))
legend({'loop','grid'})
xlabel('n'),ylabel('time')
Herr K
Herr K il 24 Mar 2020
Thanks for your answer. Now I learn the meshgrid function as well!

Accedi per commentare.

Categorie

Scopri di più su Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by