Octave运行欧拉法代码报T(1.2)下标需为整数或逻辑值问题求解
问题原因排查
报错T(1.2): subscripts must be either integers 1 to (2^63)-1 or logic的核心是数组下标使用错误,同时你的代码还存在函数结构逻辑问题,具体问题如下:
- 循环内
T(i+h) = T(i) + h;写法错误:i是循环计数整数,h是步长(你的案例中h=0.2),i+h是小数,不符合Octave数组索引必须为正整数或逻辑值的规则,正确下标应和Y数组一致用i+1 - 测试调用代码写在了
euler函数的定义内部:函数定义结束后才能放测试执行代码,放在内部会导致执行逻辑混乱,不符合Octave函数定义规则
修复后的完整代码
% 定义微分方程函数 function fxy = fa(x,y) % fa merupakan fungsi persamaan diferensial fxy = x^2 - 4*y; end % 定义欧拉法求解函数 function [T, Y] = euler(f, a, b, y0, n) % fungsi EULER penyelesaian numerik persamaan diferensial dengan metode % Euler explisit h = (b-a)/n; Y = zeros(n+1,1); T = zeros(n+1,1); %syarat awal T(1) = a; Y(1) = y0; % jalankan sebanyak n langkah for i = 1:n fi = f(T(i), Y(i)); Y(i+1) = Y(i) + h*fi; % 修复下标错误:用整数i+1作为索引 T(i+1) = T(i) + h; end end % 测试代码放到函数外部执行 x0 = 0; % batas bawah/ bayas awal xm = 1; % batas atas / batas akhir y0 = 1; %syarat batas awal n = 5; % banyaknya segmen / langkah [x,y] = euler(@fa, x0, xm, y0, n); % 可选:打印结果验证 disp('计算结果(T值,Y值):'); disp([x,y]);
修改后运行不会再报下标错误,会输出6组(n+1)对应的时间步和数值解结果。
内容的提问来源于stack exchange,提问作者439 767_NINDYA KARISSA TK
相关产品推荐
相关产品推荐

