使用FSOLVE求解5个非线性同时方程

32次观看(过去30天)
Anahita Piri.
Anahita Piri. 于5月5日20日
编辑: Anahita Piri.于2020年5月14日
大家好,我一直在尝试使用MATLAB的FSOLVE功能来解决流体管道问题,其中我已经将未知变量缩小为5.我已经遇到了“FSOLVE停止的错误,因为它超出了函数评估限制”并提供我复杂的答案。任何人都可以看到代码本身的问题吗?假设方程是对的吗?
我使用了函数句柄,并在另一个脚本中调用它。(我预先没有多少编程背景)
功能f = FluidSsolver(x)
dv = x(1);
v1 = x(2);
f1 = x(3);
f2 = x(4);
f3 = x(5);
rho = 999.1;
mu = 1.138 * 10 ^ -3;
g = 9.81;
za = 2.1;
zb = 9.1;
l1 = 25.1;
l2 = 25.1;
l3 = 25.1;
d1 = 3/100;
D2 = 4/100;
D3 = 5/100;
n = 0.68;
dw = 8000;
epsilon = 0;
A1 = PI * D1 ^ 2 * 0.25;
A2 = PI * D2 ^ 2 * 0.25;
A3 = PI * D3 ^ 2 * 0.25;
re1 =(rho * v1 * d1)/ mu;
V2 = SQRT((F1 * L1 * D2)/(F2 * L2 * D1))* V1;
V3 = SQRT((F1 * L1 * D3)/(F3 * L3 * D1))* V1;
Re2 =(rho * v2 * d2)/ mu;
Re3 =(rho * v3 * d3)/ mu;
F(1)= DW * n - rho * g * dv *((zb-za)+ f1 *(l1 / d1)*(v1 ^ 2 /(2 * g)));
F(2)= 1 /(SQRT(F1))+ 2 * log10(((epsilon / d1)/3.7)+(2.51 /(re1 * sqrt(f1)))))))));
F(3)= 1 /(SQRT(F2))+ 2 * log10(((epsilon / d2)/3.7)+(2.51 /(re2 * sqrt(f2)))))))));
F(4)= 1 /(SQRT(F2))+ 2 * log10(((epsilon / d3)/3.7)+(2.51 /((re3 * sqrt(f3)))))))))));
F(5)= DV - V1 * A1 - V2 * A2 - V3 * A3;
%F(5)= DV - V1 * A1 - (SQRT((V1 * F1 * L1 * D2)/ F2 * L2 * D1)* V1)* A2 - (SQRT((V1 * F1 * L1 * D3)/F3 * l3 * d1)* v1)* a3
结尾
至于函数,我在以下不同脚本中有初始猜测:
Fun = @fluidssolver.
FSOLVE(乐趣,[0.5,5,0.12,0.12,0.12])
3评论

登录评论。

接受答案

Alex Sha.
Alex Sha. 20月6日
嗨,Anahita,如果你不想要复杂的答案,那么你的eauqtions有问题,这里是第二个等式作为一个例子:
1 /(SQRT(F1))+ 2 * log(((epsilon / d1)/3.7)+(2.51 /(re1 * sqrt(f1))))))= 0
上面的等式可以简单写作:
1 /(SQRT(F1))+ 2 * log(s)= 0
在哪里s =((epsilon / d1)/3.7)+(2.51 /((re1 * sqrt(f1))))))
这是:
1 /(SQRT(F1))= -2 * log(s)
显然,“1 /(sqrt(f1))”和“2 * log(s)”都是不可能成为无重点的值,这将使等式能够走不通。
第三和第四方程的问题相同。

更多答案(3)

马特J.
马特J. 于5月5日20日
编辑:马特J. 于5月5日20日
您应该摆脱未知参数上的所有平方根。根据新的变量写下方程式 Z1 = SQRT(F1),Z2 = SQRT(F2) ,因此计算不涉及任何方形根源。
此外,如果您知道一些参数应该是非负的,那么您还应该使用 lsqnonlin , 代替 FSOLVE. ,这将是在未知数中放置下限(如果需要的话)。
2评论
马特J.
马特J. 于5月5日20日
这是它的一部分 - 如果在搜索期间值低于0,则SQRT和日志操作将生成复杂值。
然而,还有一个问题。即使您将参数绑定为正数,即使是积极的 SQRT(F) 操作是不可差分的 f = 0. , 然而 FSOLVE. 假设您的客观函数是平滑的。因此,我提到的变量的变化也很重要。

登录评论。


沃尔特罗伯森
沃尔特罗伯森 于5月5日20日
由于FSOLVE使预测计算渐变,您的变量将会为负。您的目标希望有几个变量是积极的,并且如果不是,则提供复杂的结果。
您无法进行FSOLVE。
如果您有符号工具箱,则vpasolve允许界限。
考虑形成功能的平方和,并使用LB使用Fmincon最小化。
2评论
沃尔特罗伯森
沃尔特罗伯森 于5月5日20日
VPASOLVE可以更好地处理界限(相对)。仍然存在一些情况下,它不会从边界中反弹,而是在通知边界时放弃。

登录评论。


Anahita Piri.
Anahita Piri. 20月6日
谢谢大家,虽然这些解决方案在我更改较近其真实值的值之外金宝搏官方网站的初始猜测时,这些解决方案将使更好的代码更好地完成。
谢谢你的时间和帮助!

标签

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!