Matlab数组中的实数找出来

问题描述:

Matlab数组中的实数找出来
%Matlab程序如下,是关于求根的,三重根有实数根,也有复数根,我只要实数根,怎么拣选V?
clc;clear
% Tb/K Tc/K Pc/MPa Zc ω
% 甲烷 乙烷 丙烷 正丁烷 异丁烷 丙烯 苯 甲苯 甲醇 乙醇 丙酮 Ar O2 N2 H2 CO2 H2O NH3 R12(CCl2F2) R22(CHClF2)
dat=[
111.6300 190.5800 4.6040 0.2280 0.0110
184.5500 305.3300 4.8700 0.2840 0.0990
231.0500 369.8500 4.2490 0.2800 0.1520
272.6500 425.4000 3.7970 0.2740 0.1930
261.3000 408.1000 3.6480 0.2830 0.1760
225.4600 364.8000 4.6100 0.2750 0.1480
353.2400 562.1600 4.8980 0.2710 0.2110
383.7800 591.7900 4.1040 0.2640 0.2640
337.7000 512.6400 8.0920 0.2240 0.5640
351.4400 516.2500 6.3790 0.2400 0.6350
329.3500 508.1000 4.7000 0.2320 0.3090
87.3000 150.8000 4.2350 0.2910 -0.0040
90.1800 154.5800 5.0430 0.2890 0.0190
77.3500 126.1500 3.3940 0.2870 0.0450
20.3900 33.1900 1.2970 0.3050 -0.2200
185.1000 304.1900 7.3810 0.2740 0.2250
373.1500 647.3000 22.0640 0.2300 0.3440
239.8200 405.4500 11.3180 0.2420 0.2550
243.4000 385.0000 4.1240 0.2800 0.1760
232.4000 369.2000 4.9750 0.2670 0.2150 ];
Tc=dat(:,2);Pc=dat(:,3);omega=dat(:,5);
P=6.0; T=25+273.15; R=8.314
Tr=T./Tc;
%-Method1:V^3+alpha*V^2+beta*V+gamma=0
%PR(Peng-Robinson Equation
m=0.37646+1.54226*omega-0.26992*omega.^2;
alpha_c=(1+m.*(1-Tr.^0.5)).^2;
ac=0.457235*(R*Tc).^2./Pc;
a=ac.*alpha_c;
b=0.077796*(R*Tc./Pc);
for i=1:1:20;
c=[-P,(-P*b(i)+R*T),(2*R*T*b(i)-a(i)+3*P*b(i)^2),a(i)*b(i)-R*T*b(i)^2-P*b(i)^3 ];
V=roots(c)
end
1个回答 分类:综合 2014-11-22

问题解答:

我来补答
你得到的根应该是存储在矩阵V中吧,可以从该矩阵中把实数选出来.
for k=1:length(V)
idx(k) = isreal(V(k,1));
end
z=V(idx)
主意isreal函数兵不是对矩阵中的某一分量进行判断,只要该矩阵中有一个复数值即判断为伪.所以我不得不用了循环.
 
 
展开全文阅读
剩余:2000
上一页:椭圆简单性质
下一页:求解这个表格