首页/新闻资讯/正文详情

吴恩达机器学习作业实战:MATLAB/Octave与Python双路径精解

发布时间:2026/9/25 2:13:14 来源:云帆数科 栏目:资讯中心
吴恩达机器学习作业实战:MATLAB/Octave与Python双路径精解
简介本资源是面向机器学习初学者与自学者的吴恩达《Machine Learning》课程配套学习包覆盖课程全部10周核心编程作业及系统性知识梳理特别适合需对照练习、查漏补缺或快速复盘的入门者。压缩包含1028个文件总计202.33MB其中623个MATLAB/Octave脚本.m实现算法主体逻辑61个Jupyter Notebook.ipynb含完整可运行代码与可视化示例如PCA人脸降维、K-means图像压缩44个PDF涵盖合并版作业题、课堂讲义及中文个人笔记另有103个.mat数据文件与146个.txt说明文档支撑实验复现。已有2529人下载学习内容组织清晰每份作业均提供无答案版用于自主训练、含答案版分三类实现基础版、优化版、向量化版并附Checkpoint检查点文件便于调试追踪中文笔记对公式推导、代码细节与常见报错做了针对性注解可直接打印用于离线研读。1. 吴恩达机器学习作业无答案与有答案各一版与个人笔记.zip这不是“刷完就扔”的练习包而是你构建监督学习直觉的底层训练场你下载过这个压缩包解压后看到ex1_linear_regression/、ex2_logistic_regression/、ex3_neural_networks/这些文件夹心里可能闪过两个念头一是“终于不用自己搭环境了”二是“这代码跑通就行反正考试不考 MATLAB”。但真正用过三遍以上的人会发现——吴恩达这七份作业本质是一套被精心压缩的监督学习认知操作系统从代价函数的几何形变到梯度下降在参数空间里的爬坡轨迹再到正则化如何像弹簧一样拉住权重发散全藏在computeCost.m和gradientDescent.m的 20 行代码里。它不教你怎么调参而是逼你亲手算出第一个偏导数、手写第一个 sigmoid 梯度、把theta theta - alpha * grad写成循环而非调库。无答案版是你的“思维负重训练器”有答案版是你调试时的“校准尺”而那份手写扫描的个人笔记——往往是某位学长在ex5_regularization.m旁边画的 L2 正则项惩罚面示意图比任何 PPT 都管用。适合刚学完微积分和线性代数、能写 for 循环但没 debug 过矩阵维度错的新手也适合已用 PyTorch 训过模型、却说不清为什么lambda0.01比0.1更稳的老手。这不是入门捷径而是你绕不开的“监督学习肌肉记忆”锻造炉。2. 从零启动用 MATLAB R2020b 或 Octave 6.4 复现线性回归作业的最小闭环吴恩达作业默认依赖 MATLAB但实际落地时MATLAB 许可证贵、部署重、学生机常卡在 license server 超时Octave 是更务实的选择——它不是“MATLAB 克隆”而是对这套教学代码生态最兼容的开源实现。我测试过 Octave 5.2 到 7.36.4 是当前最稳版本7.x 对fminunc支持有坑5.x 缺少scatter高级绘图参数。下面带你用 5 分钟跑通ex1验证环境是否 ready。2.1 环境准备Octave 安装与路径配置Windows / macOS 通用提示不要用pkg install signal之类命令装额外包——吴恩达作业只用基础语法装多了反而触发兼容问题。Windows 用户下载 Octave 6.4.0 for Windows 选octave-6.4.0-w64-installer.exe安装时勾选“Add Octave to the system PATH for all users”关键否则命令行打octave-cli找不到安装后打开 CMD输入octave-cli --version应返回GNU Octave, version 6.4.0macOS 用户M1/M2 芯片brew install octave6不要brew install octave那是 8.x若报libgccjit错误执行brew install gcc后重试验证octave-cli --no-gui --eval disp(octave_version())安装完成后在 Octave 命令行中执行addpath(D:\ml-exercises\ex1); % 替换为你解压后的 ex1 目录绝对路径 addpath(D:\ml-exercises\ex1\lib); % 必须加 lib 目录里面含 plotData.m 等工具函数注意路径分隔符用反斜杠\Windows或正斜杠/macOS不能混用addpath必须在ex1主目录和lib子目录都加否则plotData报错 “undefined function”。2.2 跑通ex1从数据加载到代价函数验证的四步链ex1的核心是单变量线性回归。我们跳过warmUpExercise.m纯矩阵操作热身直击主流程Step 1加载并可视化数据data load(ex1data1.txt); % 数据是两列人口万、利润万元 X data(:, 1); y data(:, 2); m length(y); % 样本数 plotData(X, y); % 调用 lib/plotData.m画散点图 xlabel(Population of City in 10,000s); ylabel(Profit in $10,000s);逻辑说明ex1data1.txt是纯文本每行x,yload自动转为 m×2 矩阵plotData封装了scatter绘图比裸写plot(X, y, rx)更易读。此处若报错 “No such file or directory”90% 是addpath没加对ex1目录。Step 2特征缩放与添加偏置项X [ones(m, 1), X]; % 在 X 左侧加一列 1对应 theta0 theta zeros(2, 1); % 初始化 theta [theta0; theta1] iterations 1500; alpha 0.01;参数说明ones(m,1)生成 m×1 全 1 列向量与原始 X 拼接后变成 m×2 矩阵theta是 2×1 列向量theta(1)对应截距项alpha0.01是经验值太大导致震荡如0.1太小收敛慢如0.001需 5000 次迭代。Step 3计算初始代价函数值J computeCost(X, y, theta); fprintf(With theta [0 ; 0], Cost computed %f\n, J); fprintf(Expected cost value (approx) 32.07\n);打开computeCost.m你会看到核心公式J 1/(2*m) * sum((X*theta - y).^2);逻辑说明X*theta是 m×1 预测向量X*theta - y是误差向量. ^2是逐元素平方不是矩阵平方sum求和后除2m。这是均方误差MSE的标量形式。若输出不是32.07检查X是否已加ones列、y是否为列向量size(y)应为m×1不是1×m。Step 4执行梯度下降并绘制收敛曲线theta gradientDescent(X, y, theta, alpha, iterations); fprintf(Theta found by gradient descent: %f %f\n, theta(1), theta(2)); % 绘制拟合直线 hold on; plot(X(:,2), X*theta, -) % X(:,2) 是原始人口列X*theta 是预测值 legend(Training data, Linear regression);关键观察gradientDescent.m中theta theta - (alpha/m) * (X * (X*theta - y))这一行就是批量梯度下降的矩阵形式。X * (X*theta - y)是对所有样本求和的梯度比 for 循环快 10 倍。运行后你将看到一条穿过散点云的直线且控制台输出theta ≈ [-3.63; 1.16]—— 这就是模型学到的规律人口每增 1 万利润增约 1.16 万元。3. 从 MATLAB 到 Python用 NumPy 重写ex2逻辑回归避开向量化陷阱ex2的核心是分类任务MATLAB 版用fminunc无约束优化自动求解最优theta但 Python 新手常陷入两个误区一是直接套用sklearn.LogisticRegression结果发现theta值和答案对不上二是手写梯度下降却忽略 sigmoid 梯度的链式法则。真正的迁移难点不在语法而在数学表达的等价性转换——尤其是fminunc默认用二阶导数Hessian加速而 NumPy 手写必须用一阶梯度 正确步长。3.1 数据预处理为什么ex2data1.txt的X必须标准化ex2data1.txt包含两列特征考试 1 分数、考试 2 分数和一列标签0/1。原始分数范围是0~100若不做缩放梯度下降会因特征量纲差异巨大而震荡exam1的梯度更新量级是1e-3exam2的梯度更新量级是1e-5导致theta1收敛快、theta2几乎不动。正确做法MATLAB 原版逻辑mu mean(X); sigma std(X); X_norm (X - mu) ./ sigma;Python 等价实现用 NumPy不依赖 sklearnimport numpy as np def feature_normalize(X): mu np.mean(X, axis0) # 按列求均值shape(2,) sigma np.std(X, axis0) # 按列求标准差shape(2,) X_norm (X - mu) / sigma return X_norm, mu, sigma # 加载数据 data np.loadtxt(ex2data1.txt, delimiter,) X data[:, :2] # 前两列是特征 y data[:, 2] # 第三列是标签 X_norm, mu, sigma feature_normalize(X) X_norm np.c_[np.ones(X_norm.shape[0]), X_norm] # 添加偏置列参数说明np.c_是列拼接比np.hstack更直观axis0确保按特征维度统计即对每个特征单独算均值/标准差mu和sigma必须保存因为预测时新样本也要用相同mu/sigma归一化。3.2 Sigmoid 与代价函数手写时最容易漏掉的三个细节sigmoid.m只有一行g 1.0 ./ (1.0 exp(-z));但 Python 版若直接写1 / (1 np.exp(-z))在z极大如 1000时会触发exp(1000)溢出返回inf。安全写法防溢出def sigmoid(z): # 对 z 0 和 z 0 分别处理避免 exp 溢出 g np.zeros(z.shape) g[z 0] 1 / (1 np.exp(-z[z 0])) g[z 0] np.exp(z[z 0]) / (1 np.exp(z[z 0])) return g逻辑说明当z 0时用exp(z)/(1exp(z))等价于1/(1exp(-z))但exp(z)不会溢出z-1000时exp(-1000)是极小正数非 0。代价函数costFunction.m的公式是$$ J(\theta) \frac{1}{m} \sum_{i1}^m \left[ -y^{(i)} \log(h_\theta(x^{(i)})) - (1-y^{(i)}) \log(1-h_\theta(x^{(i)})) \right] $$手写时常见错误❌np.log(sigmoid(X theta))—— 若sigmoid输出 0 或 1log(0)返回-inf✅ 应先 cliph np.clip(sigmoid(X theta), 1e-6, 1-1e-6)完整代价函数含梯度def cost_function(theta, X, y): m len(y) h sigmoid(X theta) h np.clip(h, 1e-6, 1-1e-6) # 防 log(0) J (-1/m) * (y.T np.log(h) (1-y).T np.log(1-h)) # 梯度注意是列向量shape(n1, 1) grad (1/m) * (X.T (h - y)) return J, grad参数说明X theta是矩阵乘法X为 m×(n1)theta为 (n1)×1结果 m×1h - y是误差向量X.T (h - y)是梯度公式 $\frac{1}{m} X^T (h-y)$ 的向量化实现grad必须是列向量否则scipy.optimize.minimize会报错。3.3 用scipy.optimize.minimize复现fminunc参数设置决定成败MATLAB 的fminunc默认用 BFGS 算法Python 中最接近的是scipy.optimize.minimize(methodBFGS)。但直接调用会失败因为minimize默认传入theta为 1D array而我们的cost_function需要列向量fminunc的GradObj选项默认开启minimize需显式设jacTrue正确调用方式from scipy.optimize import minimize initial_theta np.zeros(X_norm.shape[1]) # shape(3,)对应 theta0,theta1,theta2 # 包装函数minimize 传入 1D theta我们转成列向量 def cost_wrapper(theta_1d): theta theta_1d.reshape(-1, 1) # 转为 (3,1) 列向量 J, grad cost_function(theta, X_norm, y) return J, grad.flatten() # grad 必须是 1D array res minimize( funcost_wrapper, x0initial_theta, methodBFGS, jacTrue, # 告诉 minimize 我们提供梯度 options{maxiter: 400, disp: True} ) theta_opt res.x.reshape(-1, 1) # 最优 thetashape(3,1) print(fOptimized theta: {theta_opt.flatten()})逻辑说明res.x是 1D array必须reshape(-1,1)才能用于后续预测options[disp]设为True可实时看到每次迭代的fun值即J若J不降反升说明梯度计算有误maxiter400是保险值原版fminunc默认 400 次。4. 避坑指南吴恩达作业里 5 个让 80% 人卡超过 2 小时的硬核问题这些坑不是“粗心”而是作业设计者刻意埋下的认知校验点——它们暴露你是否真正理解矩阵运算、向量化和数值稳定性。跳过它们等于跳过监督学习的底层契约。4.1 现象ex3神经网络前向传播输出全是 NaN原因Theta1和Theta2初始化时用了rand而非rand缩放。原版rand(10, 20)生成 [0,1) 随机数但神经网络权重必须小范围初始化如 [-ε, ε]否则sigmoid输入过大导致梯度消失。解决严格按作业提示epsilon_init 0.12用Theta rand(L_out, 1 L_in) * 2 * epsilon_init - epsilon_init初始化。rand生成 [0,1)乘 2ε 后是 [0,2ε)减 ε 后才是 [-ε, ε]。4.2 现象ex4反向传播的delta3和delta2维度对不上原因delta3 a3 - y中y是 m×1 列向量但a3是 m×KK10 类矩阵直接相减触发广播错误。MATLAB 会隐式广播NumPy 默认不广播除非y是 m×1。解决确保y是 one-hot 编码。ex4的y原始是 1~10 的整数需转为 10 维向量y_vec np.eye(10)[y.astype(int)-1]y从 1 开始编号故减 1。4.3 现象ex5正则化代价函数J比未正则化还大原因正则项lambda/(2m) * sum(theta(2:end).^2)中theta(2:end)排除了theta(1)偏置项但 Python 版若写np.sum(theta[1:]**2)theta[1:]是从索引 1 开始没错但若theta是 1D arraytheta[1:]正确若是列向量(n,1)theta[1:]是(n-1,1)没问题。真正坑是lambda值单位错了——MATLAB 版lambda1对应 Python 的lambda1但有人误以为要除2m导致正则项被重复缩放。解决正则项写为(lambda / (2*m)) * np.sum(theta[1:]**2)lambda直接用作业给的值如 1不额外缩放。4.4 现象ex6SVM 的gaussianKernel输出全 0原因similarity exp(-norm(x1-x2)^2 / (2*sigma^2))中norm(x1-x2)是向量模长但x1,x2是行向量1×nx1-x2是 1×nnp.linalg.norm(x1-x2)正确若误用np.sqrt(np.sum((x1-x2)**2))也对。但常见错误是sigma设为 0.01而x1-x2差值约 1导致exp(-1/(2*0.0001)) exp(-5000) ≈ 0。解决sigma必须与特征尺度匹配。ex6data1.mat特征范围是 [-1,1]sigma0.1合理若sigma0.01改sigma0.1即可。4.5 现象ex7K-means 聚类中心初始化后idx全为 1原因idx zeros(m, 1)初始化正确但distances zeros(m, K)中K是聚类数若K3而distances只有 2 列后续min操作会出错。更隐蔽的是centroid初始化用X(randperm(size(X,1),K),:)但randperm(n,K)在 MATLAB 返回 K 个随机索引NumPy 对应np.random.choice(n, K, replaceFalse)若replaceTrue可能选重复行导致中心重合距离全等idx全为 1。解决centroids X[np.random.choice(X.shape[0], K, replaceFalse)]replaceFalse强制不重复。5. 笔记的真正价值把ex5正则化参数扫描做成可复用的验证模板很多人把“个人笔记”当成随手写的注释但真正高效的笔记是把作业里一次性实验固化成可复用的验证框架。以ex5为例原作业只让你试lambda0,1,10三个值但真实场景需要系统扫描lambda并画学习曲线。我习惯把这部分抽成独立脚本每次新项目直接复用——它不增加代码量却把“调参玄学”变成可追溯的工程动作。5.1 构建lambda扫描管道从数据分割到误差计算核心思想用ex5data1.mat的训练集X,y和交叉验证集Xval,yval对每个lambda训练模型记录训练误差J_train和验证误差J_val找到J_val最小的lambda。Python 实现基于ex5的trainLinearReg和linearRegCostFunctiondef learning_curve_lambda(X, y, Xval, yval, lambda_list): 输入训练集 X,y验证集 Xval,yvallambda 列表 输出J_train_list, J_val_list每个 lambda 对应的误差 m X.shape[0] J_train_list [] J_val_list [] for lmbda in lambda_list: # 训练模型用 trainLinearReg内部调用带正则的 cost function theta trainLinearReg(X, y, lmbda) # 计算训练误差注意不加正则项J_train 是原始代价 J_train linearRegCostFunction(X, y, theta, 0)[0] # lambda0 J_train_list.append(J_train) # 计算验证误差同样不加正则 J_val linearRegCostFunction(Xval, yval, theta, 0)[0] J_val_list.append(J_val) return np.array(J_train_list), np.array(J_val_list) # 使用示例 lambda_list [0, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10] J_train, J_val learning_curve_lambda(X, y, Xval, yval, lambda_list) # 绘图 plt.plot(lambda_list, J_train, b-, labelTrain) plt.plot(lambda_list, J_val, r-, labelCross Validation) plt.xlabel(Lambda) plt.ylabel(Error) plt.legend() plt.show() # 找最优 lambda opt_lambda lambda_list[np.argmin(J_val)] print(fOptimal lambda: {opt_lambda}, CV error: {np.min(J_val):.4f})逻辑说明linearRegCostFunction(X, y, theta, 0)中lambda0是关键——训练时用正则化防止过拟合但评估误差时必须去掉正则项否则J_train和J_val不可比np.argmin(J_val)返回最小验证误差对应的索引再查lambda_list得最优值。5.2 扩展为通用模板适配任意线性模型的正则化扫描上面脚本耦合了ex5的数据格式我把它升级为通用函数只需传入训练/验证数据和模型训练函数def hyperparam_scan(train_func, cost_func, X_train, y_train, X_val, y_val, param_name, param_values, param_defaultNone): 通用超参扫描函数 train_func: 训练函数签名 train_func(X, y, **kwargs) - theta cost_func: 代价函数签名 cost_func(X, y, theta, **kwargs) - J param_name: 超参名如 lambda 或 alpha param_values: 超参取值列表 param_default: 其他固定参数字典如 {max_iter: 1000} if param_default is None: param_default {} J_train_list [] J_val_list [] for val in param_values: # 构建训练参数 train_kwargs param_default.copy() train_kwargs[param_name] val theta train_func(X_train, y_train, **train_kwargs) # 计算误差cost_func 的超参设为 0 或默认值 cost_kwargs param_default.copy() cost_kwargs[param_name] 0 # 评估时不加正则 J_train cost_func(X_train, y_train, theta, **cost_kwargs)[0] J_val cost_func(X_val, y_val, theta, **cost_kwargs)[0] J_train_list.append(J_train) J_val_list.append(J_val) return np.array(J_train_list), np.array(J_val_list) # 复用示例扫描 Ridge 回归的 alpha from sklearn.linear_model import Ridge from sklearn.metrics import mean_squared_error def sklearn_ridge_train(X, y, alpha): model Ridge(alphaalpha, fit_interceptTrue) model.fit(X, y) return model def sklearn_ridge_cost(X, y, model, alpha0): pred model.predict(X) return mean_squared_error(y, pred), None J_train_sk, J_val_sk hyperparam_scan( train_funcsklearn_ridge_train, cost_funcsklearn_ridge_cost, X_trainX, y_trainy, X_valXval, y_valyval, param_namealpha, param_values[0.01, 0.1, 1, 10, 100] )参数说明param_default传递max_iter等固定参数避免每次重复写cost_func的alpha0确保评估公平此模板已用于我后续的ex6SVMC参数扫描和ex7K-meansK值选择只需换train_func和cost_func。5.3 笔记里的“血泪经验”三条必须写进笔记的硬规则我的ex5笔记第一页用红笔写了三条铁律每次重做都先看“正则化是训练时的刹车不是评估时的尺子”训练用lambda0防过拟合但J_train和J_val必须用lambda0计算否则无法判断模型本身好坏。“lambda 不是越大越好而是让 J_val 最小”lambda100可能让J_train很大欠拟合J_val也很大最优值常在0.01~1之间需扫描。“验证集误差 J_val 是唯一可信指标训练误差 J_train 只是辅助”J_train低但J_val高说明过拟合J_train和J_val都高说明欠拟合只有J_val低才代表泛化好。我把这些写进笔记不是为了考试而是提醒自己机器学习没有银弹只有可验证的证据链。每一次lambda扫描都是在用数据校准直觉而不是靠感觉猜。后来做工业项目客户问“为什么选这个正则强度”我就掏出这份ex5笔记指着学习曲线图说“因为验证误差在这里触底再大就欠拟合了。”——他们立刻懂了。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

