小编ja7*_*a72的帖子

多元对分法

我需要一种算法来执行2D二分法来解决2x2非线性问题。例如:两个方程f(x,y)=0g(x,y)=0我想somultaneously解决。我对一维二等分(以及其他数值方法)非常熟悉。假设我已经知道解决方案介于边界x1 < x < x2和之间y1 < y < y2

在网格中,起始范围是:

    ^
    |   C       D
y2 -+  o-------o
    |  |       |
    |  |       |
    |  |       |
y1 -+  o-------o
    |   A       B
    o--+------+---->
       x1     x2
Run Code Online (Sandbox Code Playgroud)

我知道的价值观f(A), f(B), f(C) and f(D),以及g(A), g(B), g(C) and g(D)。为了开始二等分,我想我们需要沿着边缘以及中间将点分开。

    ^
    |   C   F   D
y2 -+  o---o---o
    |  |       |
    |G o   o M o H
    |  |       |
y1 -+  o---o---o
    | …
Run Code Online (Sandbox Code Playgroud)

language-agnostic math linear-algebra numerical-methods bisection

6
推荐指数
3
解决办法
5165
查看次数

与结构尺寸和性能有关的特殊结果

我很好奇大型结构的开销与使用运算符+*数学的小结构.所以我做了两个结构,一个Small有1个双字段(8个字节),另一个Big有10个双字节(80个字节).在我的所有操作中,我只操纵一个叫做的字段x.

首先,我在两个结构中都定义了数学运算符

