其中,验证代码部分无效。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc;
syms v w p1 p2 t x v c f
u1 = v + w - p1 - t*x;
u2 = v - p2 -t*(1-x);
y = u1 - u2;
[x] = solve(y,'x');
y = simplify(y);
x = simplify(x);
D1 = 1/2 + 1/(2*t)*(w - p1 + p2);
D2 = 1/2 - 1/(2*t)*(w - p1 + p2);
PI1 = (p1 - c)*D1;
PI2 = (p2 -c -f)*D2;
D1 = simplify(D1);
D2 = simplify(D2);
PI1 = simplify(PI1);
PI2 = simplify(PI2);
PI1_p1 = diff(PI1,p1);
PI2_p2 = diff(PI2,p2);
[p1,p2] = solve(PI1_p1,PI2_p2,'p1','p2');
PI1_p1 = simplify(PI1_p1);
PI2_p2 = simplify(PI2_p2);
p1 = simplify(p1)
p2 = simplify(p2)
%将p1和p2代入D1 D2 PI1 PI2 u1 u2
syms x
D1 = 1/2 + 1/(2*t)*(w - p1 + p2);
D2 = 1/2 - 1/(2*t)*(w - p1 + p2);
D1 = simplify(D1)
D2 = simplify(D2)
PI1 = (p1 - c)*D1;
PI2 = (p2 -c -f)*D2;
PI1 = simplify(PI1)
PI2 = simplify(PI2)
u1 = v + w - p1 - t*x;
u2 = v - p2 -t*(1-x);
cs = int(u1,x,0,D1) + int(u2,x,D1,1);
cs = simplify(cs)
sw = cs + PI1 + PI2 + f*D2;
sw = simplify(sw)
sw_f = diff(sw,f);
sw_f = simplify(sw_f)
x = (p2 - p1 + w)/(2*t) + 1/2;
u1 = subs(u1,x,(p2 - p1 + w)/(2*t) + 1/2);
u2 = subs(u2,x,(p2 - p1 + w)/(2*t) + 1/2);
x = simplify(x)
u1 = simplify(u1)
u2 = simplify(u2)
% %%%%%%验证
% syms p1 p2
% u1 = v + w - p1 - t*x;
% u2 = v - p2 -t*(1-x);
%
% y = u1 - u2;
% [x] = solve(y,'x');
%
% u1 = v + w - p1 - t*x;
% u2 = v - p2 -t*(1-x);
% D1 = 1/2 + 1/(2*t)*(w - p1 + p2);
% D2 = 1/2 - 1/(2*t)*(w - p1 + p2);
% PI1 = (p1 - c)*D1;
% PI2 = (p2 -c -f)*D2;
%
% PI1_p1 = diff(PI1,p1)
% PI2_p2 = diff(PI2,p2)
%
% PI1_p1 = simplify(PI1_p1)
% PI2_p2 = simplify(PI2_p2)
clear;clc;
syms v w p1 p2 t x x1 x2 v c f
u1 = v + w - p1 -t*(x - x1)^2;
u2 = v - p2 - t*(x2 - x)^2;
D1 = x;
D2 = 1-x;
y = u1 - u2;
[x] = solve(y,'x');
x = simplify(x);
D1 = x;
D2 = 1-x;
PI1 = (p1 -c)*D1;
PI2 = (p2 -c -f)*D2;
% PI1 = simplify(PI1);
% PI2 = simplify(PI2);
PI1_p1 = diff(PI1,p1);
PI2_p2 = diff(PI2,p2);
% PI1_p1 = simplify(PI1_p1);
% PI2_p2 = simplify(PI2_p2);
%%%得到p1,p2
[p1,p2] = solve(PI1_p1,PI2_p2,'p1','p2');
p1 = simplify(p1);
p2 = simplify(p2);
%%%得到x1,x2
x = x1/2 + x2/2 - (p2 - p1 + w)/(2*t*(x1 - x2));
D1 = x;
D2 = 1-x;
PI1 = (p1 -c)*D1;
PI2 = (p2 -c -f)*D2;
PI1 = simplify(PI1);
PI2 = simplify(PI2);
PI1_x1 = diff(PI1,x1);
PI2_x2 = diff(PI2,x2);
[x1,x2] = solve(PI1_x1,PI2_x2,'x1','x2');
x1 = simplify(x1)
x2 = simplify(x2)
x = x1/2 + x2/2 - (p2 - p1 + w)./(2*t*(x1 - x2));
x = simplify(x);
%%%%%%%%%%%%%%%%%%%%将x1,x2代入p1 p2 D1 D2 PI1 PI2 u1 u2
% cs = int(u1,x,0,D1(m)) + int(u2,x,D1(m),1);
% sw = cs + PI1(m) + PI2(m) + f*D2;
% sw_f = diff(sw,f)
% %%%%%%%%%%%%%%%%%%%%%%输出%%%%%%%%%%%%%%%%%%%%%%%%%
% p1 = (t*x2.^2)/3 + (2*t*x2)/3 + c + f/3 + w/3 - (2*t*x1)/3 - (t*x1.^2)/3;
% p1 = simplify(p1)
% p2 = (t*x1.^2)/3 - (4*t*x1)/3 + c + (2*f)/3 - w/3 + (4*t*x2)/3 - (t*x2.^2)/3;
% p2 = simplify(p2)
% x = x1/2 + x2/2 - (p2 - p1 + w)./(2*t*(x1 - x2));
% x = simplify(x)
% D1 = x;
% D2 = 1-x;
% D1 = simplify(D1)
% D2 = simplify(D2)
% u1 = v + w - p1 -t*(x - x1).^2;
% u2 = v - p2 - t*(x2 - x).^2;
% u1 = simplify(u1)
% u2 = simplify(u2)
% PI1 = (p1 -c).*D1;
% PI2 = (p2 -c -f).*D2;
% PI1 = simplify(PI1)
% PI2 = simplify(PI2)
% %%%%%%%%%%%%%%%%%%%%%%输出%%%%%%%%%%%%%%%%%%%%%%%%%
for m = 1:5
m;
syms x
disp(['第' num2str(m) '个计算结果'])
% p1 = (t*x2^2)/3 + (2*t*x2)/3 + c + f/3 + w/3 - (2*t*x1)/3 - (t*x1^2)/3;
% p2 = (t*x1^2)/3 - (4*t*x1)/3 + c + (2*f)/3 - w/3 + (4*t*x2)/3 - (t*x2^2)/3;
% x = x1/2 + x2/2 - (p2 - p1 + w)/(2*t*(x1 - x2));
% D1 = x;
% D2 = 1-x;
% u1 = v + w - p1 -t*(x - x1)^2;
% u2 = v - p2 - t*(x2 - x)^2;
% PI1 = (p1 -c)*D1;
% PI2 = (p2 -c -f)*D2;
% PI1 = simplify(PI1);
% PI2 = simplify(PI2);
p1 = (t*x2(m)^2)/3 + (2*t*x2(m))/3 + c + f/3 + w/3 - (2*t*x1(m))/3 - (t*x1(m)^2)/3;
p2 = (t*x1(m)^2)/3 - (4*t*x1(m))/3 + c + (2*f)/3 - w/3 + (4*t*x2(m))/3 - (t*x2(m)^2)/3;
%x = x1(m)/2 + x2(m)/2 - (p2 - p1 + w)/(2*t*(x1(m) - x2(m)));
D1 = x;
D2 = 1-x;
u1 = v + w - p1 -t*(x - x1(m))^2;
u2 = v - p2 - t*(x2(m) - x)^2;
PI1 = (p1 -c)*D1;
PI2 = (p2 -c -f)*D2;
PI1 = simplify(PI1);
PI2 = simplify(PI2);
cs = int(u1,x,0,D1) + int(u2,x,D1,1);
sw = cs + PI1 + PI2 + f*D2;
% x = x1(m)/2 + x2(m)/2 - (p2 - p1 + w)/(2*t*(x1(m) - x2(m)))
cs = subs(cs,x,x1(m)/2 + x2(m)/2 - (p2 - p1 + w)/(2*t*(x1(m) - x2(m))));
sw = subs(sw,x,x1(m)/2 + x2(m)/2 - (p2 - p1 + w)/(2*t*(x1(m) - x2(m))));
cs = simplify(cs)
sw = simplify(sw)
sw_f = diff(sw,f);
sw_f = simplify(sw_f)
end
通过模仿以上两个程序,可以实现基本Matlab符号运算,公式化简,积分,微分,等操作。