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

Matlab求解4阶多项式实根报错:赋值维度不兼容问题排查

赋值维度不兼容错误排查与修复

错误原因

  • 你的方程是4阶多项式,solve函数会返回所有根(包括复数根和负根),因此T2是一个包含多个元素的符号数组,而Tab(i)是单个元素的位置,两者维度不匹配,导致赋值失败。
  • 绝热火焰温度的物理意义是正实数,所以大部分根都是无意义的,需要筛选出符合条件的根。

修复步骤

  1. 筛选solve结果中的正实数根:使用isreal判断实数,再过滤大于0的数值;
  2. 预定义Tab数组:提前创建与Ti长度一致的数组,避免动态扩容的问题;
  3. 将筛选后的根转换为数值类型(vpa或double),再赋值给Tab(i)。

修正后的完整代码

clear
clc
syms tab2

Ti = (298:25:873);
Tab = zeros(size(Ti)); % 预定义结果数组

%low temperature coefficients 
A_CO2l = [2.35677352e+00  8.98459677e-03 -7.12356269e-06  2.45919022e-09 -1.43699548e-13 -4.83719697E+04  9.90105222e+00];
A_H2Ol = [4.19864056e+00 -2.03643410e-03  6.52040211e-06 -5.48797062e-09  1.77197817e-12 -3.02937267e+04 -8.49032208e-01];
A_N2l  = [0.02926640E+02  0.14879768E-02 -0.05684760E-05  0.10097038E-09 -0.06753351E-13 -0.09227977E+04  0.05980528E+02];

%high temperature coefficients
A_CO2h = [3.85746029e+00 4.41437026e-03 -2.21481404e-06  5.23490188e-10 -4.72084164e-14 -4.87591660e+04 2.27163806e+00];
A_H2Oh = [3.03399249e+00 2.17691804e-03 -1.64072518e-07 -9.70419870e-11  1.68200992e-14 -3.00042971e+04 4.96677010e+00];
A_N2h  = [0.02926640e+02 0.14879768e-02 -0.05684760e-05  0.10097038e-09 -0.06753351e-13 -0.09227977e+04 0.05980528e+02];

hfCO2 = -393520 ;
hfH2O = -241820 ;
hfN2 = 0 ; 
hfCH4 = -74850;

RCO2 = 0.1889; % W
RH2O = 0.4615; % X
RN2 = 0.2968;  % Y

for i = 1:length(Ti)
    EQ = (1*(hfCO2+(RCO2*tab2*(A_CO2h(1) + A_CO2h(2)*tab2/2 +A_CO2h(3)*(tab2^2)/3 + A_CO2h(4)*(tab2^3)/4 + A_CO2h(5)*(tab2^4)/5 + A_CO2h(6)/tab2))-(RCO2*Ti(i)*(A_CO2l(1) + A_CO2l(2)*Ti(i)/2 +A_CO2l(3)*(Ti(i)^2)/3 + A_CO2l(4)*(Ti(i)^3)/4 + A_CO2l(5)*(Ti(i)^4)/5 + A_CO2l(6)/Ti(i))))...
          +2*(hfH2O+(RH2O*tab2*(A_H2Oh(1) + A_H2Oh(2)*tab2/2 +A_H2Oh(3)*(tab2^2)/3 + A_H2Oh(4)*(tab2^3)/4 + A_H2Oh(5)*(tab2^4)/5 + A_H2Oh(6)/tab2)-(RH2O*Ti(i)*(A_H2Ol(1) + A_H2Ol(2)*Ti(i)/2 +A_H2Ol(3)*(Ti(i)^2)/3 + A_H2Ol(4)*(Ti(i)^3)/4 + A_H2Ol(5)*(Ti(i)^4)/5 + A_H2Ol(6)/Ti(i))))...
          +7.52*(RN2*tab2*(A_N2h(1) + A_N2h(2)*tab2/2 +A_N2h(3)*(tab2^2)/3 + A_N2h(4)*(tab2^3)/4 + A_N2h(5)*(tab2^4)/5 + A_N2h(6)/tab2)-(RN2*Ti(i)*(A_N2l(1) + A_N2l(2)*Ti(i)/2 +A_N2l(3)*(Ti(i)^2)/3 + A_N2l(4)*(Ti(i)^3)/4 + A_N2l(5)*(Ti(i)^4)/5 + A_N2l(6)/Ti(i)))))...
          -hfCH4 == 0;

    T2 = solve(EQ,tab2);
    % 筛选正实数根
    real_roots = double(T2(isreal(T2)));
    valid_root = real_roots(real_roots > 0);
    % 赋值(绝热火焰温度唯一,取该值)
    Tab(i) = valid_root;
end

% 可选:转换为高精度数值
Tab = vpa(Tab);
disp(Tab);

关键修改说明

  • 预定义Tab = zeros(size(Ti)):提前分配内存,避免动态数组的维度问题;
  • 筛选根:real_roots = double(T2(isreal(T2)))提取所有实数根,再通过real_roots > 0筛选正根;
  • 直接赋值有效根:由于绝热火焰温度的物理唯一性,筛选后只会得到一个有效根,直接赋值给Tab(i)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:17:10