From 95f484af5cfd2ceac5e5c61cca18412a88b544c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:52:24 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E7=BA=BF=E6=80=A7=E8=A7=84=E5=88=92?= =?UTF-8?q?=E4=BE=8B=E9=A2=981=5F3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mengtkl.m | 61 -------------- NLP.m | 135 ----------------------------- README.md | 2 - fun1.m | 3 - fun2.m | 15 ---- intLP.m | 49 ----------- mm1.m | 140 ------------------------------- mm2_graph.m | 94 --------------------- LPej1_3.m => 姚安欣/LPej1_3.m | 80 +++++++++--------- 9 files changed, 40 insertions(+), 539 deletions(-) delete mode 100644 Mengtkl.m delete mode 100644 NLP.m delete mode 100644 README.md delete mode 100644 fun1.m delete mode 100644 fun2.m delete mode 100644 intLP.m delete mode 100644 mm1.m delete mode 100644 mm2_graph.m rename LPej1_3.m => 姚安欣/LPej1_3.m (97%) diff --git a/Mengtkl.m b/Mengtkl.m deleted file mode 100644 index f7a9028..0000000 --- a/Mengtkl.m +++ /dev/null @@ -1,61 +0,0 @@ - -%27页例题 -clc; clear; close all; -n = 10000; % 使用较小的 n 值以便更容易可视化 -x = unifrnd(0, 12, [1, n]); -y = unifrnd(0, 9, [1, n]); -ans=sum(y < x.^2 & x <= 3)+sum(y < 12 - x & x >= 3); -ans=ans/n; -% 找出满足条件的点 -condition1 = y < x.^2 & x <= 3; -condition2 = y < 12 - x & x >= 3; -condition_met = condition1 | condition2; % 满足任一条件的点 -condition_not_met = ~condition_met; % 不满足任何条件的点 - -% 创建图形窗口 -figure; -hold on;%在同一张图上绘图 - -% 绘制不满足任何条件的点 -scatter(x(condition_not_met), y(condition_not_met), 'k.'); % k----黑色 .----绘制样式 -%scatter绘制散点图 -%x(condition_not_met) 会返回一个新的向量,其中只包含 x 中对应 condition_not_met 为 true 的元素。 - -% 绘制满足第一个条件的点 -scatter(x(condition1), y(condition1), 'r.'); % 红色 - -% 绘制满足第二个条件的点 -scatter(x(condition2), y(condition2), 'b.'); % 蓝色 - -% 添加图例和标签 -legend('不满足任何条件的点', '满足 y < x^2 且 x <= 3 的点', '满足 y < 12 - x 且 x >= 3 的点'); -xlabel('x'); -ylabel('y'); -title('随机生成的点和满足条件的点'); -hold off; - - -%蒙特卡洛法求圆周率qw -clc;clear;close all; - -n=10^5; -x=unifrnd(-1,1,[1,n]); -y=unifrnd(-1,1,[1,n]); -con1=x.^2+y.^2<=1; -con2=~con1; -ans=sum(x.^2+y.^2<=1); -ans=ans/n*4; - -figure ; -hold on; - -scatter(x(con1),y(con1),'r.'); -scatter(x(con2),y(con2),'k.'); - -hold off; - - - - - - diff --git a/NLP.m b/NLP.m deleted file mode 100644 index 7f46e9b..0000000 --- a/NLP.m +++ /dev/null @@ -1,135 +0,0 @@ - -%非线性规划 - -%P42例题 - -%求解 -clc,clear,format long g,close all; -syms x1 x2;%符号变量(用于定义函数、求解方程、计算导数和积分) -f=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); -f=simplify(f); -f1=diff(f,x1),f2=diff(f,x2); -[x10,x20]=solve(f1,f2);%求驻点即使f1,f2为0的点 -x10=round(double(x10));%四舍五入 -x20=round(double(x20)); -f0=subs(f,{x1,x2},{x10,x20}); -f0=double(f0); -subplot(121); -fmesh(f,[0,10000,0,10000]);%3维 -%xlabel('x1','Interpreter','latex'); -%ylabel('y1','Interpreter','latex'); -xlabel('x1'); -ylabel('y1'); -subplot(122); -L=fcontour(f,[0,10000,0,10000]); -contour(L.XData,L.YData,L.ZData,'ShowText','on'); -xlabel('x1'); -ylabel('y1'); -p1=339-0.01*x10-0.003*x20; -p2=399-0.004*x10-0.01*x20; -c=195*x10+225*x20+400000; -rate=f0/c; - -%灵敏性检验 分析 最优解 对 19村彩电价格下降幅度 的灵敏性 -clc,clear,close all,format long g; -syms x1 x2 a; -X1=4735,X2=7043,AA=0.01,FF=553641; -f=(339-a*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); -f1=diff(f,x1),f2=diff(f,x2); -[x10,x20]=solve(f1,f2); - -subplot(121); -fplot(x10,[0.002,0.02]); -xlabel('a'); -ylabel('x1'); - -subplot(122); -fplot(x20,[0.002,0.02]); -xlabel('a'); -ylabel('x2'); - -dx1=diff(x10,a); -dx10=subs(dx1,a,0.01),dx10=double(dx10); -sx1a=dx10*AA/X1; - -dx2=diff(x20,a); -dx20=subs(dx2,a,0.01),dx20=double(dx20); -sx2a=dx20*AA/X2; - -F=subs(f,[x1,x2],[x10,x20]); -F=simplify(F); -figure,fplot(F,[0.002,0.02]); -xlabel('a'); -ylabel('profit'); -dpro=diff(F,a); -dpro0=subs(F,a,0.01); -sya=dpro0*AA/FF; - -%当a提高10% -f3=subs(f,[x1,x2,a],[X1,X2,0.011]),f3=double(f3); -f4=subs(F,[a],0.011); -%相对误差 -delta=(f4-f3)/f4; -delta=double(delta); -%相对误差很小,说明在19寸的价格下降幅度在一定范围内发生变化时,仍然按照不变时的最优解来确定生产方案,仍然可以获得几乎最优的利润。 - - - - - -%使用fmincon的简单例子 - -%蒙特卡罗确定初始值 -clc,clear,close all; -n=10^7; -x1=unifrnd(0,12,[1,n]); -x2=unifrnd(0,12,[1,n]); -fmin=+inf; -for i=1:n - x=[x1(i),x2(i)]; - if ((x1(i)-1)^2-x2(i)-6<=0) & (-2*x1(i)+3*x2(i)-6<=0) - temp=x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2); - if temp=35; -for i=1:5 - con(i+1)=x(i)+x(i+1)>=cnt(i+1); -end -prob.Constraints.con=con; -[sol,fval,flag,out]=solve(prob); -X=sol.x; - - -%linprog解法 -clc; clear; close all; format long g; -f=[1,1,1,1,1,1]; -intcon=[1:6]; -A=zeros(6,6); -A(1,1)=-1; -A(1,6)=-1; -for i=1:5 - A(i+1,i)=-1; - A(i+1,i+1)=-1; -end -lb=zeros(6,1);%注意不是lb=0 -b=[-35;-40;-50;-45;-55;-30]; -[x,fval]=intlinprog(f,intcon,A,b,[],[],lb); - - - -%01规划 -%背包问题 - -f=-[540,200,180,350,60,150,280,450,320,120]; -intcon=1:10; -lb=zeros(10); -ub=ones(10); -A=[6,3,4,5,1,2,3,5,4,2]; -b=30; -[x,fval]=intlinprog(f,intcon,A,b,[],[],lb,ub); - - - - diff --git a/mm1.m b/mm1.m deleted file mode 100644 index fafc5c7..0000000 --- a/mm1.m +++ /dev/null @@ -1,140 +0,0 @@ -%投资利益与风险1998A题 - - -%模型一 给定风险承受程度,求最大利益 -f=[-0.05,-0.27,-0.19,-0.185,-0.185]; - -%A矩阵 -%A=[0,0.025,0.015,0.055,0.026]; %错误 -%b=[1,1,1,1,1]; -A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];%不等式约束条件矩阵 - -%Aeq、beq -Aeq=[1,1.01,1.02,1.045,1.065]; -beq=1; - -%lb -%lb=0; %错误 -lb=zeros(5,1); - - -%可承担风险率a -a=(0:0.001:0.05); - -%保存最优解 -Q=zeros(1,length(a)); -xx=[];%空矩阵存放最优解对应x的值 -for i=1:length(a) - b=a(i)*ones(4,1); - [x,y]=linprog(f,A,b,Aeq,beq,lb); - Q(i)=-y;%注意取负!!! - xx=[xx;x']; -end -plot(a,Q,'*r'); -xlabel("风险率"); -ylabel("最大收益"); - - -%模型二 收益、风险按权重组合 -% f0=[-0.05,-0.27,-0.19,-0.185,-0.185]; -% w=(0:0.1:1); -% Aeq=[1,1.01,1.02,1.045,1.065,0]; -% beq=1; -% lb=0; -% xx=[]; -% Q=zeros(1,length(w)); -% A=[zeros(5,1),diag([0.025,0.025,0.055,0.065,0])]; -% b=ones(5,1); -% for i=1:length(w) -% f=[-w(i)*f0,1-w(i)]; -% b=x(end)*b; -% [x,y]=linprog(f,A,b,Aeq,beq,lb); -% Q(i)=-y; -% xx=[xx,x']; -% end -% plot(w,Q,'*r'); - -%模型二 收益、风险按权重组合 -clc; clear; close all; format long g; - -M = 10000; -prob = optimproblem; -x = optimvar('x', 6, 1, 'LowerBound', 0); -r = [0.05, 0.28, 0.21, 0.23, 0.25]; -p = [0, 0.01, 0.02, 0.045, 0.065]; -q = [0, 0.025, 0.015, 0.055, 0.026]'; -%w = 0:0.1:1; -w = 0.7:0.03:1; -V = []; -Q = []; -X = []; - -prob.Constraints.con1 = (1 + p) * x(1:end-1) == M; -prob.Constraints.con2 = (q(2:end).* x(2:end-1))<= x(end); %下标从1开始 - -for i = 1:length(w) - prob.Objective = w(i) * x(end) - (1 - w(i)) * (r - p) * x(1:end-1); %注意大小写 - [sol, fval, flag, out] = solve(prob); - xx = sol.x; - V = [V, max(q.* xx(1:end-1))]; - Q = [Q, (r - p) * xx(1:end-1)]; - X = [X, xx]; - - plot(V, Q, '*-'); - grid on; - xlabel('风险'); - ylabel('收益'); -end - - - -%模型三:达到一定盈利水平,极小化风险 - -clc; clear; close all; format long g; -M=10000; -k=1500:100:3000; -prob = optimproblem; -x = optimvar('x', 5, 1, 'LowerBound', 0);%下界为0 -r = [0.05, 0.28, 0.21, 0.23, 0.25]; -p = [0, 0.01, 0.02, 0.045, 0.065]; -q = [0, 0.025, 0.015, 0.055, 0.026]'; - -V = []; -Q = []; -X = []; -t = optimvar('t', 'LowerBound', 0); - -%prob.Objective=max(q.*x);%极小化风险 -for i=1:length(k) - prob.Objective = t; % 极小化风险 - prob.Constraints.con1 = (1 + p) * x == M; - prob.Constraints.con2=((r-p)*x>=k(i));%达到一定盈利水平 - prob.Constraints.con3=(q.*x<=t); - [sol,fval,flag,out]=solve(prob); - if flag==1 - xx=sol.x; - X=[X,xx]; - Q=[Q,(r-p)*xx]; - V=[V,fval]; - else - xx=-1*ones(5,1); - X=[X,xx]; - Q=[Q,-1]; - V=[V,-1]; - end - - -end -plot(k,V,'*-'); - - - - - - - - - - - - diff --git a/mm2_graph.m b/mm2_graph.m deleted file mode 100644 index 4a0e1a8..0000000 --- a/mm2_graph.m +++ /dev/null @@ -1,94 +0,0 @@ -%ej.4.10仓库选址 -clc; clear; close all; format long g; -a=zeros(6); -a(1,[2,5])=[20,15]; -a(2,[1,3,4,5])=[20,20,60,25]; -a(3,[2,4,5])=[20,30,18]; -a(4,[2,3])=[60,30]; -a(5,[1,2,3,6])=[15,25,18,15]; -a(6,5)=15; -s = cellstr(strcat('销售点',int2str([1:6]'))); -G=graph(a,s); -P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); -D=[]; -for i=1:6 - temp=0; - for j=1:6 - [path,d]=shortestpath(G,i,j); - if d>temp; - temp=d; - end - end - D=[D,temp]; -end -[minVal,minInd]=min(D); -disp('仓库应建在销售点'); -disp(minInd); - - -%答案版 -clc; clear; close all; - -% 初始化邻接矩阵 -a = zeros(6); -a(1, [2, 5]) = [20, 15]; -a(2, 3:5) = [20, 60, 25]; -a(3, [4, 5]) = [30, 18]; -a(5, 6) = 15; - -% 创建节点标签 -s = cellstr(strcat('V', int2str([1:6]'))); - -% 创建图 -G = graph(a, s, 'upper'); - -% 计算所有节点之间的最短路径距离矩阵 -d = distances(G); - -% 计算从每个节点到其他节点的最大最短路径距离 -D = max(d, [], 2)'; %第三个参数 2 指定沿着矩阵的第二个维度(即列)进行操作。 - -% 找到最大最短路径距离中的最小值及其下标 -[minD, minIndex] = min(D); - -% 绘制图 -plot(G, 'EdgeLabel', G.Edges.Weight, 'Layout', 'force');%设置边的标签 - -% 显示结果 -fprintf('从每个节点到任意其他节点的最大最短路径距离: \n'); -disp(D); -fprintf('最大最短路径距离中的最小值为: %f\n', minD); -fprintf('对应的节点为: V%d\n', minIndex); - -%设备更新问题; -clc;clear;close all; -a=zeros(6); -a(1,[2:6])=[15,20,27,37,54]; -a(2,[3:6])=[15,20,27,37]; -a(3,[4:6])=[16,21,28]; -a(4,[5:6])=[16,21]; -a(5,6)=17; -s=cellstr(strcat(int2str((1:6)'),'年初')); -G=digraph(a,s); -P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); -[path,d]=shortestpath(G,1,6);%注意参数个数 -highlight(P,path,"EdgeColor","red",'LineWidth',3.5); - - -%最小生成树 -clc;clear; -a=zeros(9); -a(1,[2:9])=[2 1 3 4 4 2 5 4]; % 顶点1到其他顶点的边的权重 -a(2,[3 9])=[4 1]; % 顶点2到顶点3、顶点9的边的权重 -a(3,4)=1; % 同上。因为写过1到3,和2到3的边的权重,无需重复设 -a(4,5)=1; -a(5,6)=5; -a(6,7)=2; -a(7,8)=3; -a(8,9)=5; -s=cellstr(strcat('节点',int2str([1:9]'))); -G=graph(a,s,'upper'); -P=plot(G,'layout','force'); -T=minspantree(G,'Method','sparse'); -L=sum(T.Edges.Weight); -highlight(P,T,"EdgeColor","red",'LineWidth',2.5); diff --git a/LPej1_3.m b/姚安欣/LPej1_3.m similarity index 97% rename from LPej1_3.m rename to 姚安欣/LPej1_3.m index 2804b6a..5b0c097 100644 --- a/LPej1_3.m +++ b/姚安欣/LPej1_3.m @@ -1,40 +1,40 @@ -clc; clear; close all; format long g; -prob=optimproblem; -x=optimvar('x',9,1,'LowerBound',0,'Type','integer'); -p=[0.25,0.35,0.50]; -r=[1.25,2.00,2.80]; -ot=[5,10,0;7,9,12;6,8,0;4,0,11;7,0,0]; -total=1000:200:3000; -odp=[300/6000,321/10000,250/4000,783/7000,200/4000]; - -X=[]; -Q=[]; - -for i=1:length(total) - % prob.Objective=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1)+(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2)+(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3)+(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4)+(ot(5,1)*(x(3)+x(6)))*odp(5)-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); - dp1=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1); - dp2=(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2); - dp3=(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3); - dp4=(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4); - dp5=(ot(5,1)*(x(3)+x(6)))*odp(5); - dp=dp1+dp2+dp3+dp4+dp5; - prob.Objective=dp-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); - prob.Constraints.con1=p(1)*ones(1,6)*x(1:6)+p(2)*ones(1,2)*x(7:8)+p(3)*x(9)+dp<=total(i);%总费用 - prob.Constraints.con2=ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7)<=6000;%A1 - prob.Constraints.con3=ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9)<=10000; - prob.Constraints.con4=ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8))<=4000; - prob.Constraints.con5=ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9)<=7000; - prob.Constraints.con6=ot(5,1)*(x(3)+x(6))<=4000; - [sol,fval,flag,out]=solve(prob); - xx=sol.x; - - X=[X,xx]; - Q=[Q,-fval]; - -end -plot(total,Q,'*-'); - - - - - +clc; clear; close all; format long g; +prob=optimproblem; +x=optimvar('x',9,1,'LowerBound',0,'Type','integer'); +p=[0.25,0.35,0.50]; +r=[1.25,2.00,2.80]; +ot=[5,10,0;7,9,12;6,8,0;4,0,11;7,0,0]; +total=1000:200:3000; +odp=[300/6000,321/10000,250/4000,783/7000,200/4000]; + +X=[]; +Q=[]; + +for i=1:length(total) + % prob.Objective=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1)+(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2)+(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3)+(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4)+(ot(5,1)*(x(3)+x(6)))*odp(5)-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); + dp1=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1); + dp2=(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2); + dp3=(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3); + dp4=(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4); + dp5=(ot(5,1)*(x(3)+x(6)))*odp(5); + dp=dp1+dp2+dp3+dp4+dp5; + prob.Objective=dp-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); + prob.Constraints.con1=p(1)*ones(1,6)*x(1:6)+p(2)*ones(1,2)*x(7:8)+p(3)*x(9)+dp<=total(i);%总费用 + prob.Constraints.con2=ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7)<=6000;%A1 + prob.Constraints.con3=ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9)<=10000; + prob.Constraints.con4=ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8))<=4000; + prob.Constraints.con5=ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9)<=7000; + prob.Constraints.con6=ot(5,1)*(x(3)+x(6))<=4000; + [sol,fval,flag,out]=solve(prob); + xx=sol.x; + + X=[X,xx]; + Q=[Q,-fval]; + +end +plot(total,Q,'*-'); + + + + + -- 2.34.1 From 2a3a14b6d98296e72319febbe73d14f19e07152a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:53:41 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E8=92=99=E7=89=B9=E5=8D=A1=E6=B4=9B?= =?UTF-8?q?=EF=BC=88=E4=B8=8D=E8=A7=84=E5=88=99=E9=9D=A2=E7=A7=AF=E5=92=8C?= =?UTF-8?q?=E5=9C=86=E5=91=A8=E7=8E=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/Mengtkl.m | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 姚安欣/Mengtkl.m diff --git a/姚安欣/Mengtkl.m b/姚安欣/Mengtkl.m new file mode 100644 index 0000000..6ad088b --- /dev/null +++ b/姚安欣/Mengtkl.m @@ -0,0 +1,61 @@ + +%27页例题 +clc; clear; close all; +n = 10000; % 使用较小的 n 值以便更容易可视化 +x = unifrnd(0, 12, [1, n]); +y = unifrnd(0, 9, [1, n]); +ans=sum(y < x.^2 & x <= 3)+sum(y < 12 - x & x >= 3); +ans=ans/n; +% 找出满足条件的点 +condition1 = y < x.^2 & x <= 3; +condition2 = y < 12 - x & x >= 3; +condition_met = condition1 | condition2; % 满足任一条件的点 +condition_not_met = ~condition_met; % 不满足任何条件的点 + +% 创建图形窗口 +figure; +hold on;%在同一张图上绘图 + +% 绘制不满足任何条件的点 +scatter(x(condition_not_met), y(condition_not_met), 'k.'); % k----黑色 .----绘制样式 +%scatter绘制散点图 +%x(condition_not_met) 会返回一个新的向量,其中只包含 x 中对应 condition_not_met 为 true 的元素。 + +% 绘制满足第一个条件的点 +scatter(x(condition1), y(condition1), 'r.'); % 红色 + +% 绘制满足第二个条件的点 +scatter(x(condition2), y(condition2), 'b.'); % 蓝色 + +% 添加图例和标签 +legend('不满足任何条件的点', '满足 y < x^2 且 x <= 3 的点', '满足 y < 12 - x 且 x >= 3 的点'); +xlabel('x'); +ylabel('y'); +title('随机生成的点和满足条件的点'); +hold off; + + +%蒙特卡洛法求圆周率qw +clc;clear;close all; + +n=10^5; +x=unifrnd(-1,1,[1,n]); +y=unifrnd(-1,1,[1,n]); +con1=x.^2+y.^2<=1; +con2=~con1; +ans=sum(x.^2+y.^2<=1); +ans=ans/n*4; + +figure ; +hold on; + +scatter(x(con1),y(con1),'r.'); +scatter(x(con2),y(con2),'k.'); + +hold off; + + + + + + -- 2.34.1 From 223732603380c142d66e3dd08dd906932e16a3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:55:42 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E9=9D=9E=E7=BA=BF=E6=80=A7=E8=A7=84?= =?UTF-8?q?=E5=88=92=EF=BC=88P42=E5=BD=A9=E7=94=B5=EF=BC=8C=E6=B1=82?= =?UTF-8?q?=E8=A7=A3=E5=92=8C=E7=81=B5=E6=95=8F=E6=80=A7=E5=88=86=E6=9E=90?= =?UTF-8?q?=EF=BC=89=EF=BC=88=E7=AE=80=E5=8D=95=E7=A4=BA=E4=BE=8B=EF=BC=89?= =?UTF-8?q?=EF=BC=88=E9=80=89=E5=9D=80=E9=97=AE=E9=A2=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/NLP.m | 135 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 姚安欣/NLP.m diff --git a/姚安欣/NLP.m b/姚安欣/NLP.m new file mode 100644 index 0000000..187a7b8 --- /dev/null +++ b/姚安欣/NLP.m @@ -0,0 +1,135 @@ + +%非线性规划 + +%P42例题 + +%求解 +clc,clear,format long g,close all; +syms x1 x2;%符号变量(用于定义函数、求解方程、计算导数和积分) +f=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); +f=simplify(f); +f1=diff(f,x1),f2=diff(f,x2); +[x10,x20]=solve(f1,f2);%求驻点即使f1,f2为0的点 +x10=round(double(x10));%四舍五入 +x20=round(double(x20)); +f0=subs(f,{x1,x2},{x10,x20}); +f0=double(f0); +subplot(121); +fmesh(f,[0,10000,0,10000]);%3维 +%xlabel('x1','Interpreter','latex'); +%ylabel('y1','Interpreter','latex'); +xlabel('x1'); +ylabel('y1'); +subplot(122); +L=fcontour(f,[0,10000,0,10000]); +contour(L.XData,L.YData,L.ZData,'ShowText','on'); +xlabel('x1'); +ylabel('y1'); +p1=339-0.01*x10-0.003*x20; +p2=399-0.004*x10-0.01*x20; +c=195*x10+225*x20+400000; +rate=f0/c; + +%灵敏性检验 分析 最优解 对 19村彩电价格下降幅度 的灵敏性 +clc,clear,close all,format long g; +syms x1 x2 a; +X1=4735,X2=7043,AA=0.01,FF=553641; +f=(339-a*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); +f1=diff(f,x1),f2=diff(f,x2); +[x10,x20]=solve(f1,f2); + +subplot(121); +fplot(x10,[0.002,0.02]); +xlabel('a'); +ylabel('x1'); + +subplot(122); +fplot(x20,[0.002,0.02]); +xlabel('a'); +ylabel('x2'); + +dx1=diff(x10,a); +dx10=subs(dx1,a,0.01),dx10=double(dx10); +sx1a=dx10*AA/X1; + +dx2=diff(x20,a); +dx20=subs(dx2,a,0.01),dx20=double(dx20); +sx2a=dx20*AA/X2; + +F=subs(f,[x1,x2],[x10,x20]); +F=simplify(F); +figure,fplot(F,[0.002,0.02]); +xlabel('a'); +ylabel('profit'); +dpro=diff(F,a); +dpro0=subs(F,a,0.01); +sya=dpro0*AA/FF; + +%当a提高10% +f3=subs(f,[x1,x2,a],[X1,X2,0.011]),f3=double(f3); +f4=subs(F,[a],0.011); +%相对误差 +delta=(f4-f3)/f4; +delta=double(delta); +%相对误差很小,说明在19寸的价格下降幅度在一定范围内发生变化时,仍然按照不变时的最优解来确定生产方案,仍然可以获得几乎最优的利润。 + + + + + +%使用fmincon的简单例子 + +%蒙特卡罗确定初始值 +clc,clear,close all; +n=10^7; +x1=unifrnd(0,12,[1,n]); +x2=unifrnd(0,12,[1,n]); +fmin=+inf; +for i=1:n + x=[x1(i),x2(i)]; + if ((x1(i)-1)^2-x2(i)-6<=0) & (-2*x1(i)+3*x2(i)-6<=0) + temp=x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2); + if temp Date: Sun, 14 Jul 2024 14:57:52 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E9=9D=9E=E7=BA=BF=E6=80=A7=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E7=A4=BA=E4=BE=8B=E7=9B=AE=E6=A0=87=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/fun1.m | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 姚安欣/fun1.m diff --git a/姚安欣/fun1.m b/姚安欣/fun1.m new file mode 100644 index 0000000..459556a --- /dev/null +++ b/姚安欣/fun1.m @@ -0,0 +1,3 @@ +function f=fun1(x) + f=x(1)*x(1)+x(2)*x(2)-x(1)*x(2)-2*x(1)-5*x(2); +end -- 2.34.1 From d032cbab4335bdd0169da4e1e8f2956347f2e9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:58:13 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E9=9D=9E=E7=BA=BF=E6=80=A7=E8=A7=84?= =?UTF-8?q?=E5=88=92=E6=96=99=E5=9C=BA=E9=80=89=E5=9D=80=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/fun2.m | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 姚安欣/fun2.m diff --git a/姚安欣/fun2.m b/姚安欣/fun2.m new file mode 100644 index 0000000..7c77430 --- /dev/null +++ b/姚安欣/fun2.m @@ -0,0 +1,15 @@ +function f=fun2(x) +a=[1.25,8.75,0.5,5.75,3,7.25]; +b=[1.25,0.75,4.75,5,6.5,7.25]; + f1 = 0; % 初始化f1 + f2 = 0; % 初始化f2 +for i=1:6 + s=sqrt((a(i)-x(13))^2+(b(i)-x(14))^2); + f1=x(i)*s+f1; +end +for i=7:12 + s=sqrt((a(i-6)-x(15))^2+(b(i-6)-x(16))^2); + f2=s*x(i)+f2; +end +f=f1+f2; +end \ No newline at end of file -- 2.34.1 From 811bec3b62f217b9858eeed6ad3daac1f6e770b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:58:42 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E6=95=B4=E6=95=B0=E8=A7=84=E5=88=92?= =?UTF-8?q?=EF=BC=88linprog\optimproblem=E8=A7=A3=E6=B3=95=EF=BC=89?= =?UTF-8?q?=EF=BC=8C01=E8=A7=84=E5=88=92=EF=BC=88=E8=83=8C=E5=8C=85?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/intLP.m | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 姚安欣/intLP.m diff --git a/姚安欣/intLP.m b/姚安欣/intLP.m new file mode 100644 index 0000000..2de2640 --- /dev/null +++ b/姚安欣/intLP.m @@ -0,0 +1,49 @@ +%整数规划 +%P23 ej2.5 +%optimproblem解法 +clc; clear; close all; format long g; +prob=optimproblem; +x=optimvar('x',6,'LowerBound',0,'Type','integer'); +prob.Objective=sum(x); +cnt=[35,40,50,45,55,30]; +con=optimconstr(6); +con(1)=x(1)+x(6)>=35; +for i=1:5 + con(i+1)=x(i)+x(i+1)>=cnt(i+1); +end +prob.Constraints.con=con; +[sol,fval,flag,out]=solve(prob); +X=sol.x; + + +%linprog解法 +clc; clear; close all; format long g; +f=[1,1,1,1,1,1]; +intcon=[1:6]; +A=zeros(6,6); +A(1,1)=-1; +A(1,6)=-1; +for i=1:5 + A(i+1,i)=-1; + A(i+1,i+1)=-1; +end +lb=zeros(6,1);%注意不是lb=0 +b=[-35;-40;-50;-45;-55;-30]; +[x,fval]=intlinprog(f,intcon,A,b,[],[],lb); + + + +%01规划 +%背包问题 + +f=-[540,200,180,350,60,150,280,450,320,120]; +intcon=1:10; +lb=zeros(10); +ub=ones(10); +A=[6,3,4,5,1,2,3,5,4,2]; +b=30; +[x,fval]=intlinprog(f,intcon,A,b,[],[],lb,ub); + + + + -- 2.34.1 From f5a4c8b16b7cbca54b3f4e552fb78adc79e81c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:59:07 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=8A=95=E8=B5=84=E9=A3=8E=E9=99=A9?= =?UTF-8?q?=E6=94=B6=E7=9B=8A=E3=80=81=E5=A4=9A=E7=9B=AE=E6=A0=87=E8=A7=84?= =?UTF-8?q?=E5=88=92=EF=BC=88=E7=BA=A6=E6=9D=9F=E6=B3=95=E3=80=81=E7=BA=BF?= =?UTF-8?q?=E6=80=A7=E5=8A=A0=E6=9D=83=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/mm1.m | 140 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 姚安欣/mm1.m diff --git a/姚安欣/mm1.m b/姚安欣/mm1.m new file mode 100644 index 0000000..745496b --- /dev/null +++ b/姚安欣/mm1.m @@ -0,0 +1,140 @@ +%投资利益与风险1998A题 + + +%模型一 给定风险承受程度,求最大利益 +f=[-0.05,-0.27,-0.19,-0.185,-0.185]; + +%A矩阵 +%A=[0,0.025,0.015,0.055,0.026]; %错误 +%b=[1,1,1,1,1]; +A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];%不等式约束条件矩阵 + +%Aeq、beq +Aeq=[1,1.01,1.02,1.045,1.065]; +beq=1; + +%lb +%lb=0; %错误 +lb=zeros(5,1); + + +%可承担风险率a +a=(0:0.001:0.05); + +%保存最优解 +Q=zeros(1,length(a)); +xx=[];%空矩阵存放最优解对应x的值 +for i=1:length(a) + b=a(i)*ones(4,1); + [x,y]=linprog(f,A,b,Aeq,beq,lb); + Q(i)=-y;%注意取负!!! + xx=[xx;x']; +end +plot(a,Q,'*r'); +xlabel("风险率"); +ylabel("最大收益"); + + +%模型二 收益、风险按权重组合 +% f0=[-0.05,-0.27,-0.19,-0.185,-0.185]; +% w=(0:0.1:1); +% Aeq=[1,1.01,1.02,1.045,1.065,0]; +% beq=1; +% lb=0; +% xx=[]; +% Q=zeros(1,length(w)); +% A=[zeros(5,1),diag([0.025,0.025,0.055,0.065,0])]; +% b=ones(5,1); +% for i=1:length(w) +% f=[-w(i)*f0,1-w(i)]; +% b=x(end)*b; +% [x,y]=linprog(f,A,b,Aeq,beq,lb); +% Q(i)=-y; +% xx=[xx,x']; +% end +% plot(w,Q,'*r'); + +%模型二 收益、风险按权重组合 +clc; clear; close all; format long g; + +M = 10000; +prob = optimproblem; +x = optimvar('x', 6, 1, 'LowerBound', 0); +r = [0.05, 0.28, 0.21, 0.23, 0.25]; +p = [0, 0.01, 0.02, 0.045, 0.065]; +q = [0, 0.025, 0.015, 0.055, 0.026]'; +%w = 0:0.1:1; +w = 0.7:0.03:1; +V = []; +Q = []; +X = []; + +prob.Constraints.con1 = (1 + p) * x(1:end-1) == M; +prob.Constraints.con2 = (q(2:end).* x(2:end-1))<= x(end); %下标从1开始 + +for i = 1:length(w) + prob.Objective = w(i) * x(end) - (1 - w(i)) * (r - p) * x(1:end-1); %注意大小写 + [sol, fval, flag, out] = solve(prob); + xx = sol.x; + V = [V, max(q.* xx(1:end-1))]; + Q = [Q, (r - p) * xx(1:end-1)]; + X = [X, xx]; + + plot(V, Q, '*-'); + grid on; + xlabel('风险'); + ylabel('收益'); +end + + + +%模型三:达到一定盈利水平,极小化风险 + +clc; clear; close all; format long g; +M=10000; +k=1500:100:3000; +prob = optimproblem; +x = optimvar('x', 5, 1, 'LowerBound', 0);%下界为0 +r = [0.05, 0.28, 0.21, 0.23, 0.25]; +p = [0, 0.01, 0.02, 0.045, 0.065]; +q = [0, 0.025, 0.015, 0.055, 0.026]'; + +V = []; +Q = []; +X = []; +t = optimvar('t', 'LowerBound', 0); + +%prob.Objective=max(q.*x);%极小化风险 +for i=1:length(k) + prob.Objective = t; % 极小化风险 + prob.Constraints.con1 = (1 + p) * x == M; + prob.Constraints.con2=((r-p)*x>=k(i));%达到一定盈利水平 + prob.Constraints.con3=(q.*x<=t); + [sol,fval,flag,out]=solve(prob); + if flag==1 + xx=sol.x; + X=[X,xx]; + Q=[Q,(r-p)*xx]; + V=[V,fval]; + else + xx=-1*ones(5,1); + X=[X,xx]; + Q=[Q,-1]; + V=[V,-1]; + end + + +end +plot(k,V,'*-'); + + + + + + + + + + + + -- 2.34.1 From cb4ffe074cd487744478818681a3bbd07018a7e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:59:27 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E5=9B=BE=EF=BC=88=E6=9C=80=E7=9F=AD?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=EF=BC=89=EF=BC=88=E6=9C=80=E5=B0=8F=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=A0=91=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 姚安欣/mm2_graph.m | 94 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 姚安欣/mm2_graph.m diff --git a/姚安欣/mm2_graph.m b/姚安欣/mm2_graph.m new file mode 100644 index 0000000..fa9c761 --- /dev/null +++ b/姚安欣/mm2_graph.m @@ -0,0 +1,94 @@ +%ej.4.10仓库选址 +clc; clear; close all; format long g; +a=zeros(6); +a(1,[2,5])=[20,15]; +a(2,[1,3,4,5])=[20,20,60,25]; +a(3,[2,4,5])=[20,30,18]; +a(4,[2,3])=[60,30]; +a(5,[1,2,3,6])=[15,25,18,15]; +a(6,5)=15; +s = cellstr(strcat('销售点',int2str([1:6]'))); +G=graph(a,s); +P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); +D=[]; +for i=1:6 + temp=0; + for j=1:6 + [path,d]=shortestpath(G,i,j); + if d>temp; + temp=d; + end + end + D=[D,temp]; +end +[minVal,minInd]=min(D); +disp('仓库应建在销售点'); +disp(minInd); + + +%答案版 +clc; clear; close all; + +% 初始化邻接矩阵 +a = zeros(6); +a(1, [2, 5]) = [20, 15]; +a(2, 3:5) = [20, 60, 25]; +a(3, [4, 5]) = [30, 18]; +a(5, 6) = 15; + +% 创建节点标签 +s = cellstr(strcat('V', int2str([1:6]'))); + +% 创建图 +G = graph(a, s, 'upper'); + +% 计算所有节点之间的最短路径距离矩阵 +d = distances(G); + +% 计算从每个节点到其他节点的最大最短路径距离 +D = max(d, [], 2)'; %第三个参数 2 指定沿着矩阵的第二个维度(即列)进行操作。 + +% 找到最大最短路径距离中的最小值及其下标 +[minD, minIndex] = min(D); + +% 绘制图 +plot(G, 'EdgeLabel', G.Edges.Weight, 'Layout', 'force');%设置边的标签 + +% 显示结果 +fprintf('从每个节点到任意其他节点的最大最短路径距离: \n'); +disp(D); +fprintf('最大最短路径距离中的最小值为: %f\n', minD); +fprintf('对应的节点为: V%d\n', minIndex); + +%设备更新问题; +clc;clear;close all; +a=zeros(6); +a(1,[2:6])=[15,20,27,37,54]; +a(2,[3:6])=[15,20,27,37]; +a(3,[4:6])=[16,21,28]; +a(4,[5:6])=[16,21]; +a(5,6)=17; +s=cellstr(strcat(int2str((1:6)'),'年初')); +G=digraph(a,s); +P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); +[path,d]=shortestpath(G,1,6);%注意参数个数 +highlight(P,path,"EdgeColor","red",'LineWidth',3.5); + + +%最小生成树 +clc;clear; +a=zeros(9); +a(1,[2:9])=[2 1 3 4 4 2 5 4]; % 顶点1到其他顶点的边的权重 +a(2,[3 9])=[4 1]; % 顶点2到顶点3、顶点9的边的权重 +a(3,4)=1; % 同上。因为写过1到3,和2到3的边的权重,无需重复设 +a(4,5)=1; +a(5,6)=5; +a(6,7)=2; +a(7,8)=3; +a(8,9)=5; +s=cellstr(strcat('节点',int2str([1:9]'))); +G=graph(a,s,'upper'); +P=plot(G,'layout','force'); +T=minspantree(G,'Method','sparse'); +L=sum(T.Edges.Weight); +highlight(P,T,"EdgeColor","red",'LineWidth',2.5); -- 2.34.1 From 7d1020b93a89a7a2a285b392915f310652ce54a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 15:02:42 +0800 Subject: [PATCH 09/10] Initial commit --- 姚安欣/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 姚安欣/README.md diff --git a/姚安欣/README.md b/姚安欣/README.md new file mode 100644 index 0000000..180bab3 --- /dev/null +++ b/姚安欣/README.md @@ -0,0 +1,2 @@ +# mycode + -- 2.34.1 From 19262e6ef260da43a4748c52abe02e7dcf95ba96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 15:03:31 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E6=9C=80=E5=B0=8F=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=A0=91=E5=92=8C=E6=9C=80=E7=9F=AD=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 盘荣博/图/figure10_9.png | Bin 0 -> 48412 bytes 盘荣博/图/例10.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 盘荣博/图/figure10_9.png create mode 100644 盘荣博/图/例10.py diff --git a/盘荣博/图/figure10_9.png b/盘荣博/图/figure10_9.png new file mode 100644 index 0000000000000000000000000000000000000000..b184056b56832f07c8fb3a1b96b012ad365f805e GIT binary patch literal 48412 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 BH~Iho literal 0 HcmV?d00001 diff --git a/盘荣博/图/例10.py b/盘荣博/图/例10.py new file mode 100644 index 0000000..c97f2a0 --- /dev/null +++ b/盘荣博/图/例10.py @@ -0,0 +1,28 @@ +import networkx as nx +import pylab as plt +import numpy as np +p=[25,26,28,31] ;a=[10,14,18,26] ; r=[20,16,13,11] +b= np.zeros((5,5)) + +for i in range(5): + for j in range(i+1,5): + b[i,j]=p[i]+np.sum(a[0:j-i])-r[j-i-1] +G=nx.DiGraph(b) +print(G) +p=nx.dijkstra_path(G,source=0,target=4,weight='weight') +print("最短路径为:",np.array(p)+1)#下标从零开始 +d=nx.dijkstra_path_length(G,source=0,target=4,weight="weight") +print("所求的费用最小值为:",d) +s=dict(zip(range(5),range(1,6))) +plt.rc("font",size=16) +pos=nx.shell_layout((G))#设置布局 +print(type(pos),'\npos=',pos) +w=nx.get_edge_attributes(G,"weight") +print(type(w),'\nw=',w) +nx.draw(G,pos,font_weight='bold',labels=s,node_color='r')#绘制点和边 +nx.draw_networkx_edge_labels(G,pos,edge_labels=w)#绘制标签 +#绘制最短路径 +path_edges=list(zip(p,p[1:])) +print(type(path_edges),"\npath_edges=",path_edges) +nx.draw_networkx_edges(G,pos,edgelist=path_edges,edge_color="r",width=1) +plt.savefig("figure10_9.png");plt.show() \ No newline at end of file -- 2.34.1