Matlab编程——符号计算实例

实例一:

其中,验证代码部分无效。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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符号运算,公式化简,积分,微分,等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值