alternatives to large numbers of anonymous function?

1 view (last 30 days)
Is there any alternatives to using tons of anonymous functions that build on each other? I have about 100 or so that are solved in order and I am attempting to use fminicon to solve for the vector that would satisfy them but they take forever to evaluate. Is there any way I should look into to make this faster?
moles00=@(moles) moles/sum(moles);
kk0=@(moles) abs((moles00(moles)/sum(moles00(moles)))*Pvapa-Ptot);
minkk0=@(moles) min(kk0(moles));
Pvap_i0=@(moles) find(kk0(moles)==minkk0(moles));
Pvap0=@(moles) Pvapa(:,Pvap_i0(moles));
xg0=@(moles) ((moles00(moles).*Pvap0(moles)')/sum(moles00(moles)*Pvap0(moles)));
moles5=@(moles) moles00(moles)-0.05*xg0(moles);
x5=@(moles) moles5(moles)/sum(moles5(moles));
kk5=@(moles) abs(x5(moles)*Pvapa-Ptot);
minkk5=@(moles) min(kk5(moles));
Pvap_i5=@(moles) find(kk5(moles)==minkk5(moles));
Pvap5=@(moles) Pvapa(:,Pvap_i5(moles));
xg5=@(moles) ((x5(moles).*Pvap5(moles)')/sum(x5(moles)*Pvap5(moles)));
moles10=@(moles) moles5(moles)-0.05*xg5(moles);
x10=@(moles) moles10(moles)/sum(moles10(moles));
kk10=@(moles) abs(x10(moles)*Pvapa-Ptot);
minkk10=@(moles) min(kk10(moles));
Pvap_i10=@(moles) find(kk10(moles)==minkk10(moles));
Pvap10=@(moles) Pvapa(:,Pvap_i10(moles));
xg10=@(moles) ((x10(moles).*Pvap10(moles)')/sum(x10(moles)*Pvap10(moles)));
moles15=@(moles) moles10(moles)-0.05*xg10(moles);
x15=@(moles) moles15(moles)/sum(moles15(moles));
kk15=@(moles) abs(x15(moles)*Pvapa-Ptot);
minkk15=@(moles) min(kk15(moles));
Pvap_i15=@(moles) find(kk15(moles)==minkk15(moles));
Pvap15=@(moles) Pvapa(:,Pvap_i15(moles));
xg15=@(moles) ((x15(moles).*Pvap15(moles)')/sum(x15(moles)*Pvap15(moles)));
moles20=@(moles) moles15(moles)-0.05*xg15(moles);
x20=@(moles) moles20(moles)/sum(moles20(moles));
kk20=@(moles) abs(x20(moles)*Pvapa-Ptot);
minkk20=@(moles) min(kk20(moles));
Pvap_i20=@(moles) find(kk20(moles)==minkk20(moles));
Pvap20=@(moles) Pvapa(:,Pvap_i20(moles));
xg20=@(moles) ((x20(moles).*Pvap20(moles)')/sum(x20(moles)*Pvap20(moles)));
moles25=@(moles) moles20(moles)-0.05*xg20(moles);
x25=@(moles) moles25(moles)/sum(moles25(moles));
kk25=@(moles) abs(x25(moles)*Pvapa-Ptot);
minkk25=@(moles) min(kk25(moles));
Pvap_i25=@(moles) find(kk25(moles)==minkk25(moles));
Pvap25=@(moles) Pvapa(:,Pvap_i25(moles));
xg25=@(moles) ((x25(moles).*Pvap25(moles)')/sum(x25(moles)*Pvap25(moles)));
moles30=@(moles) moles25(moles)-0.05*xg25(moles);
x30=@(moles) moles30(moles)/sum(moles30(moles));
kk30=@(moles) abs(x30(moles)*Pvapa-Ptot);
minkk30=@(moles) min(kk30(moles));
Pvap_i30=@(moles) find(kk30(moles)==minkk30(moles));
Pvap30=@(moles) Pvapa(:,Pvap_i30(moles));
xg30=@(moles) ((x30(moles).*Pvap30(moles)')/sum(x30(moles)*Pvap30(moles)));
moles35=@(moles) moles30(moles)-0.05*xg30(moles);
x35=@(moles) moles35(moles)/sum(moles35(moles));
kk35=@(moles) abs(x35(moles)*Pvapa-Ptot);
minkk35=@(moles) min(kk35(moles));
Pvap_i35=@(moles) find(kk35(moles)==minkk35(moles));
Pvap35=@(moles) Pvapa(:,Pvap_i35(moles));
xg35=@(moles) ((x35(moles).*Pvap35(moles)')/sum(x35(moles)*Pvap35(moles)));
moles40=@(moles) moles35(moles)-0.05*xg35(moles);
x40=@(moles) moles40(moles)/sum(moles40(moles));
kk40=@(moles) abs(x40(moles)*Pvapa-Ptot);
minkk40=@(moles) min(kk40(moles));
Pvap_i40=@(moles) find(kk40(moles)==minkk40(moles));
Pvap40=@(moles) Pvapa(:,Pvap_i40(moles));
xg40=@(moles) ((x40(moles).*Pvap40(moles)')/sum(x40(moles)*Pvap40(moles)));
moles45=@(moles) moles40(moles)-0.05*xg40(moles);
x45=@(moles) moles45(moles)/sum(moles45(moles));
kk45=@(moles) abs(x45(moles)*Pvapa-Ptot);
minkk45=@(moles) min(kk45(moles));
Pvap_i45=@(moles) find(kk45(moles)==minkk45(moles));
Pvap45=@(moles) Pvapa(:,Pvap_i45(moles));
xg45=@(moles) ((x45(moles).*Pvap45(moles)')/sum(x45(moles)*Pvap45(moles)));
moles50=@(moles) moles45(moles)-0.05*xg45(moles);
x50=@(moles) moles50(moles)/sum(moles50(moles));
kk50=@(moles) abs(x50(moles)*Pvapa-Ptot);
minkk50=@(moles) min(kk50(moles));
Pvap_i50=@(moles) find(kk50(moles)==minkk50(moles));
Pvap50=@(moles) Pvapa(:,Pvap_i50(moles));
xg50=@(moles) ((x50(moles).*Pvap50(moles)')/sum(x50(moles)*Pvap50(moles)));
moles55=@(moles) moles50(moles)-0.05*xg50(moles);
x55=@(moles) moles55(moles)/sum(moles55(moles));
kk55=@(moles) abs(x55(moles)*Pvapa-Ptot);
minkk55=@(moles) min(kk55(moles));
Pvap_i55=@(moles) find(kk55(moles)==minkk55(moles));
Pvap55=@(moles) Pvapa(:,Pvap_i55(moles));
xg55=@(moles) ((x55(moles).*Pvap55(moles)')/sum(x55(moles)*Pvap55(moles)));
moles60=@(moles) moles55(moles)-0.05*xg55(moles);
x60=@(moles) moles60(moles)/sum(moles60(moles));
kk60=@(moles) abs(x60(moles)*Pvapa-Ptot);
minkk60=@(moles) min(kk60(moles));
Pvap_i60=@(moles) find(kk60(moles)==minkk60(moles));
Pvap60=@(moles) Pvapa(:,Pvap_i60(moles));
xg60=@(moles) ((x60(moles).*Pvap60(moles)')/sum(x60(moles)*Pvap60(moles)));
moles65=@(moles) moles60(moles)-0.05*xg60(moles);
x65=@(moles) moles65(moles)/sum(moles65(moles));
kk65=@(moles) abs(x65(moles)*Pvapa-Ptot);
minkk65=@(moles) min(kk65(moles));
Pvap_i65=@(moles) find(kk65(moles)==minkk65(moles));
Pvap65=@(moles) Pvapa(:,Pvap_i65(moles));
xg65=@(moles) ((x65(moles).*Pvap65(moles)')/sum(x65(moles)*Pvap65(moles)));
moles70=@(moles) moles65(moles)-0.05*xg65(moles);
x70=@(moles) moles70(moles)/sum(moles70(moles));
kk70=@(moles) abs(x70(moles)*Pvapa-Ptot);
minkk70=@(moles) min(kk70(moles));
Pvap_i70=@(moles) find(kk70(moles)==minkk70(moles));
Pvap70=@(moles) Pvapa(:,Pvap_i70(moles));
xg70=@(moles) ((x70(moles).*Pvap70(moles)')/sum(x70(moles)*Pvap70(moles)));
moles75=@(moles) moles70(moles)-0.05*xg70(moles);
x75=@(moles) moles75(moles)/sum(moles75(moles));
kk75=@(moles) abs(x75(moles)*Pvapa-Ptot);
minkk75=@(moles) min(kk75(moles));
Pvap_i75=@(moles) find(kk75(moles)==minkk75(moles));
Pvap75=@(moles) Pvapa(:,Pvap_i75(moles));
xg75=@(moles) ((x75(moles).*Pvap75(moles)')/sum(x75(moles)*Pvap75(moles)));
moles80=@(moles) moles75(moles)-0.05*xg75(moles);
x80=@(moles) moles80(moles)/sum(moles80(moles));
kk80=@(moles) abs(x80(moles)*Pvapa-Ptot);
minkk80=@(moles) min(kk80(moles));
Pvap_i80=@(moles) find(kk80(moles)==minkk80(moles));
Pvap80=@(moles) Pvapa(:,Pvap_i80(moles));
xg80=@(moles) ((x80(moles).*Pvap80(moles)')/sum(x80(moles)*Pvap80(moles)));
moles85=@(moles) moles80(moles)-0.05*xg80(moles);
x85=@(moles) moles85(moles)/sum(moles85(moles));
kk85=@(moles) abs(x85(moles)*Pvapa-Ptot);
minkk85=@(moles) min(kk85(moles));
Pvap_i85=@(moles) find(kk85(moles)==minkk85(moles));
Pvap85=@(moles) Pvapa(:,Pvap_i85(moles));
xg85=@(moles) ((x85(moles).*Pvap85(moles)')/sum(x85(moles)*Pvap85(moles)));
moles90=@(moles) moles85(moles)-0.05*xg85(moles);
x90=@(moles) moles90(moles)/sum(moles90(moles));
kk90=@(moles) abs(x90(moles)*Pvapa-Ptot);
minkk90=@(moles) min(kk90(moles));
Pvap_i90=@(moles) find(kk90(moles)==minkk90(moles));
Pvap90=@(moles) Pvapa(:,Pvap_i90(moles));
xg90=@(moles) ((x90(moles).*Pvap90(moles)')/sum(x90(moles)*Pvap90(moles)));
moles95=@(moles) moles90(moles)-0.05*xg90(moles);
x95=@(moles) moles95(moles)/sum(moles95(moles));
kk95=@(moles) abs(x95(moles)*Pvapa-Ptot);
minkk95=@(moles) min(kk95(moles));
Pvap_i95=@(moles) find(kk95(moles)==minkk95(moles));
Pvap95=@(moles) Pvapa(:,Pvap_i95(moles));
xg95=@(moles) ((x95(moles).*Pvap95(moles)')/sum(x95(moles)*Pvap95(moles)));
moles100=@(moles) moles95(moles)-0.05*xg95(moles);
x100=@(moles) moles100(moles)/sum(moles100(moles));
kk100=@(moles) abs(x100(moles)*Pvapa-Ptot);
minkk100=@(moles) min(kk100(moles));
Pvap_i100=@(moles) find(kk100(moles)==minkk100(moles));
Pvap100=@(moles) Pvapa(:,Pvap_i100(moles));
xg100=@(moles) ((x100(moles).*Pvap100(moles)')/sum(x100(moles)*Pvap100(moles)));
T10f=@(moles) T0+(Pvap_i10(moles)-1);
T20f=@(moles) T0+(Pvap_i20(moles)-1);
T50f=@(moles) T0+(Pvap_i50(moles)-1);
T90f=@(moles) T0+(Pvap_i90(moles)-1);
eq2=@(moles) T10f(moles)-T10a+273;
eq3=@(moles) T20f(moles)-T20a+273;
eq4=@(moles) T50f(moles)-T50a+273;
eq5=@(moles) T90f(moles)-T90a+273;
  3 Comments
Stuart Nates
Stuart Nates on 19 Mar 2019
How would you do that with the Pvapa part? I was attempting to find the Temperature which gives me the minimum value (Pvapa is the Pvap multiplied by a bunch of different temperatures) and have to find those for the xg part. That was the biggest issue when I was trying to figure out how to do that
Stuart Nates
Stuart Nates on 19 Mar 2019
Im an idiot. I just realized what you meant and I never even thought about just doing a normal function for some reason

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!