필터 지우기
필터 지우기

Solving Non-Linear Equation in a loop

조회 수: 3 (최근 30일)
Alakesh Upadhyaya
Alakesh Upadhyaya 2020년 11월 17일
댓글: Alakesh Upadhyaya 2020년 12월 18일
I want to solve this equation for different values of E0, I want to vary the value of E0 from 1 to 100, for which I will get 99x3 equations+1 as E0 is present in 3 out of 4 equations given below. I can solve the equation for a fix value of E0 using VPA solve but I can't write a program to iterate the value of E0 for which I should get 99 different values of E,P,F and S from the equation for 99 different values of E0.
clc;clear;close;
syms E F S P
E00=1; %Total concetration of E0
F0=100; %TotalCOncentration of F0
k1=4; %rate constants
k2=6;
k3=4;
k4=1;
k5=6;
k6=4;
k7=5;
k8=8;
for i=1:99
E0(i)=E00+i;
eqn1=(E0-E)*(k1+k2)-k1*E*S-k4*E*P==0; % First equation
eqn2=(E0-E)*k3+(F0-F)*k6-E*S*k1-k8*S*F==0; %Second equation
eqn3=(F0-F)*(k7+k6)-F*P*k5-k8*S*F==0; %Third equation
eqn4=k2*(E0-E)+(F0-F)*k7-k5*F*P-k4*E*P==0; %Fourth Equation
sol(i)=solve([eqn1,eqn2,eqn3,eqn4,E>0,S>0,P>0,F>0,E<100,F<100,S<100,P<100],[E,P,S,F]);
end
heres my second code for a single value of E0
clc;clear;close;
%% Initial conditons and values of rate constants
syms E S F P
E0=1; %Total concetration of E0
F0=100; %TotalCOncentration of F0
k1=4; %rate constants
k2=6;
k3=4;
k4=1;
k5=6;
k6=4;
k7=5;
k8=8;
%% The equations
eqn1=(E0-E)*(k1+k2)-k1*E*S-k4*E*P==0; % First equation
eqn2=(E0-E)*k3+(F0-F)*k6-E*S*k1-k8*S*F==0; %Second equation
eqn3=(F0-F)*(k7+k6)-F*P*k5-k8*S*F==0; %Third equation
eqn4=k2*(E0-E)+(F0-F)*k7-k5*F*P-k4*E*P==0; %Fourth Equation
equations=[eqn1 eqn2 eqn3 eqn4]; %Total equations
vars=[ E S P F];
range=[0 E0-0.1;0.1 E0-0.1;0.1 E0-0.1;0.1 F0-0.1]; %Range of variables to omit unwanted values
% Range has been taken from 0 to E0-0.1 so that the value of E does not
% exceed the value of E0, same is done for S P and F
%% Solver
sol=vpasolve(equations,vars,range);
[sol.E sol.S sol.F sol.P];
%% Values
E=sol.E %Numerical value of E
P=sol.P %Numerical value of P
S=sol.S %Numerical value of S
F=sol.F %Mumerical value of F
digits(4);
x=P/(P+S)
b=E0/F0; %E0/F0
I just can't write a code for E0=1 to 99, I tried to put vpa into loop, but it doesn't work. Please help me out

채택된 답변

Mahesh Taparia
Mahesh Taparia 2020년 12월 17일
Hi
The function vpasolve returns the structure which can be stored in a cell array. Also there were some missing initialization. The below code will work for your problem:
clc;clear;close;
syms E F S P
E00=1; %Total concetration of E0
F0=100; %TotalCOncentration of F0
k1=4; %rate constants
k2=6;
k3=4;
k4=1;
k5=6;
k6=4;
k7=5;
k8=8;
E0=zeros(100,1);
sol=cell(100,1);
for i=1:99
E0(i)=E00+i;
eqn1=(E0(i)-E)*(k1+k2)-k1*E*S-k4*E*P==0; % First equation
eqn2=(E0(i)-E)*k3+(F0-F)*k6-E*S*k1-k8*S*F==0; %Second equation
eqn3=(F0-F)*(k7+k6)-F*P*k5-k8*S*F==0; %Third equation
eqn4=k2*(E0(i)-E)+(F0-F)*k7-k5*F*P-k4*E*P==0; %Fourth Equation
equations=[eqn1 eqn2 eqn3 eqn4]; %Total equations
vars=[ E S P F];
range=[0 E0(i)-0.1;0.1 E0(i)-0.1;0.1 E0(i)-0.1;0.1 F0-0.1]; %Range of variables to omit unwanted values
sol{i}=vpasolve(equations,vars,range);
end
Hope it will help!

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numeric Solvers에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by