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解一个函数,能否给出详细的代码?本人是初学者,还什么都不会,回答越详细越好。