使用fsolve求解多线性方程组报错:初始目标函数评估失败
解决Matlab fsolve求解多线性方程组的报错问题
你的代码报错核心原因是数组索引语法错误:在定义方程组时,多处出现X (数字)的写法(比如X (5)、X (11)),Matlab中数组索引的括号和变量名之间不能有空格,这种写法会被解析为语法错误,导致初始目标函数无法计算,进而触发fsolve的报错。
修正后的代码
clear clc close all Modellpar.Sp11 = 0.025; Modellpar.Sp12 = 0.8; Modellpar.Sp21 = 0.04; Modellpar.Sp22 = 0.96; Modellpar.Sp31 = 0.04; Modellpar.Sp32 = 0.96; Sp11 = Modellpar.Sp11; Sp12 = Modellpar.Sp12; Sp21 = Modellpar.Sp21; Sp22 = Modellpar.Sp22; Sp31 = Modellpar.Sp31; Sp32 = Modellpar.Sp32; func = @(X)[(0.5) + X(11) + X(7) - X(1); (0.5) + X(12) + X(8) - X(2); (1) - X(5) - X(3); (2) - X(6) - X(4); (5) - X(11) - X(13); (6) - X(12) - X(14); (3) - X(9) - X(7); (4) - X(10) - X(8); (3) - (Sp11 * X(1)); (4) - (Sp12 * X(2)); (11) - (Sp21 * X(5)); (12) - (Sp22 * X(6)); (9) - (Sp31 * X(3)); (10) - (Sp32 * X(4))]; initial = [0;0;0;0;0;0;0;0;0;0;0;0;0;0]; solns = fsolve(func, initial, optimoptions('fsolve', 'Display', 'off'));
补充说明
- 所有数组索引的写法必须严格遵循
变量名(索引)的格式,变量和括号之间不能有空格,否则Matlab会误判为函数调用或无效语法。 - 你的方程组属于线性方程组,也可以将其整理为
Ax=b的形式后用\运算符直接求解,效率会比fsolve更高,不过修正语法错误后fsolve也能正常运行。
内容的提问来源于stack exchange,提问作者pat des pat
相关产品推荐
相关产品推荐

