You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:29:45