当前位置: 首页 > 知识库问答 >
问题:

SIN/COS的MATLAB快速逼近

冯宏恺
2023-03-14

瓶颈:在每次迭代中,从复杂稀疏矩阵A(50,000×50,000)和col向量b和c(50,000×1)获得角度,然后找到

S=[sin(ang(diag(A)+b-c) cos(ang(diag(A)+b-c)];

sin和cos的所有输入均接近+pi/2或-pi/2。

我尝试了一个查找表(如C++中创建正弦查找表中所建议的)和一个简单的泰勒系列,但两者都比较慢:

appr=[round(1:.001:2,3);sin(1:.001:2);cos(1:.001:2)];
ang=round(angle(diag(A))+b-c);
loc=ang;
for cntr=1:length(ang)
    loc(cntr)=find(appr(1,:)==abs(ang(cntr)),1);
end
S=[appr(loc,2).*sign(ang) appr(loc,3)];
ang=angle(diag(A))+b-c;
[ang,ind]=min(abs([ang+pi/2; ang-pi/2])); conv=[1 -1];
S=[(ang-0.1667*ang.^3).*conv(ind)), (1-0.5*ang.^2+0.041666*ang.^4).*conv(ind))];

共有1个答案

李泓
2023-03-14

尝试优化sin()和cos()(它们已经被优化到了极点)不会给您带来太多好处。在任何情况下,在你的表达中:

S = [sin(angle(diag(A) + b - c)), cos(angle(diag(A) + b - c))];

其他操作将占用与sin和COS相当的时间。您是否通过将表达式拆分为其组成部分来运行探查器?这应该让您了解sin()和cos()的相对成本是多少。

例如:

A = pi*rand(10^7,1);
B = pi*rand(10^7,1);
C = A + i*B; % i is sqrt(-1)

tic;
S = sin(A);
toc;
tic;
S = sin(angle(C) + B - C);
toc;
 类似资料:
  • 假设我有一个旋转90度的正方形(我发现这是为我的计算机准备的)和一个旋转75度的第二个正方形。第一个正方形的左上角和第二个正方形的左下角相连。 我的目标是使用三角学来编辑第二个正方形的位置,以便它的右下角和第一个正方形的右上角(两个高亮的角)连接起来。 在一张不太硬的纸上。我会用sin和cos来求x和y的偏移量。在本例中,代码类似于:

  • 我正在创建一个程序,该程序具有一个圆形对象,该对象在画布上以圆周运动移动。我已经创建了圆圈和渲染类,现在正在移动。到目前为止,这是我的代码,不幸的是它不起作用。我不确定从这里走向何方,或者我是否走在正确的轨道上。

  • cos

    cos(取余玄函数值) 相关函数 acos,asin,atan,atan2,sin,tan 表头文件 #include<math.h> 定义函数 double cos(double x); 函数说明 cos()用来计算参数x 的余玄值,然后将结果返回。 返回值 返回-1至1之间的计算结果。 附加说明 使用GCC编译时请加入-lm。 范例: #include<math.h> main() { dou

  • 描述 (Description) 该方法返回指定double值的余弦值。 语法 (Syntax) double cos(double d) 参数 (Parameters) 这是参数的细节 - d - 此方法接受double数据类型的值。 返回值 (Return Value) 此方法返回指定double值的余弦值。 例子 (Example) public class Test { publ

  • cos

    此方法返回指定值的余弦值。 语法 (Syntax) cos(X) 参数 (Parameters) X - 为余弦函数指定一个值。 返回值 (Return Value) 返回值是表示余弦值的浮点值。 例如 (For example) -module(helloworld). -import(math,[cos/1]). -export([start/0]). start() -> C

  • 该方法返回指定double值的余弦值。 语法 (Syntax) double cos(double d) 参数 (Parameters) d - 此方法接受double数据类型的值。 返回值 (Return Value) 此方法返回指定double值的余弦值。 例子 (Example) 以下是此方法的使用示例 - class Example { static void main(Strin