Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Octave使用FAQ

Octave简介

Octave 是一个以矩阵与数值计算为核心的科学计算工具,语法与 MATLAB 高度兼容,免费、开源、跨平台。在物理模拟开发中,可以先通过Octave进行物理公式的数值验证,然后在把算法写成C++。下面这个图描述了Octave在物理模拟开发中所处的位置:

物理公式 / 推导
        ↓
Octave:数值验证 / 行为观察
        ↓
C++ / UE / 引擎实现
        ↓
Demo 场景验证

Octave使用原则

  • 一个脚本,只验证一个问题。
  • 变量名与C++一致。
  • 使用Octave验证引擎代码原理。

Octave在VS Code中配置方法

  1. 安装Octave,下载地址:https://www.gnu.org/software/octave/。

  2. 确认命令可用。

octave --version

确保环境变量添加到PATH中

C:\Program Files\GNU Octave\Octave-10.3.0\mingw64\bin
  1. 在Vscode商店中,添加插件Octave, Octave Language和Octave Debugger.

  2. 新建测试项目test.m,绘制不同的加速度的自由落体运行曲线,并显示保存成svg格式图片。

%% test.m
% 绘制不同重力加速度下的自由落体曲线,并保存为 SVG 文件

clc; clear; close all;

% -------------------------
% 配置参数
% -------------------------
g_list = [9.81, 1.62, 3.71];   % 地球、月球、火星 (m/s^2)
labels = {'Earth', 'Moon', 'Mars'};
t_max = 5;                     % 模拟时间 (秒)
dt = 0.01;                      % 时间步长

% -------------------------
% 生成时间序列
% -------------------------
t = 0:dt:t_max;

% -------------------------
% 绘制曲线
% -------------------------
figure;
hold on;
colors = ['r', 'b', 'g'];

for i = 1:length(g_list)
    g = g_list(i);
    y = 0.5 * g * t.^2;       % 自由落体公式
    plot(t, y, 'Color', colors(i), 'LineWidth', 2);
end

% -------------------------
% 图形美化
% -------------------------
xlabel('Time (s)');
ylabel('Height (m)');
title('Free Fall under Different Gravity');
legend(labels, 'Location', 'northwest');
grid on;

% -------------------------
% 保存为 SVG 文件
% -------------------------
svg_filename = fullfile(pwd, 'free_fall.svg');  % 保存到当前目录
print(svg_filename, '-dsvg');
fprintf('SVG saved to %s\n', svg_filename);

% -------------------------
% 保持窗口
% -------------------------
pause;  % 阻塞,防止 CLI 下图像闪退

Octave常见命令总结

整理一份实用清单,分为 矩阵操作 / 数值计算 / 绘图 / 辅助命令,并结合物理模拟场景说明。

矩阵和数组操作

命令说明示例
zeros(n,m)创建 n×m 的零矩阵M = zeros(3,3);
ones(n,m)创建全 1 矩阵v = ones(3,1);
eye(n)单位矩阵I = eye(3);
size(A)返回矩阵尺寸[r,c] = size(M);
length(v)向量长度n = length(v);
A'转置矩阵vT = v';
inv(A)矩阵求逆M_inv = inv(M);
det(A)行列式d = det(M);
diag(v)对角矩阵 / 提取对角D = diag([1 2 3]);
sum(A)矩阵列求和s = sum(F);
prod(A)矩阵列求积p = prod(v);

数值计算和函数操作

命令说明示例
linspace(a,b,n)创建 n 个等间距点t = linspace(0,5,100);
: (冒号运算符)等步长向量t = 0:0.01:5;
sqrt(x)开平方v = sqrt(2*g*h);
abs(x)绝对值v = abs(v);
sum, mean, max, min常用统计v_mean = mean(v);
norm(v)向量范数v_len = norm(v);
dot(a,b)点积d = dot(F,r);
cross(a,b)叉积c = cross(r, F);
eig(A)特征值[V,D] = eig(M);
inv(A)pinv(A)矩阵逆 / 伪逆J_pinv = pinv(J);
rand, randn随机数生成noise = randn(3,1);

绘图和可视化

命令说明示例
plot(x,y)绘制二维曲线plot(t,y);
plot3(x,y,z)三维曲线plot3(X,Y,Z);
figure新建图形窗口figure; plot(t,y);
hold on/off保持多条曲线hold on; plot(t2,y2);
xlabel('text')ylabel('text')zlabel('text')坐标轴标签xlabel('Time (s)');
title('text')图形标题title('Free Fall');
legend({'a','b'})图例legend({'Earth','Moon'});
grid on/off网格显示grid on;
axis([xmin xmax ymin ymax])设置坐标轴axis([0 5 0 50]);
pause(t)阻塞显示pause; 用于 CLI 绘图防止闪退
saveas(gcf,'file.svg')保存图像saveas(gcf,'freefall.svg');
print('file.svg','-dsvg')推荐保存 SVGprint('freefall.svg','-dsvg');

文本和脚本操作

命令说明示例
load('file.mat')加载数据load('simulation.mat');
save('file.mat','var1','var2')保存数据save('results.mat','t','y');
run('script.m')执行脚本run('Box.m');
edit script.m打开编辑器edit test.m;

控制流程

命令说明示例
for i = 1:N ... end循环for i=1:100; y(i)=0.5*g*t(i)^2; end
while condition ... end循环while norm(F)>1e-5; ... end
if ... elseif ... else ... end条件if x>0 ... else ... end
break退出循环if t>5, break; end
continue跳过本次循环if y<0, continue; end

线性代数求解

命令说明示例
A\b解线性方程组v = M\F;
pinv(A)*b伪逆求解v = pinv(J)*C;
eig(A)特征值分析[V,D] = eig(M);
svd(A)奇异值分解[U,S,V] = svd(J);

调整辅助命令

命令说明
disp(var)打印变量
fprintf(...)格式化输出
keyboard暂停执行进入命令行(类似断点)
who / whos查看当前变量