江湖救急!用matlab解非线性方程组提示空解,

Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN. 这个一直提示NaN
方程指令如下:
function F=sy11(x)
F=[40000*x(2) - 36680*x(1) - 8314*log(1 - x(1)) + 8314*log(1 - x(2)) + 8314*log(x(1)) - 8314*log(x(2)) - 764241040/128439;
36680*x(1) + 8314*log(1 - x(1)) - 8314*log(x(1)) - ((551032300*x(2))/128439 + 18340*x(1)*(x(1) - 1) - 20000*x(2)*(x(2) - 1) - 8314*x(1)*log(x(1)) + 8314*x(2)*log(x(2) + 8314*log(1 - x(1))*(x(1) - 1) - 8314*log(1 - x(2))*(x(2) - 1) + 12296800/1809)/(x(1) - x(2)) - 18340)];
运行指令如下:
x0=[1,1]
[x fval]=fsolve(@sy11,(x0))

end

第1个回答  2012-11-19
function F=sy11(x)
F1 = 40000*x(2) - 36680*x(1) - 8314*log(1 - x(1)) + 8314*log(1 - x(2)) + 8314*log(x(1)) - 8314*log(x(2)) - 764241040/128439;
F2 = 36680*x(1) + 8314*log(1 - x(1)) - 8314*log(x(1)) - ((551032300*x(2))/128439 + 18340*x(1)*(x(1) - 1) - 20000*x(2)*(x(2) - 1) - 8314*x(1)*log(x(1)) + 8314*x(2)*log(x(2) + 8314*log(1 - x(1))*(x(1) - 1) - 8314*log(1 - x(2))*(x(2) - 1) + 12296800/1809)/(x(1) - x(2)) - 18340);
F=[F1;F2];

1 运行指令如下:
x0=[0.9,0.2]
[x fval]=fsolve(@sy11,x0)

结果:
x =
0.923337235648763 0.251329568590227

fval =
6.3664629124105e-012
-9.09494701772928e-012

2 运行指令如下:
x0=[0.2,0.1]
[x fval]=fsolve(@sy11,x0)

结果:
x =
0.195829123959802 0.0638675515577697

fval =
1.81898940354586e-012
0
第2个回答  2012-11-19
具体数据我没细看,但就警告来说,是你的过程矩阵3了问题,产生了奇异值,你再检查一下你的指令中,是否有会导致0的对数、矩阵求逆时奇异、0在分母等的问题。追问

这个要怎么检查呢?因为x是可以取到0,1的,现在也没法带入验算,这个和初值x0的取值有没有关系呢?是不是算法错误的可能性很大?

追答

我怎么感觉你定义的函数里没有变量呢?x(1)和x(2)是全局变量吗?

追问

x(1)和x(2)是方程组的两个待解量,貌似这个是fsolve函数固定格式,未知数的表示法

追答

就算像你说的那样,但你定义的函数只有一个变量呀,而且还是x。function F=sy11(x)

本回答被提问者采纳
第3个回答  2012-11-23
12465252161545654
相似回答