MATLAB中如何增大步长?欧拉法解ODE生成结果表格求助
搞定MATLAB欧拉法求解与结果表格生成问题
嗨,我来帮你解决这两个问题——先修正你的欧拉法代码,再实现批量运行不同N值并生成美观表格,顺便理清步长和N的关系~
一、先把你的欧拉法代码改对
看了你的代码,发现一个关键问题:for循环从i=100开始,这会直接跳过前99个点的计算,结果肯定不对!应该从i=1开始循环到N,因为初始值是y(1),要一步步计算到对应所有T点的y值。
修正后的代码如下:
function [xar, yar] = eulsol(a,b,ybouco,N) h=(b-a)/N; T=a:h:b; y(1)=ybouco; % 从第一个点开始循环,计算到第N个点,得到第N+1个y值 for i = 1:N % 不用数组存f,每次计算当前点的函数值就行,更省内存 f = -8*y(i) + 0.5*T(i) + (1/16); y(i+1) = y(i)+h*f; end xar=T; yar=y; end
二、批量运行不同N值,生成美观表格
接下来我们写一个脚本,批量调用上面的函数,把不同N对应的最终y值(也就是你要的y₁₀₀、y₂₀₀这些,对应区间终点的y值)整理成表格。
假设你的求解区间是a=0,b=1,初始条件ybouco=0.1(你可以根据自己的实际需求修改这些参数),脚本代码如下:
% 自定义你的求解参数 a = 0; % 区间起始点 b = 1; % 区间终点 ybouco = 0.1; % 初始条件 N_list = [100, 200, 400, 800]; % 需要测试的N值列表 % 初始化表格存储结果 results = table(); results.N = N_list; results.终点y值 = zeros(length(N_list), 1); % 循环计算每个N对应的结果 for idx = 1:length(N_list) N = N_list(idx); [x, y] = eulsol(a,b,ybouco,N); results.终点y值(idx) = y(end); % 取区间最后一个点的y值 end % 先显示MATLAB自带的表格格式 disp('MATLAB格式结果表格:'); disp(results); % 再输出Markdown风格的表格,方便复制使用 disp('\nMarkdown格式结果表格:'); fprintf('| N值 | 对应的终点y值 |\n'); fprintf('|-----|---------------|\n'); for idx = 1:length(N_list) fprintf('| %d | %.6f |\n', N_list(idx), results.终点y值(idx)); end
运行这个脚本后,你会在命令行看到两种表格:一种是MATLAB原生的table,另一种是可以直接复制到文档里的Markdown表格,美观又实用。
三、关于“增大步长”的小说明
你提到“增大步长”,这里要理清:步长h=(b-a)/N,N越大,步长h越小;如果要增大步长,反而需要减小N的值(比如把N从100改成50,步长就翻倍了)。如果这是你实际想要的,只需要把N_list改成[50,100,200,...]就行。
内容的提问来源于stack exchange,提问作者R3E1W4
相关产品推荐
相关产品推荐

