Mercurial > octave
changeset 31506:fb123529131b
maint: Merge stable to default.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Tue, 22 Nov 2022 20:38:35 +0100 |
parents | d006285b7509 (current diff) ec973756cb3a (diff) |
children | 6544a361e5ca |
files | |
diffstat | 5 files changed, 55 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/CMatrix.cc Tue Nov 22 08:23:44 2022 -0800 +++ b/liboctave/array/CMatrix.cc Tue Nov 22 20:38:35 2022 +0100 @@ -890,19 +890,24 @@ info = -1; else if (calc_cond) { - F77_INT zgecon_info = 0; - - // Now calculate the condition number for non-singular matrix. - char job = '1'; - Array<double> rz (dim_vector (2 * nc, 1)); - double *prz = rz.fortran_vec (); - F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm, - rcon, F77_DBLE_CMPLX_ARG (pz), prz, zgecon_info - F77_CHAR_ARG_LEN (1))); - - if (zgecon_info != 0) - info = -1; + if (octave::math::isnan (anorm)) + rcon = octave::numeric_limits<double>::NaN (); + else + { + F77_INT zgecon_info = 0; + + // Now calculate the condition number for non-singular matrix. + char job = '1'; + Array<double> rz (dim_vector (2 * nc, 1)); + double *prz = rz.fortran_vec (); + F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1), + nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, + anorm, rcon, F77_DBLE_CMPLX_ARG (pz), prz, + zgecon_info F77_CHAR_ARG_LEN (1))); + + if (zgecon_info != 0) + info = -1; + } } if ((info == -1 && ! force)
--- a/liboctave/array/fCMatrix.cc Tue Nov 22 08:23:44 2022 -0800 +++ b/liboctave/array/fCMatrix.cc Tue Nov 22 20:38:35 2022 +0100 @@ -893,19 +893,24 @@ info = -1; else if (calc_cond) { - F77_INT cgecon_info = 0; - - // Now calculate the condition number for non-singular matrix. - char job = '1'; - Array<float> rz (dim_vector (2 * nc, 1)); - float *prz = rz.fortran_vec (); - F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1), - nc, F77_CMPLX_ARG (tmp_data), nr, anorm, - rcon, F77_CMPLX_ARG (pz), prz, cgecon_info - F77_CHAR_ARG_LEN (1))); - - if (cgecon_info != 0) - info = -1; + if (octave::math::isnan (anorm)) + rcon = octave::numeric_limits<float>::NaN (); + else + { + F77_INT cgecon_info = 0; + + // Now calculate the condition number for non-singular matrix. + char job = '1'; + Array<float> rz (dim_vector (2 * nc, 1)); + float *prz = rz.fortran_vec (); + F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1), + nc, F77_CMPLX_ARG (tmp_data), nr, anorm, + rcon, F77_CMPLX_ARG (pz), prz, cgecon_info + F77_CHAR_ARG_LEN (1))); + + if (cgecon_info != 0) + info = -1; + } } if ((info == -1 && ! force)
--- a/scripts/ode/ode23.m Tue Nov 22 08:23:44 2022 -0800 +++ b/scripts/ode/ode23.m Tue Nov 22 20:38:35 2022 +0100 @@ -370,23 +370,23 @@ %! ## x == 2: select y(2) %! ## x == 3: select y([1,2]) %! persistent y_last -%! if strcmp (flag, "init") +%! if (strcmp (flag, "init")) %! y_last = y; -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (y) == 1); %! elseif (x == 3) %! assert (length (y) == 2); %! endif -%! elseif strcmp (flag, "done") +%! elseif (strcmp (flag, "done")) %! y_exp = fref ().'; %! if (x < 3) %! assert (y_last, y_exp(x), 5e-4); %! else %! assert (y_last, y_exp, 5e-4); %! endif -%! else # flag == "" +%! else # flag == "" %! y_last = y(:, end); -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (t) == length (y)); %! else %! assert (2 * length (t) == length (y(:))); @@ -459,7 +459,7 @@ %! opt = odeset ("AbsTol", 1e-8, "RelTol", 1e-8); %! sol = ode23 (@fpol, [0 2], [2 0], opt); %! assert ([sol.x(end); sol.y(:,end)], [2; fref'], 1e-3); -%!test # hermite_cubic_interpolation +%!test # hermite_cubic_interpolation %! opt = odeset ("RelTol", 1e-8, "NormControl", "on"); %! [t,sol] = ode23(@(t,x)[x(2);x(1)],linspace(0,1),[1;0],opt); %! assert (max (abs (sol(:,1)-cosh (t))),0,1e-6); @@ -538,7 +538,7 @@ ## "MvPattern" ## "Vectorized" -%!test # Check that imaginary part of solution does not get inverted +%!test # Check that imaginary part of solution does not get inverted %! sol = ode23 (@(x,y) 1, [0 1], 1i); %! assert (imag (sol.y), ones (size (sol.y))); %! [x, y] = ode23 (@(x,y) 1, [0 1], 1i);
--- a/scripts/ode/ode23s.m Tue Nov 22 08:23:44 2022 -0800 +++ b/scripts/ode/ode23s.m Tue Nov 22 20:38:35 2022 +0100 @@ -404,23 +404,23 @@ %! ## x == 2: select y(2) %! ## x == 3: select y([1,2]) %! persistent y_last -%! if strcmp (flag, "init") +%! if (strcmp (flag, "init")) %! y_last = y; -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (y) == 1); %! elseif (x == 3) %! assert (length (y) == 2); %! endif -%! elseif strcmp (flag, "done") +%! elseif (strcmp (flag, "done")) %! y_exp = fref ().'; %! if (x < 3) %! assert (y_last, y_exp(x), 1e-4); %! else %! assert (y_last, y_exp, 1e-4); %! endif -%! else # flag == "" +%! else # flag == "" %! y_last = y(:,end); -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (t) == length (y)); %! else %! assert (2 * length (t) == length (y(:))); @@ -547,7 +547,7 @@ ## "MvPattern" ## "NonNegative" -%!test # Check that imaginary part of solution does not get inverted +%!test # Check that imaginary part of solution does not get inverted %! sol = ode23s (@(x,y) 1, [0 1], 1i); %! assert (imag (sol.y), ones (size (sol.y))); %! [x, y] = ode23s (@(x,y) 1, [0 1], 1i);
--- a/scripts/ode/ode45.m Tue Nov 22 08:23:44 2022 -0800 +++ b/scripts/ode/ode45.m Tue Nov 22 20:38:35 2022 +0100 @@ -369,23 +369,23 @@ %! ## x == 2: select y(2) %! ## x == 3: select y([1,2]) %! persistent y_last -%! if strcmp (flag, "init") +%! if (strcmp (flag, "init")) %! y_last = y; -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (y) == 1); %! elseif (x == 3) %! assert (length (y) == 2); %! endif -%! elseif strcmp (flag, "done") +%! elseif (strcmp (flag, "done")) %! y_exp = fref ().'; %! if (x < 3) %! assert (y_last, y_exp(x), 1e-4); %! else %! assert (y_last, y_exp, 1e-4); %! endif -%! else # flag == "" +%! else # flag == "" %! y_last = y(:,end); -%! if ((x == 1) || (x == 2)) +%! if (x == 1 || x == 2) %! assert (length (t) == length (y)); %! else %! assert (2 * length (t) == length (y(:))); @@ -550,7 +550,7 @@ ## "MvPattern" ## "Vectorized" -%!test # Check that imaginary part of solution does not get inverted +%!test # Check that imaginary part of solution does not get inverted %! sol = ode45 (@(x,y) 1, [0 1], 1i); %! assert (imag (sol.y), ones (size (sol.y))); %! [x, y] = ode45 (@(x,y) 1, [0 1], 1i, odeset ("Refine", 1));