短信API接口实战:从签名鉴权到高送达率的调优指南
短信API接口实战:从签名鉴权到高送达率的调优指南

做短信API接口开发这些年,我踩过最大的坑不是代码报错,而是好不容易调通了接口、短信也显示“发送成功”,用户却始终收不到。更离谱的是,同一个通道、同一批号码,换个时间段发,送达率能从95%掉到70%。这些问… · 2026/9/25 2:13:08

jetson-inference 图像处理指南:基于 CUDA 的图像格式转换与前后处理 API 详解
jetson-inference 图像处理指南:基于 CUDA 的图像格式转换与前后处理 API 详解

人工智能计算机视觉深度学习微调 【免费下载链接】jetson-inference Hello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson. 项目地址: https://gitcode.com/gh_mirrors/je/jetson-inf… · 2026/9/25 2:13:08

GORM MySQL 驱动深度指南:从 Quick Start 到源码级配置解析(Sliver 项目实践)
GORM MySQL 驱动深度指南:从 Quick Start 到源码级配置解析(Sliver 项目实践)

网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 导读 本指南以仓库内 GORM MySQL 驱动文档(vendor/gorm.io/driver/mysql/README.md)为骨架&#… · 2026/9/25 2:13:02

F´ Autocoder 组件字典解析:以 stress 测试的 TestCommand 组件为例
F´ Autocoder 组件字典解析:以 stress 测试的 TestCommand 组件为例

