⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_real_polynomial.cxx

📁 InsightToolkit-1.4.0(有大量的优化算法程序)
💻 CXX
字号:
#include <vcl_iostream.h>

#include <testlib/testlib_test.h>
#include <vnl/vnl_real_polynomial.h>
#include <vcl_cmath.h>

void test_real_polynomial()
{
  vnl_real_polynomial f1(3),f2(4);

  for (int i=0;i<=f1.degree();++i) f1[i]=i+1; // f1 = X^2 + 2X + 3
  f1.print(vcl_cout);
  for (int i=0;i<=f2.degree();++i) f2[i]=2*i+1; // f2 = X^3 + 3X^2 + 5X + 7
  f2.print(vcl_cout);

  vnl_real_polynomial f3 = f1+f2;
  f3.print(vcl_cout);
  TEST("f1+f2=f3",f1.evaluate(2.5)+f2.evaluate(2.5), f3.evaluate(2.5));
  // Evaluating in 2.5 is exact, since 2.5 is exactly representable (binary 10.1)

  vnl_real_polynomial f4 = f1-f2;
  f4.print(vcl_cout);
  TEST("f1-f2=f4",f1.evaluate(2.5)-f2.evaluate(2.5), f4.evaluate(2.5));

  vnl_real_polynomial f5 = f1*f2;
  f5.print(vcl_cout);

  TEST("f1*f2 has correct degree",f5.degree()==(f1.degree()+f2.degree()),true);

  TEST("f1*f2=f5",f1.evaluate(2.5)*f2.evaluate(2.5), f5.evaluate(2.5));

  vnl_real_polynomial f1d = f1.derivative();
  f1d.print(vcl_cout);
  vnl_real_polynomial f2d = f2.derivative();
  f2d.print(vcl_cout);

  TEST("Derivative", f5.derivative(), f1d*f2+f2d*f1);

  vnl_real_polynomial f5p = (f1d*f2+f2d*f1).primitive();
  f5p.print(vcl_cout);

  TEST("Primitive", f5p, f5-f5.evaluate(0.0));

  TEST("Integral",vcl_fabs(3*f1.evaluate_integral(2.0)-70)<1e-6, true);

  TEST("RMS difference(f1,f2) is zero",vnl_rms_difference(f1,f1,0,1)<1e-8,true);
}

TESTMAIN(test_real_polynomial);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -