由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - 用什么算法能减少这个循环里的运算量?
相关主题
问:关于调用节点和cpu数目的关系,谢谢[转载] matlab问题请教
如何比较两条曲线的相似程度?Mathematica的bug?
问一个FORTRAn的问题!保存MATLAB图片
不定积分a Matlab problem
help!skewness in sas?
how to remove a singularity in an integr哪位前辈能指点一下怎么去掉这个for循环吗
[转载] 问个误差估计的问题如何批量保存fig图片
一个用mathematica 求微分的问题怎样增加C语言的库函数
相关话题的讨论汇总
话题: va话题: vb话题: deltadac话题: dac话题: data2
进入Computation版参与讨论
1 (共1页)
l*******c
发帖数: 523
1
如果有个t的函数:
V(t) = sqrt { (Va)^2 + [(Vb)^2 - (Va)^2]*[1-e^(kt/20)]/(1-e^T)};
Va是已知的值;
Vb也是已知的值;
T是常数。
然后k从1到20,有没有简单的算法可以减少for循环里运算量?以下是那段code:
if (Vb > Va)
deltaDAC = (Vb * Vb - Va * Va)/(1-exp(T));
else
deltaDAC = (Va * Va - Vb * Vb)/(1-exp(T));

if (Vb > Va)
{
for (k=1; k <= 20; k++)
{
Data1 = Va * Va;
Data2 = deltaDAC * (1-exp(k/20));
DAC_Set_Value = sqrt(Data1 + Data2);
DAC_Output(DAC_Set_Value, Dir);
Delay_us(DelayTime);
}
c****p
发帖数: 6474
2
循环里面的Data1可以拿出来吧。

【在 l*******c 的大作中提到】
: 如果有个t的函数:
: V(t) = sqrt { (Va)^2 + [(Vb)^2 - (Va)^2]*[1-e^(kt/20)]/(1-e^T)};
: Va是已知的值;
: Vb也是已知的值;
: T是常数。
: 然后k从1到20,有没有简单的算法可以减少for循环里运算量?以下是那段code:
: if (Vb > Va)
: deltaDAC = (Vb * Vb - Va * Va)/(1-exp(T));
: else
: deltaDAC = (Va * Va - Vb * Vb)/(1-exp(T));

m*****e
发帖数: 15
3
把循环直接去掉,用矢量运算?
c***r
发帖数: 1570
4
no t?
---Data2 = deltaDAC * (1-exp(k/20));
z**********6
发帖数: 68
5
1: data1 能拿出来,楼上已经说了
2: 那个exp不用每次都做,exp(k/20)你可以在循环外算出来exp(1/20), 假设它等于x
,那么Data2 = deltaDAC * (1-x^k),每次记住x^k更新x^(k+1)的时候乘一个x就行了,
一个乘法换一个指数运算加一个除法。
不过话说回来除非你这个小循环在一个更大的循环里面,不然其实这么搞也快不了多少
,一般数学库的exp其实已经挺快的了
1 (共1页)
进入Computation版参与讨论
相关主题
怎样增加C语言的库函数help!
matlab中的for loophow to remove a singularity in an integr
请教一个问题[转载] 问个误差估计的问题
Mathematica里面怎么用循环?一个用mathematica 求微分的问题
问:关于调用节点和cpu数目的关系,谢谢[转载] matlab问题请教
如何比较两条曲线的相似程度?Mathematica的bug?
问一个FORTRAn的问题!保存MATLAB图片
不定积分a Matlab problem
相关话题的讨论汇总
话题: va话题: vb话题: deltadac话题: dac话题: data2