我在求解这组非线性联立方程以确定未知变量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
问题不是for
循环,而是行
S=solve(eqns,[a,b,c,d,e]);
这需要很长时间来求解方程。
这可能是由于:
- 方程组过于复杂,Matlab的符号工具箱无法处理它
- 您的方程组没有解析解,因此您应该首先考虑尝试使用Matlab的ODE解算器(如ode45(对方程进行数值求解