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

MATLAB求解非线性方程组时遇'Unrecognized function or variable 'x''错误求助

解决MATLAB中“Unrecognized function or variable 'x'”错误及方程组求解问题

问题根源

  • 你把fsolve的调用逻辑写在了目标函数system_of_eqs内部,引发两个核心问题:
    1. 直接运行该函数时,未传入参数x,触发“Unrecognized function or variable 'x'”错误;
    2. 即便传入参数,函数内部调用fsolve会触发无限递归,导致程序崩溃。
  • 当前三个方程完全一致,属于欠定方程组,fsolve无法得到唯一解,必须修正方程定义。

修正方案

1. 拆分目标函数与求解逻辑

将计算方程组残差的目标函数和调用fsolve的代码分开,各司其职:

目标函数(保存为system_of_eqs.m)

function aby = system_of_eqs(x)
    % x(1)=alpha, x(2)=beta, x(3)=gamma
    aby = zeros(3, 1);

    % 示例:修改为三个独立的方程(请根据你的实际需求替换)
    % 第一个方程:保留原6次项求和逻辑
    aby(1) = sum(1./x(1) + 1./((1:6).*x(2)) + 1./((1:6).^2.*x(3)));
    % 第二个方程:添加独立约束(示例:前3次项和等于5)
    aby(2) = sum(1./x(1) + 1./((1:3).*x(2)) + 1./((1:3).^2.*x(3))) - 5;
    % 第三个方程:添加独立约束(示例:后3次项和等于3)
    aby(3) = sum(1./x(1) + 1./((4:6).*x(2)) + 1./((4:6).^2.*x(3))) - 3;
end

注:这里用向量化计算简化了原代码的重复部分,第二、三个方程为示例约束,请根据你的实际数学/物理模型替换为正确的方程。

求解脚本(保存为solve_system.m)

% 非零初始猜测值(避免除法错误)
x0 = [1, 4, 19]; 
% 可选:设置fsolve选项,显示迭代过程
options = optimoptions('fsolve','Display','iter'); 
% 调用fsolve求解方程组
solution = fsolve(@system_of_eqs, x0, options);
% 输出结果
disp('求解得到的x1、x2、x3为:');
disp(solution);

2. 运行方式

  • 确保两个文件放在同一MATLAB工作目录下;
  • 在MATLAB命令行中运行solve_system即可,无需直接调用system_of_eqs(fsolve会自动传入迭代的x参数)。

关键注意事项

  • 目标函数仅负责接收fsolve传入的迭代变量x,返回方程组的残差值(fsolve会通过迭代最小化残差的平方和);
  • 必须保证方程组是正定的(三个独立方程对应三个变量),否则无法得到唯一解;
  • 初始猜测值x0不能包含0,避免原方程中的除法错误。

内容的提问来源于stack exchange,提问作者confusedEngineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:35:20