对于你昨天的那个方程,是典型的非线性方程,我修改了程序,用fsolve函数来解,程序在下面。先新建一个m文件,再把以下全部程序直接复制进m文件中,运行即可,不要在主窗口中运行,用m文件来写程序,比直接在主窗口中操作方便,也算是一种好习惯吧。
由计算结果可知,解更符合实际,而且没有出现虚数。
function solution_nonl
clear all;clc
global aa bb tt pp
%-------------根据计算结果,修改迭代初值------------------------------------
xx0=[1]; %迭代初值,如果计算结果不符合实际,可修改,一般由pV=nRT给出初始的V,这里我直接取1了
t =[350.1500 348.9500 347.1500 345.4500 342.3500 340.7500 338.9500];
p =[101.3300 101.3300 101.3300 101.3300 101.3300 101.3300 101.3300 101.3300];
a =[0.9098 0.9365 0.9763 1.0223 1.0549 1.0968 1.1340 1.1773];
b =[0.0573 0.0565 0.0551 0.0535 0.0523 0.0507 0.0491 0.0470];
v=[];
for n=1:7
aa=a(n);
bb=b(n);
tt=t(n);
pp=p(n);
x(n)=fsolve(@nonlin,xx0);
end
disp(x)
function f= nonlin(x)
global aa bb tt pp
f=8.314*tt/(x-bb)-aa/(x*(x+bb))-pp;
计算结果:
28.7864 28.6871 28.5380 28.3969 28.1413 28.0084 27.8591,