为什么使用余弦函数计算比使用正割触发函数快得多?

时间:2015-02-26 14:01:59

标签: matlab octave trigonometry

为什么使用余弦函数计算比使用正割触发函数快得多? 有没有办法加快割线功能?

使用余弦和割线三角函数计算时,所需的时间差异很大。

Cosine = finally Done-elapsed time -36.7544sec- or -0.6126mins- or -0.0102hours- 
Secant = finally Done-elapsed time -43.2231sec- or -0.7204mins- or -0.0120hours-

我用来测试的代码如下。我只是在割线或余弦线上测试我想要的速度。

clear all, clc,tic

num_of_values=60000; %number of values to use
a1_dataset =linspace(0,10000,num_of_values)';% 
a1_idx = randi (numel (a1_dataset), num_of_values, 1);
a1=a1_dataset (a1_idx);

a2_dataset =linspace(0,.8,num_of_values)';% 
a2_idx = randi (numel (a2_dataset), num_of_values, 1);
a2=a2_dataset (a2_idx);

a3_dataset =linspace(-360,360,num_of_values)';% 
a3_idx = randi (numel (a3_dataset), num_of_values, 1);
a3=a3_dataset (a3_idx);

array1=[a1,a2,a3];
t_rebuilt=linspace(0,16000,16000);
sig_comb=zeros(1,length(t_rebuilt));
for rr=1:1:length(array1) 

    sig_comb=sig_comb+array1(rr,2)*cos (((array1(rr,1))*t_rebuilt)+array1(rr, 3));  %test using cosine
    %sig_comb=sig_comb+array1(rr,2)*sec (((array1(rr,1))*t_rebuilt)+array1(rr, 3)); %test using secant

end

fprintf('\nfinally Done-elapsed time -%4.4fsec- or -%4.4fmins- or -%4.4fhours-\n',toc,toc/60,toc/3600);

PS:我使用Octave 3.8.1 Linux

1 个答案:

答案 0 :(得分:3)

Octave没有sec的原生实现,它使用cos来执行此操作。查看edit sec.m了解详情。

差异是由

引起的
  • nargin
  • sec的函数调用
  • sec
  • 的函数调用开销
  • 除以值

要摆脱前两个因素,请使用1./cos(x)代替sec(x)。要获得完全相同的速度,需要sec的本机实现。