[Scilab-users] Numderivative and integrate

Hermes herozigle at gmail.com
Fri Dec 15 11:37:24 CET 2017


He,
here I put a solution for differentiation
  in your case we obtain The duration for Numederivative = 1.18248
and for this other: The duration for Numederivative = 0.00125101
the FourMatDiff function could be improved.
Is there any function in Scilab to create band Matrices?

//http://mailinglists.scilab.org/Scilab-users-Numderivative-and-integrate-td4037333.html
mode(0)
 
clear
 
//PATH = get_absolute_file_path("test_signal.sce");
 
// here we generate a sin signal just for testing
Gamma_ampl = 10; // in [g]
Frequency = 100; // in [Hz]
Omega = 2 * %pi * Frequency;
Number_of_periods = 10;
 
t = [0 : (1/(20 * Frequency)) : (Number_of_periods / Frequency)];
Acceleration = Gamma_ampl *sin(Omega * t);
Signal = [t ; Acceleration];
 
scf()
plot(t,Acceleration,'g');
xtitle('Ref curve - accelerogram','t','$\gamma \mbox{[m/s$^{2}$]}$');
xs2png(gcf(),'Accelerogram.png');
 
// signal first derivation : y' = (Omega * Gamma_ampl)*cos(Omega * t)
Acceleration_prime = (Omega * Gamma_ampl) * cos(Omega * t);
 
// calculation of the jerk -> numerical derivative
function y=Gamma_function(x)
    y = interpln(Signal,x)
endfunction
 
n = size(t,'*');
Numl_Gamma_derrivative = zeros(2,n);
Numl_Gamma_derrivative(1,:) = t;

Y=Gamma_function(Numl_Gamma_derrivative(1,:));
//
function M2=FourMatDiff2(n)
 for j=1:n
    for i=1:n
    //M(i,j) = 0; // main diagonal
    if pmodulo(i-j,n)==1 then
        M2(i,j)=-2/3
          elseif pmodulo(i-j,n)==2 then
        M2(i,j)=1/12
          elseif pmodulo(i-j,n)==n-1 then
        M2(i,j)=2/3
          elseif pmodulo(i-j,n)==n-2 then
        M2(i,j)=-1/12
          elseif i-j==0 then 
        M2(i,j)=0
        end
    end
end
//disp( full(M2) );   
endfunction;
N=n;
block=8;
sel=4;
h= t(3)-t(2);
X=0:h:N;
MD=FourMatDiff2(block);
tic();
//for i = 1 : n
//   Numl_Gamma_derrivative(2,i) = numderivative(Gamma_function,
Numl_Gamma_derrivative(1,i),1e-3,order=4);
//end
for i=1:N-block+1
 yd2($+1)=[MD/h*Y(i:i+block-1)'](sel);
end


Numederivative_duration = toc();
 
scf()
plot(Numl_Gamma_derrivative(1,4:197)',yd2,'b');
plot(t,Acceleration_prime,'ro');
xtitle('Jerk - numerical derivation vs derivative formula','t','$\mbox{J
[m/s}^{3}\mbox{]}$');
legend('Numerical','Reference',opt=1); 
xs2png(gcf(),'Jerk.png');

// information's
printf("The duration for Numederivative = %g\n",Numederivative_duration);

Gracias



--
Sent from: http://mailinglists.scilab.org/Scilab-users-Mailing-Lists-Archives-f2602246.html



More information about the users mailing list