Filter löschen
Filter löschen

weighted non-linear fit help

1 Ansicht (letzte 30 Tage)
Hill
Hill am 10 Sep. 2012
I am trying to fit the following non-linear equation (SpO2) for two parameters S and HK1 where my input data is SpO2 (dependent range:[0.5,1]) and FIO2 (independent range:[0.5,1]). My S range is [0,1] (should normally be 0.1), my HK1 range is [0,+inf] (should normally be 1). I get a RootOf equation (caused by solving a cubic equation). If I substitute in values for FIO2, HK1 and S, I need to use the double command to have the answer solved. I will only need the real root, although 16 roots are returned, the correct one is #7 (verified elsewhere). I have tried to use fittype and nlinfit but they don't seem to want to take my equation as a "model". I am not terribly familiar with Matlab, so any help would be greatly appreciated.
Thanks!
syms FIO2 Hb L Pa PaCO2_1 Pb Pc1 Q Q_1 R RQ S Sa Sc1 T Va_1 a1 a2 a3 avD HK1
avD=5 %known constant
Hb=15 %known constant
a1=23400 %known constant
a2=1 %known constant
a3=150 %known constant
Pb=760 %known constant
RQ=0.8 %known constant
L=863/100 %known constant
Va_1 = HK1*Q_1 %A way to get a number for a ratio
eq1 = '134*Hb*Sc1*(1/100)+3*Pc1*(1/1000)-134*Hb*Sa*(1/100)-3*Pa*(1/1000) = S*avD/(1-S)' %Shunt equation
Sa = '1/(a1/(a2*Pa^3+a3*Pa)+1)' %Severinghaus equation
Sc1 = '1/(a1/(a2*Pc1^3+a3*Pc1)+1)'
Pc1 = 'FIO2*(Pb-47)-PaCO2_1*(1-FIO2*(1-RQ))/RQ'
eq50a = 'Va_1/Q_1 = L*RQ*avD/PaCO2_1'
PaCO2_1=solve(eq50a,'PaCO2_1')
%Make the algebra easier to solve for Pa
Q='((Hb*Sc1*134)/(100))',R='((Pc1*3)/(1000))',T='(S/(1-S))*avD'
%Modified shunt equation
eq12='Q+R-(67/50)*Hb/(a1/(a2*Pa^3+a3*Pa)+1)-(3/1000)*Pa = T'
Pa=solve(eq12,'Pa') %Rootof solution cause
Sap=subs(Sa,'Pa',Pa)
eqh1=subs(Sap,{'Q','R','T'},{Q,R,T})
%There is probably a more direct way to do this, substituting in all of my knowns and equations
eqh2=subs(eqh1,'Sc1',Sc1);
eqh2=subs(eqh2,'Pc1',Pc1)
eqh2=subs(eqh2,'PaCO2_1',PaCO2_1)
eqh2=subs(eqh2,'Va_1',Va_1)
SpO2=subs(eqh2,{'avD','Hb','a1','a2','a3','Pb','RQ','L'},{avD,Hb,a1,a2,a3,Pb,RQ,L})
%sample data set
FIO2data=[0.209 0.182 0.165 0.15 0.132 0.109 0.208 0.236 0.278 0.329]
SPO2data=[0.965 0.942 0.841 0.787 0.746 0.623 0.973 0.98 0.983 0.983]

Antworten (0)

Kategorien

Mehr zu Mathematics and Optimization finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by