How can i extrapolate a logspaced vector without changing my old vector?

Hey,
Lets say i have a vector
logspace(log10(0.003),log10(0.25),30)
and i want to add 3 or 4 more elements until 0.5. like [0.2945 0.3513 0.4191 0.5000] BUT without changing my old vector elements and maintain my logharithmic scale as properly as possible like my example but more precise.
Is there an easy way to do it ?
Kind regards,
Bünyamin

댓글 수: 1

It doesnt have to stop at 0.5 , it could also stop at 0.6
Important for me is maintaining my log-scale. I want to extrapolate "exponentially".

댓글을 달려면 로그인하십시오.

 채택된 답변

Stephen23
Stephen23 2017년 4월 5일
편집: Stephen23 2017년 4월 5일
I used 8 samples to make the values easier to understand:
>> V = logspace(log10(0.003),log10(0.25),8); % data vector
V =
0.0030000 0.0056432 0.0106152 0.0199678 0.0375606 0.0706537 0.1329038 0.2500000
>> L = log10(V);
>> N = L(end):mean(diff(L)):log10(0.5);
>> Z = [V,10.^N(2:end)] % new vector, extended up to 0.5, same log-scale
Z =
0.0030000 0.0056432 0.0106152 0.0199678 0.0375606 0.0706537 0.1329038 0.2500000 0.4702650
and checking that the log-scale is the same for the new values as the original values:
>> diff(log10(Z))
ans =
0.27440 0.27440 0.27440 0.27440 0.27440 0.27440 0.27440 0.27440

댓글 수: 4

exactly what i was looking for.
thank you very much !
@Stephen23, may I ask about a modified version of this problem?
Suppose we have a 1 dimensional array named A, with a length of say, 100, such that A(50:57)= V.
A = zeros(1,100);
V = logspace(log10(0.003),log10(0.25),8);
A(50:57)= V;
Would it be possible to use a similar method to fill in the rest of the array (in this case, the elements which are equal to 0) with the extrapolated values of the same log distribution of the V values?
@Aristarchos Mavridis: you could use various approaches, such as COLON (as in my answer) or INTERP1:
format short G
A = zeros(1,100);
A(50:57) = logspace(log10(0.003),log10(0.25),8)
A = 1×100
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X = find(A);
B = 10.^interp1(X,log10(A(X)),1:numel(A),'linear','extrap')
B = 1×100
1.0e+00 * 1.075e-16 2.0221e-16 3.8036e-16 7.1548e-16 1.3459e-15 2.5316e-15 4.7622e-15 8.958e-15 1.685e-14 3.1697e-14 5.9623e-14 1.1216e-13 2.1097e-13 3.9685e-13 7.465e-13 1.4042e-12 2.6414e-12 4.9686e-12 9.3463e-12 1.7581e-11 3.3071e-11 6.2208e-11 1.1702e-10 2.2012e-10 4.1405e-10 7.7886e-10 1.4651e-09 2.7559e-09 5.184e-09 9.7514e-09
Comparing:
A(X)
ans = 1×8
0.003 0.0056432 0.010615 0.019968 0.037561 0.070654 0.1329 0.25
B(X)
ans = 1×8
0.003 0.0056432 0.010615 0.019968 0.037561 0.070654 0.1329 0.25
semilogy([B;A].','-*')
@Stephen23 Excellent, much better than anything I could come up with. Thank you so much!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

V_main = logspace(log10(0.003),log10(0.25),30);
V_add = logspace(log10(.25),log10(0.5),5);
V_out = [V_main,V_add(2:end)];

댓글 수: 1

thanks Andrei, However, i cant mantain my log-scale. It doesnt have to stop at 0.5 , it could also stop at 0.6
Important for me is maintaining my log-scale

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by