首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >集成一个三变量函数C++

集成一个三变量函数C++
EN

Stack Overflow用户
提问于 2017-07-06 04:17:51
回答 3查看 2.4K关注 0票数 0

我花了一些时间在互联网上寻找解决这个问题的方法,也许它就在外面,但我所看到的一切对我没有任何帮助。

我有个功能!

代码语言:javascript
运行
AI代码解释
复制
double integrand(double r, double phi, double theta) 

我想把它和三维的一些给定的界限结合起来。我在互联网上发现了多行代码,这些代码实现了单变量定积分数值格式。我在想,“好吧,我将沿着一个又一个的维度进行整合”。

从算法上讲,我想做的是:

代码语言:javascript
运行
AI代码解释
复制
double firstIntegral(double r, double phi) {
    double result = integrationFunction(integrand,lower_bound,upper_bound);
    return result;
}

再做两次。这在Matlab这样的语言中很容易实现,在这里我可以在任何地方创建函数处理程序,但是我不知道如何在C++中实现它。我首先要定义一个函数,一些r和phi会计算任何θ的integrand(r,phi,theta),并使它在C++中仅是一个变量的函数,但我不知道怎么做。

,我如何使用一个-dimensional集成例程(或其他任何真正的.)来计算C++中三个变量函数的三重积分?

EN

回答 3

Stack Overflow用户

发布于 2017-07-06 06:44:42

对于笛卡尔坐标上的积分,这是一个非常缓慢和不精确的版本,应该与C++11一起工作。

它使用std::function和lambda来实现数值积分。没有采取任何步骤来优化这方面的工作。

基于模板的解决方案可能比这快得多(几个数量级),因为它可能允许编译器内联并简化一些代码。

代码语言:javascript
运行
AI代码解释
复制
#include<functional>
#include<iostream>

static double integrand(double /*x*/, double y, double /*z*/)
{
  return y;
}

double integrate_1d(std::function<double(double)> const &func, double lower, double upper)
{
  static const double increment = 0.001;

  double integral = 0.0;
  for(double x = lower; x < upper; x+=increment) {
    integral += func(x) * increment;
  }
  return integral;
}

double integrate_2d(std::function<double(double, double)> const &func, double lower1, double upper1, double lower2, double upper2)
{
  static const double increment = 0.001;

  double integral = 0.0;
  for(double x = lower2; x < upper2; x+=increment) {
    auto func_x = [=](double y){ return func(x, y);};
    integral += integrate_1d(func_x, lower1, upper1) * increment;
  }
  return integral;
}

double integrate_3d(std::function<double(double, double, double)> const &func,
                    double lower1, double upper1,
                    double lower2, double upper2,
                    double lower3, double upper3)
{
  static const double increment = 0.001;

  double integral = 0.0;
  for(double x = lower3; x < upper3; x+=increment) {
    auto func_x = [=](double y, double z){ return func(x, y, z);};
    integral += integrate_2d(func_x, lower1, upper1, lower2, upper2) * increment;
  }
  return integral;
}


