C# Bernstein算法-未处理的异常用户

C# Bernstein算法-未处理的异常用户,c#,C#,我试图在C#中实现Bernstein多项式算法 算法如下: k从0变为n,而n可以从0变为无穷大(在我的代码中,n从0变为3) 在我的代码中,n被命名为p; 在我的代码中,t被命名为i-1 这是我的代码: double nchoosek = 1; double ti = 0; // Change of basis double tf = 1; // Change of basis double tt; doub

我试图在C#中实现Bernstein多项式算法

算法如下:

k从0变为n,而n可以从0变为无穷大(在我的代码中,n从0变为3)

在我的代码中,n被命名为p; 在我的代码中,t被命名为i-1

这是我的代码:

        double nchoosek = 1;
        double ti = 0;  // Change of basis
        double tf = 1;  // Change of basis
        double tt;
        double Bernst;
        List<double> Bernste = new List<double>();
        List<List<double>> Bernstein = new List<List<double>>();

        for (int i =1;  i <= p+1; i++)
        {
            nchoosek *= p - (p - i);
            nchoosek /= i;
            for (double t = 0; t < 1; t += 0.05)
            {
                tt = (t - ti) / (tf - ti);  // Change of basis
                Bernst = nchoosek * Math.Pow((1 - tt), (p - (i-1))) * Math.Pow((tt), (i-1));
                Bernste.Add(Bernst);
            }
            Bernstein[i] = Bernste;
        }
double-nchoosek=1;
双ti=0;//基础变更
双tf=1;//基础变更
双tt;
双伯恩斯特;
List Bernste=新列表();
List Bernstein=新列表();

对于(inti=1;i这是因为您试图通过索引访问
Bernstein
列表中的元素(我认为您正在尝试添加一个元素)

只需使用
添加

Bernstein.Add(Bernste);
就像你以前写过几行一样

重要提示:在内部循环之前,您需要再次初始化
Bernste
列表,这样您就不会反复添加其他元素:

for (int i =1;  i <= p+1; i++)
{
  nchoosek *= p - (p - i);
  nchoosek /= i;
  Bernste = new List<double>();
  for (double t = 0; t < 1; t += 0.05)
  {
    tt = (t - ti) / (tf - ti);  // Change of basis
    Bernst = nchoosek * Math.Pow((1 - tt), (p - (i-1))) * Math.Pow((tt), (i-1));
    Bernste.Add(Bernst);
  }
  Bernstein.Add(Bernste);
}

for(inti=1;i这是因为您试图通过索引访问
Bernstein
列表中的元素(我认为您正在尝试添加元素)

只需使用
添加

Bernstein.Add(Bernste);
就像你以前写过几行一样

重要提示:在内部循环之前,您需要再次初始化
Bernste
列表,这样您就不会反复添加其他元素:

for (int i =1;  i <= p+1; i++)
{
  nchoosek *= p - (p - i);
  nchoosek /= i;
  Bernste = new List<double>();
  for (double t = 0; t < 1; t += 0.05)
  {
    tt = (t - ti) / (tf - ti);  // Change of basis
    Bernst = nchoosek * Math.Pow((1 - tt), (p - (i-1))) * Math.Pow((tt), (i-1));
    Bernste.Add(Bernst);
  }
  Bernstein.Add(Bernste);
}

for(int i=1;i)您的
Bernstein
集合完全为空。因此您无法对其执行
[i]
。(p-(i-1)最终会变成一个大负数。因此,您的
Bernstein
集合完全为空。因此您无法对其执行
[i]
。(p-(i-1)最终会变成一个大的负数。所以你会得到一个非常大的数并溢出。嗨@MichałTurczyn谢谢你的澄清。我不明白的是如何将Bernste值放入Bernstein的不同列表中。我的意思是..让我们假设我的代码中有p=3。在第一次迭代I=1之后,我不想o将在Bernste中计算的所有值放入Bernstein[1]。当迭代i=2发生时,我想将在Bernstein[2]中计算的所有值放入Bernstein[2],依此类推。@RobertoRuggeri只需在Bernstein列表上使用Add方法,如建议的那样:)运行它并亲自查看:)如果我添加Bernste=new list();在您建议我执行的操作中,我的最终Bernstein列表为空。如果我不添加它并使用。在Bernstein列表中添加,我将收到4个具有相同值的列表:(Hi@MichałTurczyn感谢您的澄清。我不明白的是如何将Bernste值放入不同的Bernstein列表中。我的意思是……假设我的代码中有p=3。在I=1的第一次迭代后,我想将Bernste中计算的所有值放入Bernstein[1]。当迭代i=2发生时,我想将在Bernste中计算的所有值放入Bernstein[2]中,依此类推。@RobertoRuggeri只需在Bernstein列表上使用Add方法,如建议的:)运行它并亲自查看:)如果我添加Bernste=new list();在您建议我执行的操作中,我的最终Bernstein列表为空。如果我不添加它并使用。在Bernstein列表中添加,我将收到4个具有相同值的列表:(