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".

请先登录,再进行评论。

 采纳的回答

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 中查找有关 Creating and Concatenating Matrices 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by