int main()
{
  double integral = integrate_3d(integrand, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0);
  std::cout << "Triple integral: " << integral << std::endl;
  return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-06 06:04:25

你可以使用函子

代码语言:javascript
运行
AI代码解释
复制
#include <iostream>

struct MyFunctorMultiply
{
    double m_coeff;

    MyFunctorMultiply(double coeff)
    {
        m_coeff  = coeff;
    }

    double operator()(double value)
    {
        return m_coeff * value;
    }
};

struct MyFunctorAdd
{
    double m_a;

    MyFunctorAdd(double a)
    {
        m_a  = a;
    }

    double operator()(double value)
    {
        return m_a + value;
    }
};

template<class t_functor>
double calculate(t_functor functor, double value, double other_param)
{

    return functor(value) - other_param;
}

int main()
{
    MyFunctorMultiply multiply2(2.);
    MyFunctorAdd      add3(3.);

    double result_a  = calculate(multiply2, 4, 1); // should obtain 4 * 2 - 1 = 7
    double result_b  = calculate(add3, 5, 6);      // should obtain 5 + 3 - 6 = 2

    std::cout << result_a << std::endl;
    std::cout << result_b << std::endl;
}
票数 0
EN

Stack Overflow用户

发布于 2017-07-12 04:39:06

如果您只关心如何获得正确的原型来传递到集成函数,那么您可以很好地使用替代的数据传递机制,其中更简单的是使用全局变量。

假设集成顺序在theta上,然后是phi,然后是r,则编写单个参数的三个函数:

It(theta)根据theta显式传递的参数以及全局phir计算integrand。

Ip(phi)从显式传递的参数phi和全局r计算theta的界限;它还将phi参数复制到全局变量并调用integrationFunction(It, lower_t, upper_t)

Ir(r)从显式传递的参数r中计算phi的边界;它还将r参数复制到全局变量并调用integrationFunction(Ip, lower_p, upper_p)

现在,您可以调用integrationFunction(Ir, lower_r, upper_r)了。

也可能是integrationFunction支持一个"context“参数,您可以在其中存储所需的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44948663

复制
相关文章
[152]python使用UUID库生成唯一ID
Python官方Doc:《20.15. uuid — UUID objects according to RFC 4122》 UUID的算法介绍:《A Universally Unique IDentifier (UUID) URN Namespace》
周小董
2022/04/12
1.1K0
全局唯一ID--UUID介绍、JAVA中UUID的使用
上面这段解析文是知乎一位朋友的理解(https://www.zhihu.com/question/34876910#answer-31004674),个人感觉从UUID的概念、特征描述比较透彻。
青山师
2023/05/04
2K0
ABAP 生成唯一标识字段uuid ,guid
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
百里丶落云
2022/12/05
3.1K0
ABAP 生成唯一标识字段uuid ,guid
uuid生成唯一数字_java组件有哪些
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft’s Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
全栈程序员站长
2022/11/08
9460
比UUID更轻量的唯一ID生成器
诚然,UUID 自问世以来,前前后后开发了5个版本。最常用的要属 UUID4了。一起来回顾下它的使用。
程序员老鱼
2023/05/23
1.3K0
比UUID更轻量的唯一ID生成器
JAVA生成uuid_oracle uuid生成
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/29
2K0
Golang 库 - uuid
UUID(Universally Unique IDentifier)是一个128位数字的唯一标识。
twowinter
2020/04/17
14.4K0
golang获取UUID[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169232.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
1.7K0
JAVA生成uuid_oracle随机生成uuid
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
2.6K0
在 WordPress 中使用 UUID
UUID,是Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息;
Denis
2023/04/24
4440
使用mysql uuid_short() 函数生成17位UUID
mysql> SELECT UUID_SHORT(); -> 92395783831158784 Note that UUID_SHORT() does not work with statement-based replication.
前Thoughtworks-杨焱
2021/12/08
3.1K0
Golang唯一ID生成库特征比较
前段时间碰到友人在看到唯一ID的时候判断不出种类,故专门整理一下不同唯一ID的特征。
HomeboyC
2023/01/08
3.1K1
java在线生成uuid_Java生成uuid
public static String[] chars = new String[]{“a”, “b”, “c”,
全栈程序员站长
2022/11/09
4.3K0
Java 生成 UUID[通俗易懂]
UUID 含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准。
全栈程序员站长
2022/09/16
1.7K0
java生成UUID
UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。
用户7353950
2022/05/11
1.6K0
javascript 生成 uuid
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范围内的一个32位十六进制数。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。 GUID 的总数达到了2^128(3.4×10^38)个,
SpiritLing
2018/04/16
3K0
JS生成UUID
一、UUID是什么   UUID就是Universal Unique IDentifier的缩写,它是一个128位,16字节的值,并确保在时间和空间上唯一。 它是把硬件地址、时间以及随机数结合在一起,它保证对在同一时空中的所有机器都是唯一的。         通常平台会提供生成UUID的API。UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几
庞小明
2018/03/09
15.1K0
通用唯一标识码UUID的介绍及使用。
什么是UUID? UUID全称:Universally Unique Identifier,即通用唯一识别码。 UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16^32 = 2^128,约等于3.4 x 10^38。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。 UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符,如:550e8400-e29b-41d4-a716-446655440000。 UUID的
Java技术栈
2018/04/02
5.2K0
通用唯一标识码UUID的介绍及使用。
使用redis生成唯一编号
在项目开发中,我们需要保证数据的唯一性,就目前开发中常用的方式有使用自增序列、GUID、时间戳以及时间戳加上随机数。生成ID的方法有很多,每种适用场景、需求以及性能要求不同。下面我们列出以下较为常用的生成ID的方式,并且来讨论以下他们的优缺点。
喵叔
2021/11/30
2.3K0
Vue使用uuid-npm快速生成uuid,适用于多种场景
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
德顺
2023/08/25
2K0
Vue使用uuid-npm快速生成uuid,适用于多种场景

相似问题

通过删除带有Javascript的类触发CSS转换

15

通过js添加类不会触发css动画

31

在通过JS添加类时应用CSS转换

24

通过使用Jquery添加类来触发CSS3转换

20

CSS转换属性在通过JS函数触发时无法工作。

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档