public static Small operator +(Small a, Small b)
{
    return new Small(a.x + b.x);
}
public static Small operator *(double x, Small a)
{
    return new Small(x * a.x);
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它会占用堆栈中的大量内存来复制字段.我运行了5,000,000次迭代的数学运算并得到了我怀疑的(3倍减速).

public double TestSmall()
{
    pt.Start(); // pt = performance timing object
    Small r = new Small(rnd.NextDouble()); //rnd = Random number generator
    for (int i = 0; i < N; i++)
    {
        a = 0.6 * a + …
Run Code Online (Sandbox Code Playgroud)

c# struct timing

6
推荐指数
1
解决办法
207
查看次数

字典如何进行快速查找

我正在寻找尝试理解字典中存储/检索机制的Item[TKey]来源Dictionary<TKey,TValue>,以及为什么它比仅逐个检查每个条目更快.

我迷茫的地方是在buckets场上的素数用户和相互作用Entry<TKey,TValue>.next.

有人可以向我解释逻辑,或指向我可以理解它的参考.

谢谢.

c# dictionary

6
推荐指数
2
解决办法
4941
查看次数

为什么在清楚地写入数组边界时没有运行时错误?

我有一个程序,它指定一个超出它界限的数组,我期待抛出运行时错误.然而,根本没有出现错误,程序继续写入未声明的内存.是否有一些编译器选项来防范这种情况?通过显示内存转储,很明显这种边界的超越是真实的.有没有办法声明变量或参数规范来捕获它?显然这是一个明显的案例,但是当负责维护数千行F77派生代码时,(对我来说)是否可能发生这种情况并不总是很清楚.

PROGRAM TEST_CODE
IMPLICIT NONE

INTEGER*4 :: R(5)           ! Array of 5

    CALL R_TEST(R, 10)

END PROGRAM

SUBROUTINE R_TEST(R, J)
IMPLICIT NONE

INTEGER*4, INTENT(INOUT) :: R(1)    ! Dummy is array of 1
INTEGER*4, INTENT(IN) :: J
INTEGER*4 :: K

DO K=J-5,J+5            ! K=5..15
    R(K) = K            ! No Runtime Error
END DO

END SUBROUTINE
Run Code Online (Sandbox Code Playgroud)

编译器是英特尔Fortran 2011 XE,是的我使用字节规范,INTEGER*4因为我知道我得到它.

以下是运行时检查的编译器选项. 编译器选项

记忆<code> R </ code>变量

fortran runtime-error range-checking

6
推荐指数
1
解决办法
3281
查看次数

只有在使用Intel Visual Fortran编译时,子程序调用上的堆栈溢出,并且当由Compaq Visual Fortran编译时才会很好

使用Fortran .dll的相同源文件,我可以使用Compaq Visual Fortran 6.6C或Intel Visual Fortran 12.1.3.300(IA-32)编译它们.问题是英特尔二进制文件的执行失败,但与Compaq一起运行良好.我正在Windows 7 64位系统上编译32位..dll调用驱动程序是写入的C#.

_chkstk()当调用内部子例程(从.dll入口例程调用)时,失败消息来自可怕的调用.(SO回答chkstk())

有问题的程序被声明为(原谅固定文件格式)

  SUBROUTINE SRF(den, crpm, icrpm, inose, qeff, rev,  
 &               qqmax, lvtyp1, lvtyp2, avespd, fridry, luin,  
 &               luout, lurtpo, ludiag, ndiag, n, nzdepth, 
 &               unit, unito, ier)

  INTEGER*4 lvtyp1, lvtyp2, luin, luout, lurtpo, ludiag, ndiag, n, 
 &          ncp, inose, icrpm, ier, nzdepth
  REAL*8    den, crpm, qeff, rev, qqmax, avespd, fridry           
  CHARACTER*2  unit, unito
Run Code Online (Sandbox Code Playgroud)

并像这样调用:

      CALL SRF(den, crpm(i), i, inose, qeff(i), rev(i),  
 &             qqmax(i), lvtyp1, lvtyp2, …
Run Code Online (Sandbox Code Playgroud)

fortran arguments intel-fortran

6
推荐指数
1
解决办法
1517
查看次数

最后尝试C#的变量生命周期

我得到了以下代码

截图

为什么在finally块中的x值为5而不是"已经定义"或者默认值为0?

c# try-catch

6
推荐指数
2
解决办法
185
查看次数

为什么这两个函数没有返回相同的值?

请考虑此代码段并尝试猜测y1y2评估

static class Extensions
{
    public static Func<T> AsDelegate<T>(this T value)
    {
        return () => value;
    }
}
class Program
{
    static void Main(string[] args)
    {
        new Program();
    }

    Program()
    {
        double x = Math.PI;

        Func<double> ff = x.AsDelegate();
        Func<double> fg = () => x;

        x = -Math.PI;

        double y1 = ff();  // y1 = 3.141..
        double y2 = fg();  // y2 = -3.141..

    }
}
Run Code Online (Sandbox Code Playgroud)

您可能会说-Aha- double是一个值类型,因此扩展方法返回的值是main 的副本x.但是,当您将上述内容更改为类的委托时,结果仍然不同.例:

class Foo
{
    public …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods delegates

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

为什么不是C#的memberinfo()反射函数

sizeof()typeof(),但为什么不memberinfo()返回的实例System.Reflection.MemberInfo为代码,以便在反射代码,以帮助选择的一部分.

例:

Program() 
{
       Type t = typeof(Foo);

       Foo foo = new Foo();
       PropertyInfo pi = memberinfo(Foo.Name) as PropertyInfo;
       // or shall it be like this
       // PropertyInfo pi = memberinfo(foo.Name) as PropertyInfo;

       string name = pi.GetValue(foo, null);
}
Run Code Online (Sandbox Code Playgroud)

我试图了解是否有一个根本原因可以在C#规范中实现.

我不是在抨击任何事情,我只是在做一些一厢情愿的想法,所以请善待.

c# reflection language-design

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

求解约束线性方程组

我有一个y = Ax + b形式的方程组,其中y,xb是n×1向量,A是×n(对称)矩阵.

所以这里是皱纹.并非所有的x都是未知的.指定了某些x行,并且y的相应行未知.以下是一个例子

| 10  |   |  5  -2  1 | | * |   | -1 |
|  *  | = | -2   2  0 | | 1 | + |  1 |
|  1  |   |  1   0  1 | | * |   |  2 |
Run Code Online (Sandbox Code Playgroud)

其中,*指定未知数.

我已经为Fortran中的上述问题构建了一个求解器,但是我想知道是否有一个不错的鲁棒求解器作为Lapack或MLK的一部分用于这些类型的问题?


我的求解器基于一个排序矩阵,称为根据已知和未知pivot = [1,3,2]重新排列x …

fortran matrix linear-algebra lapack fortran95

5
推荐指数
1
解决办法
3281
查看次数

如何在F#中添加两个数值数组

我对F#完全不熟悉.我搜索了高低,但我找不到我想要的例子.

let A = [| 1.0, 2.0, 3.0, 4.0 |];; //maybe delimiter with ;
let B = [| 4.0, 3.5, 2.5, 0.5 |];;

let C = A + B;; //how do I define the addition operator for arrays?
// expect C=[| 5.0, 5.5, 5.5, 4.5 |]
Run Code Online (Sandbox Code Playgroud)

我已经接近这个帖子了,但这不是我想要的.

arrays f# operator-overloading

4
推荐指数
1
解决办法
1150
查看次数