1、配料问题一半应该有目标函数吧?最好把原始问题贴出来。
当然,如果没有目标函数,也可以自己随便设定,能够影响到的是,求出的究竟是哪一个解。
2、这可以看作一个优化问题来求解,而不是解方程组。要想求出唯一的一组解往往是做不到的,因为这取决于你给的限定条件本身是否具有唯一解。具有唯一解的几何意义是N维空间中的一个点,这种可能远远小于有多个解(空间的一个区域)或者无解(约束条件存在冲突)的情况。
3、就题主现在的问题而言,就是无解的,这可以用线性规划的方法验证:
Ae=[2 3 5 6; 1 1 1 1];be=[89; 20];
lb=[5 0 0 0];
ub=[10 5 5 5];
x=linprog([1 0 0 0],[],[],Ae,be,lb,ub)
得到结果是无法找到可行解。
上述结论也可以通过Lingo进行验证:
max=x1;2x1+3x2+5x3+6x4=89;
x1+x2+x3+x4=20;
5<x1;
x1<10;
0<x2;
x2<5;
0<x3;
x3<5;
0<x4;
x4<5;
用Lingo的好处是,可以通过Debug来判断哪些约束条件造成冲突:
Constraints and bounds that cause an infeasibility:Sufficient Rows:
(Dropping any sufficient row will make the model feasible)
[_3] X1 + X2 + X3 + X4 = 20 ;
[_2] 2 X1 + 3 X2 + 5 X3 + 6 X4 = 89 ;
[_9] X3 <= 5 ;
[_11] X4 <= 5 ;
Necessary Variable Bounds:
(If none of the necessary and sufficient bounds are dropped,
then the model remains infeasible)
X1 >= 0
例如,如果上面的条件去掉x3<5或x4<5这两个约束中的一个,问题就是有解的。
如何用Matlab求解隐函数方程组?一般来说,对于非线性方程组是可以用fsolve求解。求解过程:
1、确定初值,一般可以先用ezplot函数作图,并判断x1,x2的附近值作为x0的初值
2、自定义函数,即
func=@(x)[x(1)exp(-12/x(1))/(x(1)-x(2))-x(2)exp(-12/x(2))/(x(1)-x(2))-07;x(1)exp(-32/x(1))/(x(1)-x(2))-x(2)exp(-32/x(2))/(x(1)-x(2))-04];
3、使用fsolve函数求得其数值解,即
[x,fval]=fsolve(func,x0)
4、判断x是否你要求的解,可以看fval是否接近等于0
5、如符合你的精度要求,即可认为该值就是要的解。
看楼主的意思,每次求得的解应该是相同的大小的一维数组,因为不知道具体的解的维度,大概写一下,应该像下面这样吧:for i=1:20
x(:,i)=fsolve(@energe,x0,[],Qxi(i),Qyi(i),cx(i),cy(i));
end
注意要把i=i+1去掉,for循环会自动加的。。。
如果不对的话请把具体维数告诉我,才能写出程序~~看楼主的意思,每次求得的解应该是相同的大小的一维数组,因为不知道具体的解的维度,大概写一下,应该像下面这样吧:
for i=1:20
x(:,i)=fsolve(@energe,x0,[],Qxi(i),Qyi(i),cx(i),cy(i));
end
注意要把i=i+1去掉,for循环会自动加的。。。
如果不对的话请把具体维数告诉我,才能写出程序~~
题主给出的方程组,可以用vpasolve函数求出其实数解。
syms v f
assume([v,f],'real') %设v,f为实数
[f,v]=vpasolve(0694v+vv/(254f)==195,f==00000235vv-0004518v+05086)
用matlab求解微分方程组的解析解,可以用dsolve()函数,如求其数值解,则可以用ode45()函数。解析解的格式
[V1,V2,r]=dsolve(‘微分方程组表达式’)
数值解的格式
[t,x]=ode45(@ode_fun,tspan,X0)
由于题主给出的已知值和初始条件书写比较撩草,容易混淆。请重新上传清楚的表达式和条件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)