That was very helpful, Allin! Thank you for this.
This problem is solved now.
Best,
Artur
Am 07.04.2016 um 20:04 schrieb Allin Cottrell:
<output>
? catch mI = matI(mat)
In regard to function matI:
Warning: "catch" should not be used on calls to user-defined functions
</output>
This should be taken seriously. For "catch" to work reliably it must be
applied directly to a built-in command or function. On return from a
user-defined function it's too late to ensure integrity of gretl's state
in case of error, so (although you may be OK in simple cases) problems
such as you mention are to be expected.
You should move the "catch" into the function where inv() is called.
Here's one possible approach:
<hansl>
function matrix try_invert (matrix m, scalar *err)
catch matrix ret = inv(m)
err = $error
if err
ret = {}
endif
return ret
end function
mat = zeros(2,2)
scalar err = 0
mI = try_invert(mat, &err)
if !err
printf "WORKS\n"
else
printf "FAILS\n"
endif
</hansl>
And here's another:
<hansl>
function scalar try_invert (matrix m, matrix *minv)
catch minv = inv(m)
return $error
end function
mat = zeros(2,2)
matrix minv
err = try_invert(mat, &minv)
if !err
printf "WORKS\n"
else
printf "FAILS\n"
endif
</hansl>
Allin
_______________________________________________
Gretl-devel mailing list
Gretl-devel(a)lists.wfu.edu
http://lists.wfu.edu/mailman/listinfo/gretl-devel