小编kir*_*off的帖子

Python / C++ - 精度差异

优化后,我使用 Python 和 C++ 中的最佳参数计算残差。结果差距巨大。以下是我更准确地进行操作的方法:

我根据 Python 中的参数模型生成数据。我将 X 和 Y 存储在 Excel 文件中。我将此文件加载到我的 C++ 程序中并运行优化。我提出了最佳参数,它们与用于生成该系列的参数非常接近。然后,我使用 Python 和 C++ 计算残差(Y 与具有最佳参数的模型输出之间的平方差之和)。结果是巨大的,对于对参数变化非常敏感的模型,差异高达 10^3。这些差异是否可以归因于 Python 和 C++ 中处理精度的不同方式,或者是否还有其他问题?优化完成后,残差计算就是一个简单的计算,我想知道如果不是精度问题,问题可能出在哪里。

非常感谢您的任何建议或参考。

编辑 --- 我可以轻松地显示用于生成数据和计算残差平方和的 Python 代码,但不能显示 C++ 代码,因为计算是通过解释器执行的。感谢您的任何评论。

P1 =  5.21
P2 = 0.22

X_= list(range(0,100,1))
X=[float(x)/float(10) for x in X_]
Y = [P1*numpy.exp(-1*P2*x) for x in X]

##plt.plot(X,Y)
##plt.show()

##for j in range(len(Y)):
##    Y[j]+=rg.normal(0,0.01)

#build some input files
X1f = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1X.txt', 'w')
for i in range(len(X)):
     X1f.write(str(X[i])+'\n')
X1f.close()

Yf = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1Y.txt', 'w') …
Run Code Online (Sandbox Code Playgroud)

c++ python precision scientific-computing

0
推荐指数
1
解决办法
1793
查看次数

Excel SIN无法使用这种简单的语法

Excel上瘾的简单问题:

 =0.23-0.0373*SIN(B2-PI)



X      Y    
0      0.24         #NAME?
0.1   -0.758334166  #NAME?
0.2   -1.746693308  #NAME?
0.3   -2.715202067  #NAME?
Run Code Online (Sandbox Code Playgroud)

不起作用(右栏),为什么会这样?

不知道为什么不应该那样工作,但鼠标的信息显示这种语法.

还检查了语法,并且......没有任何线索.

感谢致敬.

excel trigonometry calculator

0
推荐指数
1
解决办法
97
查看次数

C喜欢数组语法?

这个语法是double x[]什么?

它是一种声明数组的C方式吗?

如果我有类似的功能

void evaluate(double x[], double *f)
{
   // evaluate
}
Run Code Online (Sandbox Code Playgroud)

我可以传递任何长度的参数x吗?

c c++ arrays syntax

0
推荐指数
1
解决办法
302
查看次数

NSIS静默安装程序 - 未观察到跳转

我想NSIS文档例如对于静默安装,在这里.取消注释该行

; SilentInstall silent
Run Code Online (Sandbox Code Playgroud)

然后是的,我的安装程序是沉默的.但是,它会显示消息框.即使安装程序是静默的,预计也会出现消息框.为了使消息框保持静音,必须为每个消息框播放/ SD选项.示例脚本在此处提出:

MessageBox MB_OK|MB_ICONINFORMATION "This is not a silent installer" /SD IDOK
Run Code Online (Sandbox Code Playgroud)

暴露消息框的另一个意思是暴露:它检查是否静默.如果是静音,则向前跳两行(所以不要显示消息框)

IfSilent 0 +2
    MessageBox MB_OK|MB_ICONINFORMATION 'This is a "silent" installer'
Run Code Online (Sandbox Code Playgroud)

第二种解决方案对我不起作用.如果我将安装程序设置为静音,则会显示带有"这是静默安装程序"的框.如果我改变它

MessageBox MB_OK|MB_ICONINFORMATION 'This is a "silent" installer' /SD IDOK
Run Code Online (Sandbox Code Playgroud)

消息未出现.

为什么跳进去

IfSilent 0 +2
Run Code Online (Sandbox Code Playgroud)

不工作?+3也没有成功.

installer nsis silent silent-installer

0
推荐指数
1
解决办法
2874
查看次数

命令行NSIS脚本编译 - 静默选项

我想让我的安装程序保持沉默.我希望能够灵活地使安装程序保持静默或不依赖于命令行选项.在doc中,我发现这可以启动NSIS脚本编译:

"C:\Program Files\NSIS\makensis.exe" "D:\Produts\folder\Install\nsis\MyApp.nsi"
Run Code Online (Sandbox Code Playgroud)

