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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:22