有办法加快计算的分段定义函数?

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));

接受的答案

Dyuman Joshi
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)
y_output = -0.8546
国际海事组织,最好使用一个数据类型在整个代码。从1数据类型转换到另一个可能降低代码的效率。
至于polynomic和三角函数(这是你的项目的一部分),您可以定义为相应的功能和使用。

答案(1)

马特·J
马特·J 2023年6月8日15:56
编辑:马特·J 2023年6月8日等等
使用逻辑索引、
%选择1.1
x = 10:10;
y = x;
y (x < = 5) = 2;
p = abs (x) < 5;
y (p) = sin (x (p));
struct.x = x;
struct.y = y;

下载188bet金宝搏


释放

R2023a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!