| 783 | } |
| 784 | |
| 785 | DenseMatrix getErrorNorms(const Function *exact, const Function *approx, const std::vector<std::vector<double>> &points) |
| 786 | { |
| 787 | assert(exact->getNumVariables() == approx->getNumVariables()); |
| 788 | |
| 789 | DenseVector normOneValVec(points.size()); |
| 790 | DenseVector normTwoValVec(points.size()); |
| 791 | DenseVector normInfValVec(points.size()); |
| 792 | |
| 793 | DenseVector normOneJacVec(points.size()); |
| 794 | DenseVector normTwoJacVec(points.size()); |
| 795 | DenseVector normInfJacVec(points.size()); |
| 796 | |
| 797 | DenseVector normOneHesVec(points.size()); |
| 798 | DenseVector normTwoHesVec(points.size()); |
| 799 | DenseVector normInfHesVec(points.size()); |
| 800 | |
| 801 | int i = 0; |
| 802 | for (auto &point : points) { |
| 803 | DenseVector x = vecToDense(point); |
| 804 | |
| 805 | { |
| 806 | DenseMatrix exactValue(1,1); |
| 807 | exactValue(0,0) = exact->eval(x); |
| 808 | DenseMatrix approxValue(1,1); |
| 809 | approxValue(0,0) = approx->eval(x); |
| 810 | DenseMatrix error = exactValue - approxValue; |
| 811 | |
| 812 | normOneValVec(i) = getOneNorm(error); |
| 813 | normTwoValVec(i) = getTwoNorm(error); |
| 814 | normInfValVec(i) = getInfNorm(error); |
| 815 | } |
| 816 | |
| 817 | { |
| 818 | auto exactJacobian = exact->evalJacobian(x); |
| 819 | auto approxJacobian = approx->evalJacobian(x); |
| 820 | auto errorJacobian = exactJacobian - approxJacobian; |
| 821 | |
| 822 | normOneJacVec(i) = getOneNorm(errorJacobian); |
| 823 | normTwoJacVec(i) = getTwoNorm(errorJacobian); |
| 824 | normInfJacVec(i) = getInfNorm(errorJacobian); |
| 825 | } |
| 826 | |
| 827 | { |
| 828 | auto exactHessian = exact->evalHessian(x); |
| 829 | auto approxHessian = approx->evalHessian(x); |
| 830 | auto errorHessian = exactHessian - approxHessian; |
| 831 | |
| 832 | normOneHesVec(i) = getOneNorm(errorHessian); |
| 833 | normTwoHesVec(i) = getTwoNorm(errorHessian); |
| 834 | normInfHesVec(i) = getInfNorm(errorHessian); |
| 835 | } |
| 836 | |
| 837 | i++; |
| 838 | } |
| 839 | |
| 840 | DenseMatrix errorNorms(3,3); |
| 841 | errorNorms(0,0) = getOneNorm(normOneValVec); |
| 842 | errorNorms(0,1) = getTwoNorm(normTwoValVec); |
no test coverage detected