尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

零基础用MATLAB/Simulink画传递函数图:阶跃响应与阻尼比入门

零基础用MATLAB/Simulink画传递函数图:阶跃响应与阻尼比入门 简介面向控制系统初学者与Simulink入门者这份示例型代码包聚焦S平面上传递函数的三维可视化帮助读者把抽象的复频率域响应转化为直观曲面理解频域分析与系统动态特性。压缩包共2个文件含1个m脚本和1个txt文本整体约2KB体量轻巧核心绘图逻辑集中便于直接阅读和复现。已有1822人学习下载适合作为频域分析的入门参考。读者可从中梳理用tf函数建立传递函数模型、设定频率范围、计算频率响应并借助surf或meshgrid绘制三维曲面的基本流程也能结合代码体会极点、零点分布与稳定性、动态性能之间的联系传递函数描述输入输出的拉普拉斯变换关系S平面以实部表征稳定性、虚部表征频率脚本有助于把这些概念落到可视化结果上。对课堂演示、自学练习或Simulink建模前的概念梳理这份小体量脚本具备一定参考价值。1. 先弄明白一件事传递函数图到底在画什么刚接触控制、信号这类课时很多人卡在同一个地方公式推得动图却画不出来或者照着教程敲了几行出来的曲线跟书上完全不是一个样子。这里说的“传递函数图”就是把一个系统用传递函数描述出来之后画出的几条曲线阶跃响应、脉冲响应、伯德图。这些图其实都在回答同一个问题——给它一个输入它会怎么反应。而 Simulink 基础就是把这些曲线从命令行搬到方块图里用搭积木的方式看同一个系统。这篇文章只做一件事让你从零开始把第一张传递函数图画出来并且看懂它在说什么。不推导、不背公式、不讲证明你只要有一份装好 MATLAB 的电脑跟着敲几行、拖几个方块就能看到自己亲手画出来的曲线。2. 传递函数是什么三个数字就能描述一台设备的脾气很多人被“传递函数”这四个字吓住以为是什么高深的数学。其实它干的事情特别朴素把一台设备“输入变了之后输出怎么跟着变”的规律压缩成一个分式。这个分式本身并不神秘它更像一张性格名片——你不用把整台设备拆开看这张名片就能大致猜到它急不急、稳不稳、会不会冲过头。2.1 先换个说法设备的“性格名片”想象你在按电梯。你按下楼层按钮这是一次输入电梯启动、加速、到层、停稳这是输出。有的电梯起步猛、停的时候会顿一下有的电梯慢悠悠很平顺。这两种电梯的“脾气”不一样但如果把它们都看成线性系统这个脾气就可以用一个分式描述出来。写成数学形式大概是这样输入信号 X(s) 经过一个方框变成输出信号 Y(s)中间那个方框里写的就是传递函数 G(s)。三者关系是 Y(s) G(s) · X(s)。你给它一个输入乘上这张名片就得到输出。这里的 s 不是某个具体数字它代表的是“变化”这件事本身可以理解成描述信号变化快慢的一个标记。零基础阶段不需要深究它的数学含义只要记住传递函数是 s 的一个分式分子分母都是多项式多项式系数决定了系统的行为。那这个分式是怎么来的对物理系统来说通常先写出它的微分方程比如一个弹簧、质量、阻尼组成的系统力平衡写出来是 m·x c·x k·x F。经过一步叫拉普拉斯变换的处理微分方程就变成了代数分式传递函数就是 1/(m·s² c·s k)。这一步推导你现在可以跳过因为实际工作中绝大多数时候你是直接拿到系数的而不是自己去推。2.2 名片上的三个数字增益、阻尼比、自然频率二阶系统是入门阶段最值得先吃透的一类因为它的三个参数几乎能解释你在图上看到的所有现象。它的标准形式长这样G(s) K · ωn² / (s² 2·ζ·ωn·s ωn²)参数名字通俗理解典型取值K增益整体放大倍数输入 1 最后停在几1 最省事ζ阻尼比有没有“刹车”越小越容易冲过头0.2 到 1.0ωn自然频率反应快慢越大越快入门就用 1阻尼比 ζ 是最有意思的一个。它小于 1 时系统是欠阻尼的阶跃响应会先冲过目标值再回落冲过头的那一段就叫超调。ζ 越小冲得越高来回振荡的次数也越多。ζ 等于 1 时叫临界阻尼刚好不超调是很多场合追求的状态。ζ 大于 1 就是过阻尼慢吞吞地爬过去不会冲过头。自然频率 ωn 决定节奏。ωn 越大整个过程越快结束ωn 越小同样的曲线就被拉长。你可以把 ωn 想象成这个系统的“心跳速度”把 ζ 想象成它的“情绪稳定程度”。分式里的分母 s² 2ζωn·s ωn² 等于 0 时解出来的两个根叫极点。极点的位置决定了系统稳不稳、快不快。根落在左半平面就稳定越靠左衰减越快。分子等于 0 解出来的根叫零点零点会影响某些频段的响应形状。入门阶段你不需要手算极点但要养成一个习惯拿到一个传递函数先看极点在哪。2.3 动手把这句话写成代码tf 的两种写法理论说到这里就够了现在打开 MATLAB在命令行窗口或者新建一个脚本里敲代码。建传递函数有两种写法两种都要会因为后面看别人的代码时两种都会遇到。% 写法一先把 s 声明成传递函数变量之后就能像写数学公式一样写 s tf(s); G1 1 / (s^2 2*s 1); % 写法二直接给分子和分母的系数按 s 的降幂排列 num 1; % 分子常数 1 den [1 2 1]; % 分母1*s^2 2*s 1 G2 tf(num, den);第一行是关键。s 在 MATLAB 里默认不是一个存在的变量你必须先执行s tf(s)它才会被识别为一个传递函数变量。执行完这一行你就可以像在纸上写公式一样写1/(s^22*s1)不用自己去数系数。第二种写法用系数向量。den [1 2 1]表示的是 1·s² 2·s 1顺序是从最高次幂往常数项写。这个顺序非常容易记反也是新手最常见的出错点之一后面避坑章节会专门讲。分子只有一个常数 1所以写成[1]。两种写法得到的 G1 和 G2 是同一个系统。另外还有一个很实用的命令damp可以直接把阻尼比和自然频率报给你damp(G2) % 输出每个极点的阻尼比、自然频率、时间常数 pole(G2) % 只输出极点的位置damp的输出里Damping 那一列就是阻尼比Frequency 那一列是自然频率。以后你拿到一个陌生的传递函数先跑一次damp就能立刻知道它是欠阻尼还是过阻尼比盯着系数猜快得多。2.4 为什么零基础也值得学这个第一它把“试错”变成了“看屏”。没有这套工具你要判断改一个参数会怎样只能靠推导或者真的把设备搭出来试有了它改一个数字曲线立刻重画几秒钟就能看到后果。这种即时反馈对新手特别重要因为你对系统的直觉就是在一次次“改了会怎样”中建立起来的。第二它和 Simulink 基础是同一套东西的两种看法。命令行里写的那个 G在 Simulink 里就是一个叫 Transfer Fcn 的方块参数填的是同一组系数。很多人先学 Simulink拖了半天方块不知道里面填什么反过来先搞懂传递函数再去拖方块会发现整个过程只是在填参数。第三报告和答辩里一张曲线图的说服力远超十行公式。别人不关心你的分母是几阶的他们关心的是“超调多少、多久稳定”。这两件事恰好都能从图上直接读出来。3. 第一个能跑的例子从一条命令到一张阶跃响应图概念清楚了接下来是最关键的一步真正把图跑出来。这一章我们会用一个二阶系统当例子从建模型到画图、从读数字到改参数完整走一遍。跑完这一遍你就有了一个可以反复改、反复玩的模板。3.1 为什么第一张图选阶跃响应传递函数能画的图有好几种阶跃响应最适合入门因为它的物理含义最直白给系统一个突然的、之后一直保持不变的输入看它怎么跟上来。生活里到处都是阶跃你突然把水龙头拧大、给电机一个固定的目标转速、设定空调温度。系统对这些“突然一下”的反应恰恰最能暴露它的性格——反应快不快、会不会冲过头、多久能稳定下来。相比之下脉冲响应和伯德图更抽象理解成本更高先跳过。阶跃响应图上的横轴是时间纵轴是输出。一条理想的响应曲线从左下角出发向上爬升最后平稳地停在目标值。新手第一眼要看的只有三件事爬得快不快、有没有冲过那条目标线、冲完之后多久才真正稳住。3.2 三条命令画三种图先建一个阻尼比 0.2、自然频率 1 的系统。为什么选 0.2因为它超调明显曲线形状好看一眼就能看出“冲过头再回落”的过程特别适合第一次观察。% 二阶系统自然频率 wn 1阻尼比 zeta 0.2 wn 1; zeta 0.2; G tf(wn^2, [1, 2*zeta*wn, wn^2]); figure; step(G); grid on; title(阶跃响应); figure; impulse(G); grid on; title(脉冲响应); figure; bode(G); grid on; title(伯德图);第二行到第四行是这次的核心。tf(wn^2, [...])里第一个参数是分子系数也就是 ωn²第二个参数是分母系数向量按 s²、s、常数项的顺序依次填 1、2·ζ·ωn、ωn²。代入 ζ0.2、ωn1分母就是[1 0.4 1]。后面三条命令各画一张图。step画阶跃响应impulse画脉冲响应bode画伯德图。每句前面加一个figure是为了让它们分别开新窗口不然会互相覆盖新手第一次跑的时候最容易在这里懵明明敲了三条命令怎么只出来一张图。grid on是打开网格线别嫌它丑读图时对着网格估数值准得多。三条命令都跑一遍之后你会发现阶跃响应那条曲线是向上爬升最后停住的脉冲响应那条是冲一下又回落到零的。这两种形状的差别本质上是输入信号不同造成的阶跃是一直保持的脉冲只存在一瞬间。3.3 把图读成数字stepinfo 在报什么看图只能看个大概要说清楚“超调多少”“多久稳定”得让 MATLAB 把数字报出来。stepinfo就是干这个的。% 把阶跃响应的关键指标一次算出来 info stepinfo(G) % 也可以单独取某一项 info.Overshoot % 超调量单位是百分比 info.SettlingTime % 调节时间单位是秒stepinfo返回的是一个结构体里面几个字段最常用。Overshoot 是超调量表示峰值比目标值高出的百分比RiseTime 是上升时间从终值的 10% 爬到 90% 花的时间SettlingTime 是调节时间从开始到曲线进入并保持在终值 ±2% 范围内的时间Peak 和 PeakTime 分别是峰值和到达峰值的时刻。以 ζ0.2 这个系统为例stepinfo报出来的超调大概在 52% 左右。这个数字不是随便来的它和阻尼比之间有一个固定关系超调 ≈ exp(-π·ζ / √(1-ζ²))。ζ0.2 代进去算正好是 0.52 上下。你现在不用记这个公式但要建立一个直觉超调只跟阻尼比有关跟自然频率没关系。改变 ωn曲线会被整体拉长或压缩但超调的百分比几乎不变。调节时间则相反它同时受两个参数影响大致和 ζ·ωn 成反比。也就是说想让它快点稳住要么加大阻尼要么提高自然频率。提示stepinfo默认按终值的 2% 带宽算调节时间。如果你的场景对精度要求不同可以传参数改比如stepinfo(G, SettlingTimeThreshold, 0.05)改成 5%。3.4 改一个参数再看一遍阻尼比从 0.2 调到 1.0理解了单个系统下一步是把它动起来。把阻尼比从 0.2 一路调到 1.0画在同一张图上对比这是建立直觉最快的方式。% 同一张图上叠加四条不同阻尼比的阶跃响应 zetas [0.2 0.5 0.7 1.0]; figure; hold on; for k 1:length(zetas) z zetas(k); G tf(1, [1, 2*z, 1]); % 保持 wn 1只改阻尼比 step(G); end hold off; legend(ζ0.2,ζ0.5,ζ0.7,ζ1.0); grid on;hold on的意思是“接下来的图都画在同一张上”hold off是取消这个状态。不加这两句循环里每画一条就把上一条冲掉了。循环体里z zetas(k)每次取出一个阻尼比重新构造传递函数。因为 wn 固定为 1所以分母常数项恒等于 1中间项的系数是 2z。跑完你会看到四条曲线从陡到缓依次排开。ζ0.2 那条冲得最高、抖得最厉害ζ0.7 那条只有很小的一个尖几乎贴着目标线过去ζ1.0 那条完全不超调但爬得最慢。ζ0.7 在工程上被反复提到就是因为它在“够快”和“够稳”之间取了个不错的平衡。再补一步把每条曲线的超调数字也打出来图和数字对照着看印象会深得多。% 把四条曲线的超调量打出来和图对照 for k 1:length(zetas) z zetas(k); G tf(1, [1, 2*z, 1]); info stepinfo(G); fprintf(zeta %.1f超调 %.1f%%调节时间 %.2f 秒\n, ... z, info.Overshoot, info.SettlingTime); endfprintf是格式化输出%.1f表示保留一位小数%%是为了在输出里打出一个百分号。跑完你会看到一串数字超调从 52% 一路降到 0%调节时间则从长变短再变长中间有个最低点。这张表比任何文字描述都更能说明“参数不是越大越好”。4. Simulink 基础把同一条曲线搬进方块图到这一步你已经能用几行命令画出图了。那为什么还要学 Simulink因为在真实场景里系统往往不是一个孤零零的传递函数而是好几个环节串在一起还可能带反馈、带非线性、带饱和。这时候靠写代码去拼很容易写成一团乱麻而方块图天生就是干这个的。4.1 命令行和方块图什么时候用哪个一句话概括单个环节、想快速看结果用命令行多个环节、结构复杂、要给别人看用 Simulink。命令行的优势是快。写三行就能出图改参数只要改一个数字特别适合反复试探。你在上一章做的事就是命令行的典型用法。Simulink 的优势是结构清楚。每个环节是一个方块方块之间的连线就是信号流向一眼就能看出谁在前面谁在后面。而且它不局限于线性环节饱和、死区、开关这些东西都有现成方块命令行里要实现就得写不少代码。入门阶段不要二选一。我的建议是两套都跑一遍用同一个系统看看结果是不是一样。如果一样说明你两边都没搞错如果不一样那正好是一次极好的排查练习能让你把参数、求解器这些东西真正搞清楚。4.2 第一个模型三个方块跑出同一条曲线我们要搭的模型极其简单一个阶跃输入经过一个传递函数最后接到示波器上看。就三个方块但五脏俱全。第一步在命令行窗口输入simulink打开起始页选空白模型。界面上会出现一个空白的画布。第二步打开库浏览器找到 Sources 分类把 Step 方块拖到画布上。这是阶跃输入也就是我们上一章step命令背后的那个输入信号。第三步找到 Continuous 分类把 Transfer Fcn 方块拖进来。这就是传递函数的图形化版本。第四步找到 Sinks 分类把 Scope 拖进来。示波器用来显示曲线。第五步连线。从 Step 右侧的小箭头按住鼠标拖到 Transfer Fcn 左侧的输入口再从 Transfer Fcn 的输出口拖到 Scope 的输入口。连好之后信号流向是从左到右一条直线。第六步双击 Transfer Fcn 填参数。这一步是成败关键下一节详细说。第七步在模型窗口上方的仿真停止时间填 15然后点运行。双击 Scope你就能看到一条曲线形状应该和上一章step(G)画出来的一模一样。第八步对比。回到命令行敲step(G, 15)把两张图放在一起看。如果形状对得上恭喜你已经把命令行和方块图这两条路打通了。4.3 参数怎么填Transfer Fcn 的两个框双击 Transfer Fcn弹出来的对话框里有两个输入框一个叫 Numerator coefficients一个叫 Denominator coefficients。这两个框填的就是上一章tf(num, den)里的那两个向量一模一样。以 ζ0.2、wn1 为例分母是 s² 0.4s 1分子是 1。填法如下输入框填什么含义Numerator coefficients[1]分子是常数 1Denominator coefficients[1 0.4 1]1·s² 0.4·s 1注意这两组数字都用方括号括起来数字之间用空格或逗号隔开。如果你习惯了命令行的写法可能想直接填1而不加括号那样在只有一项时通常也能识别但养成加方括号的习惯更稳妥因为多数情况下分子分母都不止一项。填完之后点确定运行。如果曲线是一条贴着横轴的直线或者直接冲到很高再发散先别怀疑软件去检查分母那三个数字是不是写对了、顺序是不是反了。这是新手最高频的翻车点没有之一。4.4 和命令行对不上先查这三处第一次做对比时很多人会发现 Simulink 的曲线和step的曲线不完全一样比如峰值略高一点、陡的地方有点毛刺。这时候按顺序查三件事。第一处求解器。Simulink 默认用变步长求解器它在曲线平缓的地方步子迈得大在陡峭的地方步子迈得小。曲线陡的地方如果步子还是偏大画出来就会有折角甚至失真。打开模型配置参数把 Solver 改成固定步长或者保持变步长但把 Max step size 限制到 0.01再跑一次通常会平滑很多。第二处系数。把 Transfer Fcn 里的两个向量抄在纸上和命令行里的num、den逐个对照。特别注意缺项补零的问题s² 1 这种没有一次项的多项式系数必须是[1 0 1]中间那个 0 不能省。第三处时间。命令行的step(G)默认画 0 到 5 秒左右Simulink 的停止时间是你自己填的。两边时间范围不一样看到的曲线段自然不一样。统一成 15 秒再比图才有可比性。想把两条曲线叠在一张图上可以用 To Workspace 方块把 Simulink 的数据导出到工作区。把 Scope 换成或并联一个 To Workspace双击它把 Variable name 设成simoutSave format 选 Array。跑完之后工作区会多一个变量再画图对比% 把 Simulink 导出的数据和命令行算的曲线画在一起 t 0:0.01:15; y_ref step(G, t); % 命令行算法 plot(t, y_ref, LineWidth, 1.5); hold on; grid on; plot(simout(:,1), simout(:,2), --); % 第一列时间第二列输出 legend(命令行 step, Simulink 输出); xlabel(时间 t秒); ylabel(输出);y_ref是我们自己指定时间点算出来的响应simout是 Simulink 导出的数组。两条线如果基本重合说明参数和求解器都设置对了。如果偏差明显回到上面那三处再查一遍。5. 新手避坑五个最容易翻车的点这一章把新手最常撞的五个坑集中列出来。每一条都按“看到什么现象、为什么会这样、怎么解决”的顺序写遇到问题时可以直接对着排查。5.1 坑一分母系数顺序写反或缺项没补零现象曲线完全不符合预期要么是一条贴地的直线要么一路发散冲上去要么比想象中快十倍。原因den向量的顺序必须严格按 s 的降幂排从最高次幂一直写到常数项。有人把[1 2 1]写成[1 1 2]含义就从 s²2s1 变成了 s²s2系统完全不同。更隐蔽的是缺项s²1 中间没有一次项必须写成[1 0 1]漏掉那个 0 就变成了 s1阶数直接掉了一阶。解决写完系数后用手指着向量从右往左念一遍“常数项、一次项、二次项”确认每一位对应的是正确的幂次。遇到因式相乘的形式不要手算展开用conv让 MATLAB 帮你乘% (s1)(s2) s^2 3s 2交给 conv 算避免手误 den conv([1 1], [1 2])conv是卷积函数对多项式系数向量来说它做的就是多项式相乘。两个一阶因式乘完得到二阶系数一位都不会错。5.2 坑二s 没定义就直接当变量用现象命令行一片红字报Unrecognized function or variable s。原因s 在 MATLAB 里不是内置变量它只是一个普通字母。你必须先用s tf(s)把它声明成传递函数变量才能写1/(s^21)这样的表达式。解决养成脚本开头先声明的习惯。如果你不想每次都写就统一改用tf(num, den)的系数写法完全绕开 s。另外要注意一旦你把 s 声明成了传递函数变量它就不能再当普通数字用了后面如果还需要用 s 做循环变量换个名字比如sv或者k。还有一种情况脚本重启后变量被清空之前跑通的代码再跑就报错。这时候别怀疑代码先在开头补上声明那行。5.3 坑三图看着“没反应”一条直线贴着零现象step(G)跑完图上只有一条平平的线看不出任何变化。原因有三种可能。一是系统的时间常数太大默认画 5 秒根本还没开始动二是增益太小输出变化幅度在自动缩放的坐标下几乎看不见三是你确实建了一个不稳定的系统输出在往无穷大跑但坐标轴范围把它压成了一条线。解决先指定时间范围把窗口拉长看看。step(G, 100)表示画 100 秒。如果还是平的用stepinfo看数字它会告诉你峰值和终值到底是多少。如果stepinfo报出Inf或者NaN那多半是系统不稳定去查pole(G)看看有没有极点的实部是正的。% 三步定位先拉长时间再看数字最后看极点 step(G, 100); info stepinfo(G); pole(G)极点只要有一个落在右半平面系统就是发散的这条曲线永远停不下来。这时候问题不在画图命令而在传递函数本身。5.4 坑四Simulink 和命令行结果对不上现象同一个传递函数Simulink 画出来的峰值更高、曲线更毛或者整体慢半拍。原因最常见的是求解器步长设置不当。变步长求解器在曲线陡峭段如果步子迈大了会漏掉峰值附近的关键点表现为曲线有折角或者峰值偏低反过来某些设置下又会出现过冲。其次是系数抄错尤其是分母中间那位。第三是初始条件不同命令行默认零初始状态Simulink 里某些方块可能带了非零初值。解决按上一章说的三处顺序查——求解器、系数、时间。把 Max step size 设成 0.01 之后重跑多数“毛刺”问题会消失。系数用纸抄一遍逐位对照。时间范围两边统一。三条都确认无误还不对就用 To Workspace 导出数据把两条曲线叠在一张图上看偏差出现在哪个时间段从偏差位置反推是哪个环节的问题。5.5 坑五连续和离散混着用现象换成一个叫 Discrete Transfer Fcn 的方块之后曲线形状完全变了甚至出现等幅振荡。原因连续传递函数描述的是 s 域的关系离散传递函数描述的是 z 域的关系两者的系数不能直接照抄。而且离散方块必须填采样时间填错或者留空都会出问题。解决入门阶段一律用连续的 Transfer Fcn别碰离散版本。确实需要离散化时先用c2d把连续模型转成离散模型再把转换后的系数抄进方块% 把连续系统按 0.01 秒采样离散化 Gd c2d(G, 0.01, zoh); Gdc2d的第二个参数是采样时间第三个参数zoh表示零阶保持器是最常用的一种离散化方法。转换完Gd的分子分母系数才是能填进离散方块的数字。这一步现在看不懂没关系记住“不能直接抄”这一条就够用了。6. 下一步学什么四周能把这块练到什么程度跑通第一个例子之后最容易犯的错是到处找教程、什么都想学结果一个月过去还在原地。我的建议是给自己定一个四周的小计划每周只盯一件事每件事都要有能看见的产出。阶段练什么关键命令或操作第一周把 tf、step、stepinfo、bode 练到不用查文档tfstepstepinfobode第二周改参数记录超调与调节时间的变化规律damppolefprintf第三周引入反馈看闭环和开环的差别feedbackrlocus第四周用 Simulink 复现同一个系统两边对比Transfer Fcn、Scope、To Workspace第一周的目标是手熟。不要贪多就这四个命令反复用到能闭着眼睛写。每次建完模型都顺手跑一次damp看看阻尼比和你填的数字对不对得上这是最便宜的自我校验。第二周开始建立数字感。把 ζ 从 0.1 扫到 2.0每 0.1 记一次超调和调节时间记在一张表里。做完你会发现超调在 ζ 大于 1 之后恒为零调节时间则先降后升。这张表是你自己的比任何教材上的图都管用。第三周接触反馈。闭环系统是把输出引回来和输入比较用feedback一行就能建% 单位负反馈把开环 G 接成闭环 G_close feedback(G, 1); step(G_close); grid on; stepinfo(G_close)feedback(G, 1)的第二个参数是反馈通道的传递函数填 1 表示单位负反馈也就是直接把输出取回来相减。跑完对比一下闭环和开环的阶跃响应你会看到闭环的超调通常更小、稳态误差更小但引入反馈也可能让系统变得不稳——这正是rlocus根轨迹图要解决的问题第三周把这个图看懂就够了。第四周把前面所有东西搬进 Simulink。同一条传递函数同样的参数在方块图里复现一遍用 To Workspace 导出数据和命令行对比。这一步的意义不在于学新东西而在于确认你真的理解了参数是怎么在两种表达之间对应的。如果四周之后还想往下走方向有三个PID 控制器的参数整定、状态空间模型把高阶系统写成一阶矩阵形式、频域指标幅值裕度和相位裕度。这三个方向都以你现在这套基础为起点随便挑一个深下去都不会走偏。最后说个我自己的习惯。刚学的时候我吃过一次大亏同一组参数前后两次跑出来的曲线不一样我以为是软件出了问题折腾了一整晚最后发现是脚本里有一行zeta忘了改被上一次的循环变量覆盖了。从那以后我每次画完一张新图都强制走一遍同一个动作——把关键的三个参数用fprintf打在命令行上再把图存成文件、文件名里带上参数值。图可以重画参数一旦记混后悔药是没有的。希望帮到你。本文还有配套的精品资源点击获取
返回列表