我正在阅读在C++中将int设置为Infinity.我明白,当一个人需要真正的无限时,一个人应该使用numeric_limits<float>::infinity(); 我猜的理由背后是通常整型已指定为用于表示如特殊状态没有价值的NaN,天道酬勤,像等IEEE 754个浮动不(再C++不强制要求既不- int与float使用都留给实现); 但max > infinity对于给定的类型,它仍然是误导性的.我试图理解标准中这个调用背后的基本原理.如果infinity对某种类型没有意义,那么不应该禁止它而不是要检查其有效性的标志吗?
我试图从十进制值中提取积分和小数部分(两个部分应该是整数):
decimal decimalValue = 12.34m;
int integral = (int) decimal.Truncate(decimalValue);
int fraction = (int) ((decimalValue - decimal.Truncate(decimalValue)) * 100);
Run Code Online (Sandbox Code Playgroud)
(为了我的目的,十进制变量最多包含2个小数位)
有没有更好的方法来实现这一目标?
我正在寻找一个比双重积分更快的解决方案
integrate(function(y) {
sapply(y, function(y) {
integrate(function(x) myfun(x,y), llim, ulim)$value
})
}, llim, ulim)
Run Code Online (Sandbox Code Playgroud)
用例如
myfun <- function(x,y) cos(x+y)
llim <- -0.5
ulim <- 0.5
Run Code Online (Sandbox Code Playgroud)
我找到了一篇旧论文,提到了一个名为FORTRAN的程序quad2d,但我找不到其他任何东西,除了一些matlab的帮助页面.所以我正在寻找一个可以快速进行双积分的C或FORTRAN库(即没有sapply循环),并且可以从R调用.所有想法都非常受欢迎,只要它们都是GPL兼容的.
如果解决方案涉及从R已经附带的库中调用其他功能,我也很乐意听取他们的意见.
我想计算数值标量场的 3D 体积积分。
在这篇文章中,我将使用一个可以精确计算积分的示例。因此我选择了以下函数:
在 Python 中,我定义了函数和 3D 中的一组点,然后生成这些点处的离散值:
import numpy as np
# Make data.
def function(x, y, z):
return x**y**z
N = 5
grid = np.meshgrid(
np.linspace(0, 1, N),
np.linspace(0, 1, N),
np.linspace(0, 1, N)
)
points = np.vstack(list(map(np.ravel, grid))).T
x = points[:, 0]
y = points[:, 1]
z = points[:, 2]
values = [function(points[i, 0], points[i, 1], points[i, 2])
for i in range(len(points))]
Run Code Online (Sandbox Code Playgroud)
如果我不知道底层函数,即如果我只有坐标 ( x, y, z) 和 ,我怎样才能找到积分values?
对于某些整数类型,即使浮点值远远超出整数的可表示范围,如何找到最接近某个浮点类型值的值.
或者更确切地说:
我们F是一个浮点型(可能是float,double或long double).让I是一个整数类型.
假设两个F并I有有效的专业化std::numeric_limits<>.
给定可表示的值F,并且仅使用C++ 03,如何找到最接近的可表示值I?
我追求的是一个纯粹,高效且线程安全的解决方案,除了C++ 03所保证的以外,它不会对平台做任何假设.
如果不存在这样的解决方案,是否可以使用C99/C++ 11的新功能找到一个?
lround()由于报告域错误的非平凡方式,使用C99似乎是有问题的.这些域错误是否可以以便携式和线程安全的方式捕获?
注意:我知道Boost可能通过其boost::numerics::converter<>模板提供解决方案,但由于其高复杂性和冗长性,我无法从中提取必需品,因此我无法检查他们的解决方案是否成功超出C++ 03的假设.
下面的天真方法失败了,因为I(f)当C++ 03的整数部分f不是可表示的值时,结果是未定义的I.
template<class I, class F> I closest_int(F f)
{
return I(f);
}
Run Code Online (Sandbox Code Playgroud)
然后考虑以下方法:
template<class I, class F> I closest_int(F f)
{
if (f < std::numeric_limits<I>::min()) return std::numeric_limits<I>::min();
if (std::numeric_limits<I>::max() < f) return std::numeric_limits<I>::max();
return I(f);
} …Run Code Online (Sandbox Code Playgroud) 我正在为学校实现一个算法,并且在理解编程中如何表示一个定积分时遇到了问题.例如,我知道Summation方程可以实现为以下示例:
假设y = f(x)
if(x==0){
y=x+1;
}else{
for(int i = 0; i < n; i++){
y = y + (x - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
那么我如何表示数值积分,例如:
这里种植的方程可能没有数学意义,但我的目标是在学校编程项目中用c#实现类似的方程式,我必须在其中实现一个包含积分的算法.我一直在读,有解决定积分的数值方法,如辛普森规则; 我是否必须使用这样的方法来实现等式,或者可以在编程中表示积分,例如循环或类似的东西?
我不理解PID控制器的组成部分.让我们假设来自维基百科的这个伪代码:
previous_error = 0
integral = 0
start:
error = setpoint - measured_value
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start
Run Code Online (Sandbox Code Playgroud)
积分在开始时设置为零.然后在循环中它整合了错误随着时间的推移.当我对测量值或设定值进行(正)变化时,误差将变为正值,积分将在整个时间内(从头开始)"吃掉"值.但我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随时间积分的误差),并且仍然会对控制器的输出值有所贡献,但它不应该.
请问有人解释一下吗?
当使用curve_fitfrom scipy.optimize来拟合python中的某些数据时,首先定义拟合函数(例如二阶多项式),如下所示:
def f(x, a, b):
return a*x**2+b*x
popt, pcov = curve_fit(f,x,y)但现在的问题是,如果函数包含一个整数(或一个离散的和),如何在第1点定义函数,例如:

实验数据仍然给出了x和f(x),所以第2点就像我想象的一样,我可以在python中定义f(x).顺便说一下,我忘了说假设g(t)在这里有一个众所周知的形式,并且包含拟合参数,即在多项式例子中给出的像a和b这样的参数.任何帮助深表感谢.问题实际上应该是通用的,而帖子中使用的函数只是随机的例子.
我正在使用scipy.integrate.dblquad,我收到此错误:
UserWarning: The maximum number of subdivisions (50) has been achieved.
If increasing the limit yields no improvement ...
Run Code Online (Sandbox Code Playgroud)
我想增加这个限制,看看积分是否融合良好.该文档指定了如何执行此操作scipy.integrate.quad(该函数将最大迭代次数作为参数),但不是scipy.integrate.dblquad.如何增加细分数量dblquad?
我想知道如何编码在R中采用双积分.我已经提到了两个类似的问题.
但我仍然很困惑如何从这些答案中得到我的问题.我的问题是以下.
我想在R中编写这个计算代码.
从我的手和Wolfram alpha计算,它变成了16826.4.如果两个积分都来自使用adaptIntegrate()的精确数字,我知道如何取一个积分.但我不知道该怎么办.你们能帮助我吗?非常感谢你提前.