Azzera filtri
Azzera filtri

A Problem with log10

12 visualizzazioni (ultimi 30 giorni)
Alina
Alina il 18 Dic 2014
Modificato: Stephen23 il 19 Dic 2014
Dear all
I just began to work w Matlab. I have an array with decimal numbers and zeros from which I have to calculate log10 and write a new array, but it doesn't work. When i run this i got error "Attempted to access log10(0.946491); index must be a positive integer or logical." code is as follows
log10=zeros(2030,1354);
for j=1:1354
for i=1:2030
log10(i,j)=R547(i,j)/R531(i,j);
end
end
log10(isnan(log10)) = 0 ; %my array
>> for j=1:1354
for i=1:2030
if log10(i,j)~=0
X(i,j)=log10(double(log10(i,j)));
end
end
end
Anyone please help me
Thank you
  1 Commento
Stephen23
Stephen23 il 19 Dic 2014
Modificato: Stephen23 il 19 Dic 2014
This is the danger of overwriting inbuilt function names with your own functions or variables. Some common ones that should be avoided:
  • log
  • i, j
  • plot
  • sum
  • input
  • size, length, etc.

Accedi per commentare.

Risposta accettata

Thorsten
Thorsten il 18 Dic 2014
You overwrite Matlabs log10 function with your log10 matrix; rename it and everything should work fine.
  5 Commenti
Thorsten
Thorsten il 18 Dic 2014
Use
X = real(X);
Alina
Alina il 18 Dic 2014
Thank you!

Accedi per commentare.

Più risposte (2)

Azzi Abdelmalek
Azzi Abdelmalek il 18 Dic 2014
Try this
clear log10
U=zeros(2030,1354);
for j=1:1354
for i=1:2030
U(i,j)=R547(i,j)/R531(i,j);
end
end
U(isnan(U)) = 0 ;
for j=1:1354
for i=1:2030
if U(i,j)~=0
X(i,j)=log10(double(U(i,j)));
end
end
end

Star Strider
Star Strider il 18 Dic 2014
Your code can be reduced to this:
R547 = randi(50,10,15); % Created Data
R531 = randi(50,10,15); % Created Data
Log_10 = double(R547./R531); % Do Element-Wise Division
Log_10(1:5:end,1:5:end) = NaN; % Created Data (Insert NaN)
X = log10(Log_10); % Take Logs
X(isnan(X)) = 0; % Set ‘NaN’ Values To Zero
First, please never name your variables the same as built-in MATLAB functions, such as log10. MATLAB will take the most recent definition (as it did in your code) and treat it as a variable rather than a function. I renamed your ‘log10’ array ‘Log_10’ to be sure that you do not ‘overshadow’ the log10 function.
Second, if you need to do element-wise operations, use the dot operators, for instance instead of (/), use (./), (*), use (.*) and (^), use (.^).
Third, the log10 of NaN is NaN, so you only need to test for it and replace it after you do everything else.
  2 Commenti
Alina
Alina il 18 Dic 2014
Thank you. Now I know it.
Star Strider
Star Strider il 18 Dic 2014
My pleasure!

Accedi per commentare.

Categorie

Scopri di più su Exponents and Logarithms in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by