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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:50:26