100 Helloslanguages
Home / Languages / GNU Octave

GNU Octave

1988fraglet
general-purposeimperativearray.m
docker run --rm --platform="linux/amd64" 100hellos/octave:latest

MCP + fragletc

MCPstdinargs
This language supports code execution via MCP and the fragletc CLI. Stdin piping and argument passing are both supported.
Install fragletc →

GNU Octave is a high-level programming language primarily intended for scientific computing and numerical analysis. It is largely compatible with MATLAB, making it an excellent free and open-source alternative for mathematical computations.

About Octave

Octave was originally conceived in 1988 by John W. Eaton as a companion to a graduate-level textbook on chemical reactor design. The name "Octave" is a reference to Octave Levenspiel, a professor of chemical engineering who inspired the project. The language has evolved far beyond its original chemical engineering roots to become a powerful tool for:

  • Linear algebra operations - Matrix operations are first-class citizens
  • Numerical analysis - Solving differential equations, optimization problems
  • Signal processing - Digital filter design, spectral analysis
  • Data visualization - 2D and 3D plotting capabilities
  • Scientific computing - Statistics, machine learning, and more

Language Features

MATLAB Compatibility

Octave aims for compatibility with MATLAB, meaning most MATLAB scripts will run unchanged in Octave. This makes it an excellent choice for:

  • Students learning numerical computing
  • Researchers needing MATLAB functionality without licensing costs
  • Organizations migrating from proprietary to open-source tools

Matrix-Oriented Programming

Like MATLAB, Octave treats matrices as fundamental data types:

# Create a 3x3 matrix
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]

# Matrix multiplication
B = A * A

# Element-wise operations
C = A .* A  # Note the dot notation

Rich Mathematical Functions

Octave includes thousands of built-in functions for mathematical operations:

# Trigonometric functions
sin(pi/2)

# Linear algebra
eig([1, 2; 3, 4])  # Eigenvalues

# Statistics
mean([1, 2, 3, 4, 5])

The Hello World Code

Our implementation is elegantly simple:

#!/usr/bin/env octave

printf("Hello World!\n");

Code Explanation

  • Shebang line: #!/usr/bin/env octave allows the script to be executed directly
  • printf function: Unlike MATLAB's fprintf, Octave's printf is modeled after C's printf
  • Semicolon: Suppresses output in interactive mode (good practice even in scripts)
  • Newline: \n ensures proper line termination

Why This Matters

This simple "Hello World!" demonstrates several important aspects of Octave:

  1. Script execution: Octave can run as a scripting language, not just interactively
  2. C-style functions: Shows Octave's heritage and low-level capabilities
  3. Cross-platform: The same script works on Windows, macOS, and Linux
  4. Text processing: While known for numerical work, Octave handles string operations too

Octave vs. MATLAB

Feature Octave MATLAB
Cost Free Commercial license required
Source Open source Proprietary
Syntax 95%+ compatible Reference implementation
Toolboxes Limited Extensive commercial toolboxes
Performance Good Optimized for specific workflows

Beyond Hello World

After running this container, you might want to explore:

  • Matrix operations: Try creating and manipulating matrices
  • Plotting: Octave has excellent plotting capabilities (though GUI is disabled in this container)
  • Numerical methods: Implement algorithms for solving equations
  • Signal processing: Work with digital signals and filters
  • Statistics: Analyze data sets and compute statistical measures

Fun Fact

Octave's development has been remarkably stable and consistent. The project has maintained backward compatibility while continuously adding features, making it one of the most reliable scientific computing platforms available. Its commitment to MATLAB compatibility has made it a bridge between proprietary and open-source scientific computing.

Hello World

#!/usr/bin/env octave

% BEGIN_FRAGLET
printf("Hello World!\n");
% END_FRAGLET

Coding Guide

Language Version

GNU Octave 8.x (MATLAB-compatible)

Execution Model

  • Interpreted language, runs via Octave interpreter
  • Code executes at the top level
  • MATLAB-compatible syntax and behavior
  • Code runs sequentially from top to bottom

Key Characteristics

  • Matrix-oriented programming (matrices are first-class)
  • Case-sensitive
  • Dynamic typing
  • MATLAB-compatible syntax

Fragment Authoring

Write valid Octave/MATLAB statements or expressions. Your fragment becomes the script body. Code runs at the top level of the script.

Available Packages

Standard Octave library is available. No additional packages are pre-installed. Package installation is possible but not typical for fraglet contexts (installs are ephemeral and add latency).

Common Patterns

  • Print: printf("message\n") or disp("message")
  • Variables: x = 10 or y = [1, 2, 3]
  • Functions: function result = name(x) result = x * 2; end
  • Matrices: [1, 2, 3; 4, 5, 6] or 1:10
  • Element-wise operations: A .* B (note the dot)
  • Matrix operations: A * B (matrix multiplication)

Examples

# Simple output
printf("Hello, World!\n");

# Matrix operations and linear algebra
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = A * A;
printf("Matrix product sum: %d\n", sum(B(:)));

# Element-wise operations (note the dot operator)
x = 1:5;
y = x .^ 2;
printf("Sum of squares: %d\n", sum(y));

# Matrix indexing and slicing
M = [1, 2, 3; 4, 5, 6; 7, 8, 9];
printf("First row: %s\n", mat2str(M(1, :)));
printf("Diagonal: %s\n", mat2str(diag(M)));

# Built-in mathematical functions
angles = [0, pi/4, pi/2];
sines = sin(angles);
printf("Sines: %s\n", mat2str(sines, 3));

Caveats

  • Fragments must be valid Octave/MATLAB that executes without errors
  • Variables are scoped to the script level
  • Use printf() with \n for output, or disp() for simple messages
  • Remember that Octave is matrix-oriented - many operations work on matrices
  • Element-wise operations require the dot operator (.^, .*, ./)
  • Make fragments idempotent—repeated runs should succeed without manual cleanup

Fraglet Scripts

Echo Args

#!/usr/bin/env -S fragletc --vein=octave
args = argv();
printf("Args:");
for i = 1:length(args)
    printf(" %s", args{i});
end
printf("\n");

Matrix

#!/usr/bin/env -S fragletc --vein=octave
A = [1, 2, 3; 4, 5, 6];
B = [7, 8; 9, 10; 11, 12];
C = A * B;
printf("Matrix A:\n");
disp(A);
printf("Matrix product A*B:\n");
disp(C);

Stdin Upper

#!/usr/bin/env -S fragletc --vein=octave
line = fgetl(stdin);
printf("%s\n", toupper(line));

Test

#!/usr/bin/env -S fragletc --vein=octave
printf("Hello World!\n");

Connections

influenced by

Container Info

image100hellos/octave:latest
build scheduleSaturday
fragletenabled