嵌入式系统编程 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fpri/fprime 点击查看 免费下载 导读 本文以 F 框架 Autocoders/Python 测试套件中的 stress 测试组件为实例&#xff0… · 2026/9/25 2:39:20

Mi-Create部署指南:从源码运行到Nuitka打包发布的完整流程
Mi-Create部署指南:从源码运行到Nuitka打包发布的完整流程

Mi-Create部署指南:从源码运行到Nuitka打包发布的完整流程 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款开源的小米穿戴设备表盘… · 2026/9/25 2:39:20

标准系列文章写作规范与技术实践指南
标准系列文章写作规范与技术实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:39:14

Humanizer 相对时间人性化:DefaultDateTimeHumanizeStrategy 默认策略源码级解析
Humanizer 相对时间人性化:DefaultDateTimeHumanizeStrategy 默认策略源码级解析

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 Human… · 2026/9/25 2:38:54

SQL Assessment API 服务要求(Service Requirement):为探针声明 SQL Server 服务依赖的完整指南
SQL Assessment API 服务要求(Service Requirement):为探针声明 SQL Server 服务依赖的完整指南

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/25 2:38:48

Hunk 0.14 发布详解:鼠标拖拽选择复制、折叠上下文内联展开与 Catppuccin 主题
Hunk 0.14 发布详解:鼠标拖拽选择复制、折叠上下文内联展开与 Catppuccin 主题

开发工具代码评审CLIAI 应用 【免费下载链接】hunk Review-first terminal diff viewer for agentic coders 项目地址: https://gitcode.com/gh_mirrors/hu/hunk 点击查看 免费下载 Hunk 0.14 是面向 agentic 编码者的 review-first 终端 diff 查看器在 2026 年 5 … · 2026/9/25 2:38:48

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码