这是有效的.默认情况下,这会生成非静默安装程序.要使用静默安装程序(仅使用命令行选项),我试过这个

"C:\Program Files\NSIS\makensis.exe" \S "D:\Produts\folder\Install\nsis\MyApp.nsi"
Run Code Online (Sandbox Code Playgroud)

但\ S不是公认的选择.如何使用命令行选项使安装程序无声?

我可以在doc中找到它

4.8.1.36 SilentInstall

normal | silent | silentlog指定安装程序是否应该是静默的.如果它是'silent'或'silentlog',所有具有SF_SELECTED标志的部分都安静地安装(你可以使用SectionSetFlags设置这个标志),安装程序本身没有屏幕输出(脚本仍然可以显示它想要的任何内容,使用MessageBox的/ SD指定静默安装程序的默认值.请注意,如果将其设置为"normal"并且用户在命令行上使用/ S(区分大小写)运行安装程序,则其行为就像使用了SilentInstall"silent"一样.注意:另请参见LogSet.

有关更多信息,请参见第4.12节.

所以我觉得被虐待了

或者是否应该将一些指令添加到NSIS脚本中,以便编译可以接受/ S选项?

尝试用-S而不是工作.

感谢致敬

installation installer command-line nsis

0
推荐指数
1
解决办法
5293
查看次数

Qt C++ - 不允许使用QList <float**>类型

我想将一个float**参数列表传递给一些float**只使用C-syle的方法(但我们认为我们可以使用QList<>as参数类型).

我试过了

QList< float** > list_ = new QList< float** >();
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我应该用什么呢?对于二维矩阵列表,Qt容器会是什么?

谢谢

c++ arrays qt types list

0
推荐指数
1
解决办法
524
查看次数

在排序向量中找到最近的索引

我编写了一个C++例程来查找排序数组中最近的double元素.有没有办法加快?

reversed如果reversed按降序排序,则有两个基于boolean值的分支.

 void findNearestNeighbourIndex_new(real_T value, real_T* x, int_T x_size, int_T& l_idx)
{
    l_idx = -1;

    bool reversed= (x[1] - x[0] < 0);

    if ((!reversed&& value <= x[0]) 
                  || (reversed&& value >= x[0])){ 
        // Value is before first position in x
        l_idx = 0;
    }
    else if ((!reversed&& value >= x[x_size - 1]) 
                    || (reversed&& value <= x[x_size - 1])){ 
        // Value is after last position in x
        l_idx = x_size - 2;
    }
    else // All other …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm optimization performance intel-vtune

-1
推荐指数
1
解决办法
4668
查看次数

没有'new'关键字的C++中的内存分配

我有一些由MATLAB Coder生成的代码.它包括这种类型的一些变量定义:

int tmp_size[400];
Run Code Online (Sandbox Code Playgroud)

在方法范围结束之前,不会显式删除这些变量.

变量是在堆还是堆栈上分配的?这相当于以下几点吗?

int* tmp_size = new int[400];
Run Code Online (Sandbox Code Playgroud)

是否最好用内存管理来重写这些变量定义new,比如int* tmp_size = new int[400];

我注意到内存是由我的程序分配的,永远不会被释放.这可能是造成内存泄漏的原因吗?

c++ memory-leaks memory-management new-operator matlab-coder

-2
推荐指数
1
解决办法
1069
查看次数

C++代码必需的括号

我读了一段写成的代码

for (kf=0; kf<nf; kf++)
    if (EPS_MOCK[kf] == 1)
        for (i=0; i<nptsx; i++)
            for (j=0; j<nptsz; j++)
            {
                x0[iv] = log(inv_Controls->epsilonBed.GetElem(j,i,kf));
                iv = iv+1;
            }
for (kf=0; kf<nf; kf++)
    if (inv_num_packman[kf] == -1)
        for (i=0; i<nzx; i++)
        {
            x0[iv] = log(inv_Controls->num_packman[i+kf*nzx]);
            iv = iv+1;
        }
    else if (inv_num_packman[kf] == 1)
    {
        x0[iv] = log(inv_Controls->num_packman[kf*nzx]);
        iv = iv+1;
    }
Run Code Online (Sandbox Code Playgroud)

而预期的括号设置将是

for (kf=0; kf<nf; kf++){
    if (EPS_MOCK[kf] == 1){
        for (i=0; i<nptsx; i++){
            for (j=0; j<nptsz; j++)
            {
                x0[iv] = log(inv_Controls->epsilonBed.GetElem(j,i,kf));
                iv …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction algorithm object parentheses

-5
推荐指数
2
解决办法
119
查看次数