1

この一連の連立非線形方程式を解いて未知の変数a, b, c,を決定するのに問題がdありeます。

私のコードが無限ループに入って止まらないようです。

syms a b c d e;
K1=zeros(1,5);
K2=zeros(1,5);
K3=zeros(1,5);
K4=zeros(1,5);
K5=zeros(1,5);

for i=1:9
    x1=[0.5096 0.5092 0.5087 0.4852 0.4847 0.4834 0.4804 0.4805 0.4803];
    x2=[0.0963 0.0964 0.0965 0.1163 0.1161 0.1158 0.1275 0.1266 0.1253];
    x3=[0.3941 0.3944 0.3948 0.3985 0.3992 0.4008 0.3921 0.3929 0.3943];   
    
    T=[394.15 399.15 404.15 375.15 390.15 405.15 374.15 392.15 406.15]; 
    
    K1(i)=exp((-8.549)+(6692/T(i)))
    K2(i)=100
    K3(i)=exp((16.93565)+((1250)/T(i))+(-2.575*log(T(i))))
    K4(i)=exp((-936.28)+((40216.27)/T(i))+(151.983*(log(T(i))))+(-0.1675*(T(i))))
    K5(i)=exp((1044.78)+(-45171.42/T(i))+(-165.20*log(T(i)))+(0.1511*(T(i))))
    
    eqns=[((d*(c-e))/((x1(i)-a-b-c-d)^5)*(x2(i)-d-b-c))==K1(i),...
       ((a+b+c)*a)/((x1(i)-a-b-c-d)^2)==K2(i),...
       ((a+b+c)*(d+b))/((x1(i)-a-b-c-d)*(x2(i)-d-b-c-e))==K3(i),...
       ((a+b+c)*(c-e))/((x1(i)-a-b-c-d)^4*(x2(i)-d-b-c-e))==K4(i),...
       (((e)*(x1(i)-a-b-c-d)^3)/((c-e)*(x3(i)-e)))==K5(i)];

    S=solve(eqns,[a,b,c,d,e]);
    S.a(S.a<0)=[];
    S.b(S.b<0)=[];
    S.c(S.c<0)=[];
    S.d(S.d<0)=[];
    S.e(S.e<0)=[];
    S.a=double(S.a)
    S.b=double(S.b)
    S.c=double(S.c)
    S.d=double(S.d)
    S.e=double(S.e)
end
4

1 に答える 1

1

問題はforループではなくラインです

S=solve(eqns,[a,b,c,d,e]);

方程式を解くのに時間がかかりすぎます。

これは、次のことが原因である可能性があります。

  1. 連立方程式が複雑すぎて、Matlab のシンボリック ツールボックスでは処理できません。
  2. 連立方程式には解析解がないため、まず、ode45などの Matlab の ODE ソルバーの 1 つを使用して方程式を数値的に解くことを検討する必要があります。
于 2020-11-03T14:18:48.343 に答える