Citat:
Ursprungligen postat av Ikigai
Ok. Hur skulle det se ut i matlab i så fall?
Observera att koden jag skrivit tar att man kan ange a,b,T också. Om de är fixa (som bara för ett problem) så kan man modifiera koden efter tycke och smak. Man kan också modifiera så att det går att ta par av (P,T) i vektorer om man känner för det, dvs givna tryck och temperaturer medan repulsion- och attraktionskonstanterna är fixa.
Kod:
function Vw = vanw(a,b,P,T)
R = 0.082054 ;
n = length(P) ;
Vw = zeros(1,n) ;
for i=1:n
sol = roots([P(i) (-P(i)*b-R*T) a (-a*b)]) ;
Vw(i) = sol(sol == real(sol)) ;
end
VI = R*T./P
Nu ligger de från VDW-ekvation i Vw och de från ideal i VI. Observera att P är en tryckvektor nu, men kan även vara ett rent tal. Exempel:
vanw(3.592,0.04267,[1 10 100],300) ger:
VI =
24.6162 2.4616 0.2462
ans =
24.5126 2.3545 0.0795
Och ans är här alltså VW. Man kan naturligtvis trycka bort så inte VI syns eller modifiera på annat vis.
För härledning av tredjegradspolynomet så se:
(p + a/v^2)(v - b) = RT
Multiplicera med v^2 ger:
(p*v^2 + a)(v - b) = RT*v^2
p*v^3 - b*p*v^2 + a*v - a*b = RT*v^2
v^3*(p) + v^2*(-b*p-RT) + a*v + (-a*b) = 0
roots tar ett polynoms koefficienter och löser ekvationen. Med raden Vw(i) = sol(sol == real(sol)) ; så tar vi bort de komplexa lösningarna. Observera att om VDW ekvation ger flera reella lösningar (jag vet inte om det scenariot kan uppkomma) blir det problem.