当前位置:编程学习 > Matlab >>

matlab中solve函数能不能接受函数的输入 下面是我的代码,貌似是我标出的那行有错, 请大侠帮忙看看

function [ x,f,n ] = Zontendijk() %Zontendijk方法求解 % Detailed explanation goes here syms x1 x2 x3 fx=x1^2+2*x2^2+3*x3^2+x1*x2-2*x1*x3+x2*x3-4*x1-6*x2; gx=-x1-2*x2-x3+4; gx1=x1; gx2=x2; gx3=x3; Dfx=jacobian(fx,[x1,x2,x3]).'; Dgx=jacobian(gx,[x1,x2,x3]).'; Dgx1=jacobian(gx1,[x1,x2,x3]).'; Dgx2=jacobian(gx2,[x1,x2,x3]).'; Dgx3=jacobian(gx3,[x1,x2,x3]).'; eps=10e-6;k=1;x=[x1;x2;x3];x0=[0;0;0];flag=0; while(flag==0) syms d1 d2 d3 z A=[subs(Dfx,x,x0).' 1;subs(Dgx,x,x0).' 1;subs(Dgx1,x,x0).' 1;subs(Dgx2,x,x0).' 1;subs(Dgx3,x,x0).' 1]; b=[0 -subs(gx,x,x0) -subs(gx1,x,x0) -subs(gx2,x,x0) -subs(gx3,x,x0)].'; f=[0;0;0;1]; lb=[-1;-1;-1;1e-6]; ub=[1;1;1;1e6]; [lx,lfval]=linprog(f,A,b,[],[],lb,ub); k=k+1; d0=lx(1:3,:); if(abs(lfval)<eps) flag=1; else syms L xL0=x0+L*d0; A=sym(['A:=solve({subs(gx,x,xL0)>=0,subs(gx1,x,xL0)>=0,subs(gx2,x,xL0)>=0,subs(gx3,x,xL0)>=0},L):A:=op(A):[op(A[1]),op(A[2])]']);%出错行 Lmax=A(2); L0=fminbnd(fLx,0,Lmax); x00=x0+L0*d0; end end x=x0;f=lfval;n=k; end
补充:A=sym(['A:=subs(solve({subs(gx,x,xL0)>=0,subs(gx1,x,xL0)>=0,subs(gx2,x,xL0)>=0,subs(gx3,x,xL0)>=0},L)):A:=op(A):[op(A[1]),op(A[2])]']);%改成这依然报错
答案:>> a=3;
>> solve('a*x-3=0','x')
得到的结果是
ans =
 
3/a
也就是说,solve里面将a当成符号,而没有把你a=3代入。
试着改成
>> subs(solve('a*x-3=0','x'))
就得到ans=1的结果了。


你的问题也可以这样弄。
solve再加一个subs()


另外你也可以自己将方程中的变量先将值代入,然后再解方程
比如:
clear
>> a=3;
>> equ=sprintf('a*x-3=0');
>> equ=subs(equ); %这一步就是将a=3代入
>> solve(equ,x)

上一个:需要MATLAB代码!谢谢!
下一个:想用matlab解一个函数,能否给出详细的代码?本人是初学者,还什么都不会,回答越详细越好。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,