有办法加快计算的分段定义函数?
41视图(30天)
显示旧的评论
你好,
我试着创建一个极地polynomic分段定义的函数和三角函数。我的目标是,对于任何输入x值极性的y值被返回。
我试过两种不同版本的这样做,似乎都很缓慢。
有没有更快的方法来实现它呢?
选项1:
创建一个结构或一个向量数值在某些x / y点。之后,插入(如果必要的话)返回的y值。
选项2:使用符号数学工具箱和分段()来创建极地。
在我的项目中,polynomic和三角函数本身依赖于其他分段函数定义,我想减慢象征性的解决方案更多。不管怎样,我觉得应该会更快与双精度数字解决插值点,然后插入实现一个连续函数。
不过,仍然不一样快我希望它(我想用它来一个自动驾驶仪)。建议一种不同的方法吗?
谢谢你!
x_input = -2.12345;
%选项1
n = -10;
而(n < = 10)
struct.x (n + 11) = n;
如果n < 5
struct.y (n + 11) = 2;
结束
如果(5 < n) & (n < 5)
struct.y (n + 11) =罪(n);
结束
如果n > 5
struct.y (n + 11) = n;
结束
n = n + 1;
结束
Fo = griddedInterpolant (struct.x (:), struct.y (:),样条的);
y_output = Fo (x_input);
%选项2
信谊y (x)
y (x) =分段(x < 5、2、5 < x < 5, sin (x) x > 5, x);
y_output2 =双(y (x_input));
0评论
接受的答案
Dyuman Joshi
2023年6月8日15:55
编辑:Dyuman Joshi
2023年6月8日16:00时
逻辑索引将是我最好的选择
x_input = -2.12345;
n = 10:10;
n % x是一样的
% preallocate y
y = 0(大小(n));
%的条件
idx1 = n < 5;
idx2 = n > 5 & n < 5;
idx3 = n > 5;
%,在n = = 5的值和n = = 5是零,有包括这些点
%的条件
y (idx1) = 2;
y (idx2) =罪(n (idx2));
y (idx3) = n (idx3);
Fo = griddedInterpolant (n y样条的);
y_output = Fo (x_input)
国际海事组织,最好使用一个数据类型在整个代码。从1数据类型转换到另一个可能降低代码的效率。
至于polynomic和三角函数(这是你的项目的一部分),您可以定义为相应的功能和使用。