Error while using a function.I need parentheses in the function header but it wont allow me to do it.
    8 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
N_freq = length(fs)
Av_k = zeros(N_freq,N_Stages);
for kk =1:N_Stages;
    [Av_k2,] = EE_TF(fs,G1(kk),G2(kk), G3(kk),C1(kk),C2(kk));
    Av_k(:,kk)= Av_kk;
end
%Total Gain
Av_k_dB = 20*log(Av_k);
Av_db = sum(Av_k_dB);
%------------------------------------------------------------------------------------------------------
function [Av_k2] = EE_TF(fs,G1(k2);G2(k2), G3(k2),C1(k2),C2(k2));
%-----------------------------------------------
A0=-G1*G3
B2=C1*C2;
B1=(G1+G2+G3)*C2;
B0=(G2*G3);
A0=-G1*G3
B2=C1*C2;
B1=(G1+G2+G3)*C2;
B0=(G2*G3);
Av_k2= A0/(B2.^2+B1 + B0);
1 comentario
  Tommy
      
 el 21 de Abr. de 2020
				G1(k2), for example, is not a valid variable name:
>> isvarname('G1(k2)')
ans =
  logical
   0
but when you define a function with
function [Av_k2] = EE_TF(fs,G1(k2),G2(k2), G3(k2),C1(k2),C2(k2))
...
end
you are saying that the second argument supplied to the function will be named G1(k2) within the function, so MATLAB isn't happy. You don't need the indices in the function header because you supply them when you call the function. Try this for the header:
function [Av_k2] = EE_TF(fs,G1,G2, G3,C1,C2)
...
end
Respuestas (2)
  dpb
      
      
 el 21 de Abr. de 2020
        
      Editada: dpb
      
      
 el 21 de Abr. de 2020
  
      No, don't need any parens (and remove the semicolon, too) in the function dummy argument list, those are surrogate names for the actual arguments passed.
function [Av_k2] = EE_TF(fs,G1,G2,G3,C1,C2);
  ...
does exactly what you want...when you call it with
 EE_TF(fs,G1(kk),G2(kk),G3(kk),C1(kk),C2(kk));
inside the function each Gn is the value passed, NOT the array Gn in the main program...it's a whole new variable with scope only within the function.
However, the power in MATLAB is to vectorize your functions so you can call them without the loop construct in the main program...
To do that, use the "dot" operators--in your case that's all that looks like is needed--
function [Av_db, Avk_dB] = EE_TF(fs,G1,G2,G3,C1,C2);
  A0=-G1.*G3
  B2= C1.*C2;
  B1=(G1+G2+G3).*C2;
  B0= G2.*G3;
  A0=-G1.*G3;
  B2= C1.*C2;
  B1=(G1+G2+G3).*C2;
  B0=(G2.*G3);
  Av_k2= A0./(B2.^ +B1+B0);
  %Total Gain
  Avk_dB = 20*log(Av_k);
  Av_db = sum(Av_k_dB);
end
I went ahead a moved the dB and total gain into the function as well--and returned the stage raw gains as an optional second output if they're wanted/needed as well.
Shouldn't log be log10, though?
0 comentarios
  BALAJI KARTHEEK
      
 el 21 de Abr. de 2020
        the is no need of kk, just modify the function as given below and try your luck
function [Av_k2] = EE_TF(fs,G1;G2,G3,C1,C2);
%-----------------------------------------------
A0=-G1*G3
B2=C1*C2;
B1=(G1+G2+G3)*C2;
B0=(G2*G3);
A0=-G1*G3
B2=C1*C2;
B1=(G1+G2+G3)*C2;
B0=(G2*G3);
1 comentario
  Steven Lord
    
      
 el 21 de Abr. de 2020
				Three comments, two of which are stylistic and one is significant.
function [Av_k2] = EE_TF(fs,G1;G2,G3,C1,C2);
When you have just one output argument, it is not necessary to wrap it in square brackets. The following would work the same way.
function Av_k2 = EE_TF(fs,G1;G2,G3,C1,C2);
Similarly, you don't need to end the function definition with a semicolon.
function Av_k2 = EE_TF(fs,G1;G2,G3,C1,C2)
Finally, and most important, input arguments in a function definition must be separated by commas, not semicolons. The previous two points may cause Code Analyzer (or people performing a code review on your function0 to complain but will still allow your function to run; unless you fix this, you won't be able to run your function.
function Av_k2 = EE_TF(fs,G1,G2,G3,C1,C2)
There's a fourth comment, that you never assign a value to Av_k2 in this code, but since you said "modify the function" I'm assuming you're leaving implementing that part of the code as an exercise to the reader.
Ver también
Categorías
				Más información sobre Large Files and Big Data en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




