fminunc — Find unconstrained local minima in MATLAB and RunMat.
x = fminunc(fun, x0) minimizes a finite real scalar objective starting from x0. Scalar guesses return scalars, and vector or array guesses return solutions with the same shape as x0.
Syntax
x = fminunc(fun, [0; 0; 0])How fminunc works
- Uses a host-side BFGS quasi-Newton method with a strong-Wolfe line search.
- When
SpecifyObjectiveGradientis false or omitted, gradients are estimated with forward finite differences. - When
SpecifyObjectiveGradientis true, the objective callback is called as[f, g] = fun(x)andgmust contain one gradient entry per element ofx. - Options are supplied as a struct, usually from
optimoptionsoroptimset.TolX,TolFun,MaxIter,MaxFunEvals,Display,Algorithm, andSpecifyObjectiveGradientare accepted. - Supported
Algorithmvalues are'quasi-newton'and'bfgs'; trust-region mode is not enabled in this implementation. - Multi-output forms return
x,fval,exitflag,output,grad, and an approximate Hessian.
Does RunMat run fminunc on the GPU?
The builtin registers ResidencyPolicy::GatherImmediately because BFGS iterations need scalar objective values, gradient vectors, and adaptive line-search decisions on the CPU.
Providers do not implement a direct fminunc hook; acceleration remains available inside user callback computations.
GPU memory and residency
fminunc is a host-side optimization sink. GPU-resident initial guesses are gathered before the solve, and objective callbacks may opt back into GPU work internally.
Examples
Minimize a quadratic vector objective
fun = @(x) sum((x - [1; 2; 3]).^2);
x = fminunc(fun, [0; 0; 0])Expected output:
x =
1.0000
2.0000
3.0000Use an objective gradient
fun = @(x) deal(sum((x - [1; 2]).^2), 2*(x - [1; 2]));
opts = optimoptions('fminunc', 'SpecifyObjectiveGradient', true);
[x, fval, exitflag, output, grad] = fminunc(fun, [0; 0], opts)Expected output:
x =
1.0000
2.0000
fval = 0
exitflag = 1Using fminunc with coding agents
Open a RunMat example with live inputs, then ask the agent to explain how fminunc changes the result.
Run a small fminunc example, explain the result, then change one input and compare the output.
FAQ
Does fminunc use the GPU?⌄
The optimizer state and line search run on the host because the solver repeatedly invokes user callbacks. The callback itself can use GPU-aware operations.
What is in the output struct?⌄
output contains iterations, funcCount, algorithm, firstorderopt, stepsize, and message fields.
Related Math functions
Elementwise
abs · angle · complex · conj · double · exp · expm1 · factorial · gamma · heaviside · hypot · imag · ldivide · log · log10 · log1p · log2 · minus · nextpow2 · plus · pow2 · power · rdivide · real · sign · single · sqrt · times
Trigonometry
acos · acosh · asin · asinh · atan · atan2 · atanh · cos · cosd · cosh · deg2rad · rad2deg · sin · sind · sinh · tan · tand · tanh
Reduction
all · any · cummax · cummin · cumprod · cumsum · cumtrapz · diff · gradient · max · mean · median · min · nnz · prod · std · sum · trapz · var
Structure
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how fminunc is executed, line by line, in Rust.
- View the source for fminunc in Rust on GitHub
- Learn how the RunMat runtime works
- Found a bug? Open an issue with a minimal reproduction.
About RunMat
RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.
- RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
- Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.