gpt4 book ai didi

c++ - 无参数函数、类和模板

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:25 25 4
gpt4 key购买 nike

我正在尝试使用由 C++ 中的数值方法实现的 Romberg 方法进行数值积分。

我的问题是我不知道如何处理多变量函数的一维积分中的常数变量,即 f(x)dx 的积分有效,但我不知道计算 f(x,y=2,z=5,...)dx 积分的语法.

我相信它与我根本不熟悉的类和模板有关,我尝试使用指针、额外函数等都没有成功。

#include <iostream>
#include <math.h>
#include <NR/nr3.h>
#include <NR/interp_1d.h>
#include <NR/quadrature.h>
#include <NR/romberg.h>

double fone (double x) { return 2*x*x*x; }
double ftwo (double x, double y){ return 2*x*x*x*y; }

int main()
{
double Ione = qromb(fone, 1, 3);
std::cout << Ione << std::endl;

//double Itwo = qromb(ftwo(x, 2.0), 1, 3);
//std::cout << Itwo << std::endl;
}

我在这里整合fone(x)来自 x=1到 3。此代码有效,但如果我取消注释上面的 3 行,即尝试集成 ftwo(x, 2)来自 x=1到 3,我得到

 invalid initialization of non-const reference of type ‘double&’ from an rvalue 
of type ‘double’|

看来我对C++中的一些基本概念缺乏理解,但我不知道是哪一个,这使得问题很难谷歌。这也是我第一次遇到可以不带参数传递函数,即 romberg(fone,..)而不是 romberg(fone(x),..)我不知道这怎么称呼。

如果有人能指出我需要研究的方向,我将不胜感激。谢谢!

最佳答案

您可以使用 lambda 来绑定(bind)参数:

auto f2 = [](double x) { return ftwo(x, 2.0);};
Itwo = qromb(f2, 1, 3);

关于c++ - 无参数函数、类和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48561501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com