麻烦的“双重”数值数据类型

20视图(30天)
我有下面的代码,提取从一个“r = 1:长度(μ)”周期不正常工作,我们计算结果为r = 24:
清晰;
信谊x t
r = 24;
deltamu = 0.5;
σ= 5;
λ= 1;
Cstar = 7;
μ= (4:deltamu: 10);
P = 0(1、长度(μ));
TP = 0(1、长度(μ));
TN = 0(1、长度(μ));
s = 1;
sigmae = 5;
exp_t = exp (- t ^ 2);
达峰时间= +正;
tmin =((μ(r) +λ。*σ。^ 2 x)。/ (sqrt(2) *σ));
误差补函数=(2. /√(π)。* int (exp_t t tmin,达峰时间);
f_lambda = (lambda. / 2)。* exp ((lambda. / 2) *(2。*μ(r) +λ。*σ^ 2 - 2。* x))。*误差补函数;
P (s, r) =双(int (f_lambda, x, Cstar +正));
phi_e = 1. / (sigmae。*√(2。* pi))。* exp (- (1/2)。* ((x-Cstar)。/ sigmae)。^ 2);
φ= int (phi_e x,负无穷,x);
fxP = f_lambda。*φ;
TP (s, r) =双(int (fxP, x, Cstar +正));
fxN1 = f_lambda;
fxN2 = f_lambda。*φ;
IntN1 =双(int (fxN1 x,负无穷,Cstar));
IntN2 =双(int (fxN2 x,负无穷,Cstar));
IntN = IntN1-IntN2;
TN (s, r) =双(IntN)
它的工作原理,计算向量TN的24日组件
TN =
列1到20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
列21到29
0.2809 0 0 0 0 0 0 0 0
然而,令人惊奇的是,如果我们设定而不是r = 25日,我们获得以下信息:
“错误使用symengine
不能包含剩余的符号函数调用表达式转换成数组的两倍。参数必须表达评估数量。信谊误差/双(第729行)
Xstr = mupadmex (symobj:双,年代。年代,0);
相关文档”
这个错误会弹出所有值25 < = r < = 29, 29日是其最大允许的。
在仔细观察,似乎与过去相关的问题是“替身”计算,即
IntN2 =双(int (fxN2 x,负无穷,Cstar));
正确完成r = 24,但给了一个错误r > = 25。这些都是获得的两个值:
* * * * * * * * * * * * * * * *
r = 24
> > int (fxN2 x,负无穷,Cstar)
ans =
int((146084674377193476124496039018555 * 2 ^(1/2) *π* exp (20 - x) *(小块土地((2 ^ (1/2)* (x - 65/2)) / 10) + 1) *(小块土地(2 ^ (1/2)* (x / 10 - 7/10)) + 1)) / 2596148429267413814265248164610048 x,负无穷,7)
双(int (fxN2 x,负无穷,Cstar))
ans =
0.1042
* * * * * * * * * * * * * * * *
r = 25
> > int (fxN2 x,负无穷,Cstar)
ans =
int((146084674377193476124496039018555 * 2 ^(1/2) *π* exp (4 - x) *(小块土地((2 ^ (1/2)* (x - 33)) / 10) + 1) *(小块土地(2 ^ (1/2)* (x / 10 - 7/10)) + 1)) / 2596148429267413814265248164610048 x,负无穷,7)
双(int (fxN2 x,负无穷,Cstar))
错误使用symengine
不能包含剩余的符号函数调用表达式转换成数组的两倍。参数必须表达评估数量。
信谊误差/双(第729行)
Xstr = mupadmex (symobj:双,年代。年代,0);
相关的文档
* * * * * * * * * * * * * * * *
很明显,唯一的区别这两个版本的函数fxN2 -将集成exp (20 - x)对exp (4 - x)和(x - 65/2)对(x - 33)内的小块土地的功能。
关键在哪里?
2的评论
弗朗西斯科·法夫里
Dyuma,非常感谢你的好的建议。效果好,解决了我的问题!它仍然是为什么的神秘事务r = 24 - > 25防止正确的计算

登录置评。

答案(1)

VBBV
VBBV 10分钟前
编辑:VBBV 3分钟前
以下版本的代码运行没有错误。
清晰;
信谊x t
% r = 24;
deltamu = 0.5;
σ= 5;
λ= 1;
Cstar = 7;
μ= (4:deltamu: 10)
P = 0(1、长度(μ));
TP = 0(1、长度(μ));
TN = 0(1、长度(μ));
s = 1;
sigmae = 5;
exp_t = exp (- t ^ 2);
达峰时间= +正;
r = 1:长度(亩)
tmin =((μ(r) +λ。*(σ^ 2)- x)。/ (sqrt(2) *σ));
误差补函数=(2. /√(π)。* int (exp_t t tmin,达峰时间);
f_lambda = (lambda. / 2)。* exp ((lambda. / 2) *(2。*μ(r) +λ。*(σ^ 2)- x))。*误差补函数;
P (s, r) =双(int (f_lambda, x, Cstar +正));
phi_e = 1. / (sigmae。*√(2。* pi))。* exp (- (1/2)。* ((x-Cstar)。/ sigmae)。^ 2);
φ= int (phi_e x,负无穷,x);
fxP = f_lambda。*φ;
TP (s, r) =双(int (fxP, x, Cstar +正));
fxN1 = f_lambda;
fxN2 = f_lambda。*φ;
IntN1 =双(int (fxN1 x,负无穷,Cstar));
IntN2 =双(int (fxN2 x,负无穷,Cstar));
IntN = IntN1-IntN2;
TN (s, r) =双(IntN)
结束
如果我理解正确的话,你的意思是写这行代码
% - - - - - - - - - - - - - - - - - - - - - - - > > - - - - - - - > >
tmin =((μ(r) +λ。*(σ^ 2)- x)。/ (sqrt(2) *σ));
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > - - - - - - - > >
f_lambda = (lambda. / 2)。* exp ((lambda. / 2) *(2。*μ(r) +λ。*(σ^ 2)- x))。*误差补函数;

标签

s manbetx 845


释放

R2023a

社区寻宝

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

开始狩猎!