Scilab试位法代码第14行语法错误排查求助
Scilab试位法(regulaFalsi)代码语法错误排查与修复
错误汇总与修复点
- 第8行语法错误:
disp ("sample input"): regulaFalsi (1,2,10^-4, 100)中冒号使用错误,disp的括号与引号间多了空格,函数调用的空格不符合规范。修正为:disp("sample input"); regulaFalsi(1, 2, 1e-4, 100) - 第12行括号不匹配+数组定义错误:Scilab中数组需用方括号创建,原代码末尾缺少闭合括号。修正为:
finalOutput = [i, a, b, a + (b-a)/2, f(a + (b-a)/2)] - 第16行公式括号错误:试位法公式的分母未被括号包裹,导致语法错误。正确公式为:
p = (a*f(b) - b*f(a)) / (f(b) - f(a)) - 第18行函数名错误:求绝对值的函数是
abs而非aba,修正为:abs(f(p)) - 结构闭合问题:
regulaFalsi函数末尾缺少endfunction闭合定义,同时if-else块的缩进逻辑混乱,需调整保证结构嵌套正确。
修复后的完整代码
clear clc function f=f(x) f = x^3 + 2*x^2 - 3*x -1 endfunction disp("sample input"); regulaFalsi(1, 2, 1e-4, 100) function regulaFalsi(a, b, TOL, N) i = 1 FA = f(a) finalOutput = [i, a, b, a + (b-a)/2, f(a + (b-a)/2)] printf("%-20s%-20s%-20s%-20s%-20s\n", "n", "a_n", "b_n", "p_n", "f(p_n)") while (i <= N) p = (a*f(b) - b*f(a)) / (f(b) - f(a)) FP = f(p) if (FP == 0 | abs(f(p)) < TOL) then break else printf("%-20.8g %-20.8g %-20.8g %-20.8g %-20.8g\n", i, a, b, p, f(p)) end i = i + 1 if (FA * FP > 0) then // 修正原符号判断逻辑错误,试位法需判断端点函数值是否同号 a = p FA = FP else b = p end end printf("\nFinal approximation: %-20.8g, f(p)=%-20.8g\n", p, FP) endfunction
注:额外修正了试位法的符号判断逻辑(原代码FA + FP > 0逻辑错误,应为FA * FP > 0),并添加了最终结果输出,提升代码实用性。
内容的提问来源于stack exchange,提问作者Water Tabo
相关产品推荐
相关产品推荐

