Minimize: new method vs old method
- To: mathgroup at smc.vnet.net
- Subject: [mg124169] Minimize: new method vs old method
- From: Meriens <meriens at gmail.com>
- Date: Wed, 11 Jan 2012 17:19:35 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
Dear all, I have a question about the operation of Minimize. I'm doing an algorithm to calculate pressure minimizing a number called delta. I've done this with the "old method" through the function While[ Abs[delta]>10^(-8) ............. do some calculations ............. ] Now I want to try to minimize the function delta with the pressure as a variable , but I don't know how to set the problem. Surely a lot of you know how and I'm grateful in advance. Here is my notebook. (*Begin New method*) \[Omega] = N[0.2615]; Tc = N[345.86]; Pc = N[3.761]; R = 8.314472; \[Psi] = 0.42748; \[CapitalOmega] = 0.08664; \[Epsilon] = 0; \[Sigma] = 1; tr = t/Tc; alfa = (1. + (0.480 + 1.574 \[Omega] - 0.176 \[Omega]^2 ) (1 - Sqrt[tr]))^2; a = \[Psi]*alfa*R^2*(Tc^2)/Pc; b = \[CapitalOmega]*R*Tc/Pc; t = 170 ;(*K*) (*---------------End Declaration constant----------------*) q = a/(b*R*t); p = 0.01 \[Beta] = b*p/(R*t);(*dependent on p*) Zl = NSolve[ zl - \[Beta] - (zl + \[Epsilon]*\[Beta])*(zl + \[Sigma]*\[Beta])*(( 1 + \[Beta] - zl)/(q*\[Beta])) == 0, zl];(*dependent on p*) Zv = NSolve[ zv - 1 - \[Beta] + q*\[Beta]*( zv - \[Beta])/((zv + \[Epsilon]*\[Beta])*(zv + \ \[Sigma]*\[Beta])) == 0, zv];(*dependent on p*) zliquid = zl /. Zl[[1]];(*dependent on p*) zvapor = zv /. Zv[[1]];(*dependent on p*) fliquid = zliquid - 1 - Log[zliquid - \[Beta]] - q*1/(\[Sigma] - \[Epsilon])* Log[(zliquid + \[Sigma]*\[Beta])/( zliquid + \[Epsilon]*\[Beta])];(*dependent on p*) fvapor = zvapor - 1. - Log[zvapor - \[Beta]] - q*1/(\[Sigma] - \[Epsilon])* Log[(zvapor + \[Sigma]*\[Beta])/( zvapor + \[Epsilon]*\[Beta])];(*dependent on p*) fugliquid = Exp[fliquid]*p;(*dependent on p*) fugvapor = Exp[fvapor]*p;(*dependent on p*) delta = fugliquid/fugvapor - 1;(*dependent on p*) FindMinimum[Abs[delta], p] (*End New method*) (*--------------------------------------------------------------------------------------------------------------*) (*Begin old method*) While[Abs[delta] > 10^(-8), p = p*(delta + 1); tr = t/Tc; alfa = (1. + (0.480 + 1.574 \[Omega] - 0.176 \[Omega]^2 ) (1 - Sqrt[tr]))^2; a = \[Psi]*alfa*R^2*(Tc^2)/Pc; b = \[CapitalOmega]*R*Tc/Pc; \[Beta] = b*p/(R*t); q = a/(b*R*t); Zl = NSolve[ zl - \[Beta] - (zl + \[Epsilon]*\[Beta])*(zl + \[Sigma]*\[Beta])*(( 1 + \[Beta] - zl)/(q*\[Beta])) == 0, zl];(*dependent on p*) Zv = NSolve[ zv - 1 - \[Beta] + q*\[Beta]*( zv - \[Beta])/((zv + \[Epsilon]*\[Beta])*(zv + \ \[Sigma]*\[Beta])) == 0, zv]; zliquid = zl /. Zl[[1]]; zvapor = zv /. Zv[[1]]; fliquid = zliquid - 1 - Log[zliquid - \[Beta]] - q*1/(\[Sigma] - \[Epsilon])* Log[(zliquid + \[Sigma]*\[Beta])/( zliquid + \[Epsilon]*\[Beta])]; fvapor = zvapor - 1. - Log[zvapor - \[Beta]] - q*1/(\[Sigma] - \[Epsilon])* Log[(zvapor + \[Sigma]*\[Beta])/( zvapor + \[Epsilon]*\[Beta])]; fugliquid = Exp[fliquid]*p; fugvapor = Exp[fvapor]*p; delta = fugliquid/fugvapor - 1; Print[p]] (*End Old method*)