ex3_3 Equality constrains and unrestricted variables

本文详细介绍了使用MATLAB中的drawLine函数绘制线性规划约束条件的方法。通过具体实例,展示了如何设置不同类型的线(如不等式、等式及无约束),并利用颜色和样式区分各种线型,帮助读者理解线性规划问题的几何意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matlab source code:

% Ex3_3.m
% Example 3.3
%  Optimization Using MATLAB by P.Venkataraman
%
%	Using drawLine.m 
%
drawLine(0,6,1,1,5,'l');
drawLine(0,6,2,1,4,'e');
drawLine(0,6,1,1,1,'g');
drawLine(0,6,2,-1,8,'n');
xlabel('Hours spent studying');
ylabel('Hours of pin ball');
title('Example 3.3 -Equality Constraint and Negative Design Variables')
grid


% drawLine.m
% Drawing linear constraints for LP programming problems
% Dr. P.Venkataraman
% Optimization Using Matlab
% Chapter 3 - linear Programming
%
% Lines are represented as: ax + by = c ( c >= 0)
% x1, x2 indicate the range of x for the line
% typ indicates type of line being drawn l (<=)
%                                        g, (>=)
%                                        n  (none)
%
% The function will draw line(s) in the figure window
% the green line represents the actual value 
% of the constraint
% the red dashed line is 10 % larger or smaller
% (in lieu of hash marks)
% the limit constraints are identifies in magenta color
% the objective function is in blue dashed lines
%
function ret = drawLine(x1,x2,a,b,c,typ)

% recognize the types and set color
if (typ == 'n') 
   str1 = 'b';
   str2 = 'b';
   cmult = 1;
elseif (typ == 'e')
      str1 ='m';
      str2 ='m';
 else
   str1 = 'g';
   str2 = 'r';
end

% values for drawing hash marks
% depending on the direction of inequality
if (typ ~= 'n' | 'e') 
   if (typ == 'l')
      cmult = +1;
   else cmult = -1;
   end
end

% set up a factor for drawing the hash constraint
if (abs(c) >= 10)
   cfac = 0.025;
elseif (abs(c)> 5) & (abs(c) <  10)
   cfac = 0.05;
else
   cfac = 0.1;
end

if (c == 0 ) 
   cdum = cmult*0.1; 
else
   cdum = (1 + cmult* cfac)*c;
end

% if b = 0 then determine end points of line x line
if ( b ~= 0)
   y1 = (c - a*x1)/b;
   y1n = (cdum - a* x1)/b;
   y2 = (c - a* x2)/b;
   y2n = (cdum - a*x2)/b;
else
   % identfy limit constraints by magenta color
   str1 = 'm';
   str2 = 'm';
   y1 = x1; % set  y1 same length as input x1
   y2 = x2;  % set y2 same length as input x2
   x1 = c/a;  % adjust x1 to actual value
   x2 = c/a;  % adjust x2 to actual value
   y1n = 0;  % set y = 0;
   y2n = 0;  % set  y = 0
end

if (a == 0) 
   str1 = 'm'; % set color for limit line
   str2 = 'm'; % set color for limit line
end;
% draw axis with solid black color

hh = line([x1,x2],[0,0]);
set(hh,'LineWidth',1,'Color','k');

hv = line([0,0],[x1,x2]);
set(hv,'LineWidth',1,'Color','k');

% start drawing the lines

h1 = line([x1 x2], [y1,y2]);

if (typ == 'n') 
   set(h1,'LineWidth',2,'LineStyle','--','Color',str1);
else
   set(h1,'LineWidth',1,'LineStyle','-','Color',str1);
end

if (b ~= 0)&(a ~= 0)
   text(x1,y1,num2str(c));
end
if( b == 0)|(a == 0)| (typ == 'n') | (typ == 'e')
   grid
   ret = [h1];
   return, end 
grid;
h2 = line([x1 x2], [y1n,y2n]);
set(h2,'LineWidth',0.5,'LineStyle',':','Color',str2);
grid
hold on
ret = [h1 h2];

here, I would like to analysis drawLine.m

% drawLine.m
% Drawing linear constraints for LP programming problems
% Dr. P.Venkataraman
% Optimization Using Matlab
% Chapter 3 - linear Programming
%
% Lines are represented as: ax + by = c ( c >= 0)
% x1, x2 indicate the range of x for the line
% typ indicates type of line being drawn l (<=)
%                                        g, (>=)
%                                        n  (none)
%
% The function will draw line(s) in the figure window
% the green line represents the actual value 
% of the constraint
% the red dashed line is 10 % larger or smaller
% (in lieu of hash marks)
% the limit constraints are identifies in magenta color
% the objective function is in blue dashed lines
%
function ret = drawLine(x1,x2,a,b,c,typ)


% recognize the types and set color
if (typ == 'n') 
   str1 = 'b';
   str2 = 'b';
   cmult = 1;
elseif (typ == 'e')
      str1 ='m';
      str2 ='m';
 else
   str1 = 'g';
   str2 = 'r';
end

str1是第一根线的颜色,str2是第二根线的颜色



% values for drawing hash marks
% depending on the direction of inequality
if (typ ~= 'n' | 'e') 
   if (typ == 'l')
      cmult = +1;
   else cmult = -1;
   end
end
确定第二根线的挪动方向

% set up a factor for drawing the hash constraint
if (abs(c) >= 10)
   cfac = 0.025;
elseif (abs(c)> 5) & (abs(c) <  10)
   cfac = 0.05;
else
   cfac = 0.1;
end


if (c == 0 ) 
   cdum = cmult*0.1; 
else
   cdum = (1 + cmult* cfac)*c;
end
确定挪动的距离

% if b = 0 then determine end points of line x line
if ( b ~= 0)
   y1 = (c - a*x1)/b;
   y1n = (cdum - a* x1)/b;
   y2 = (c - a* x2)/b;
   y2n = (cdum - a*x2)/b;

确定第一根线和第二根线的方程

h1 = line([x1 x2], [y1,y2]);  [x1 x2]为x的范围, [y1,y2]为y的范围

h2 = line([x1 x2], [y1n,y2n]);
else
   % identfy limit constraints by magenta color
   str1 = 'm';
   str2 = 'm';
   y1 = x1; % set  y1 same length as input x1
   y2 = x2;  % set y2 same length as input x2
   x1 = c/a;  % adjust x1 to actual value
   x2 = c/a;  % adjust x2 to actual value
   y1n = 0;  % set y = 0;
   y2n = 0;  % set  y = 0

当线垂直的情况
end


if (a == 0) 
   str1 = 'm'; % set color for limit line
   str2 = 'm'; % set color for limit line
end;
% draw axis with solid black color


hh = line([x1,x2],[0,0]);
set(hh,'LineWidth',1,'Color','k');


hv = line([0,0],[x1,x2]);
set(hv,'LineWidth',1,'Color','k');


% start drawing the lines


h1 = line([x1 x2], [y1,y2]);


if (typ == 'n') 
   set(h1,'LineWidth',2,'LineStyle','--','Color',str1);
else
   set(h1,'LineWidth',1,'LineStyle','-','Color',str1);
end


if (b ~= 0)&(a ~= 0)
   text(x1,y1,num2str(c));
end
if( b == 0)|(a == 0)| (typ == 'n') | (typ == 'e')
   grid
   ret = [h1];
   return, end 
grid;
h2 = line([x1 x2], [y1n,y2n]);
set(h2,'LineWidth',0.5,'LineStyle',':','Color',str2);
grid
hold on
ret = [h1 h2];


% Ex3_3.m
% Example 3.3
%  Optimization Using MATLAB by P.Venkataraman
%
% Using drawLine.m 
%
drawLine(0,6,1,1,5,'l');

第一条线


画了过后


第一根线是绿线, 第二根线是红线, 表示绿线的左下部分是可行区域


drawLine(0,6,2,1,4,'e');

第二条线

画了过后, 这里用紫线表示



drawLine(0,6,1,1,1,'g');

第三条线


画了过后

红线在此绿线的左下角,则说明可行区域在绿线的右上角部分


drawLine(0,6,2,-1,8,'n');

目标函数


画完过后,这里用蓝虚线表示,这里目标函数的意义为与Y轴截距的负值


xlabel('Hours spent studying');
ylabel('Hours of pin ball');
title('Example 3.3 -Equality Constraint and Negative Design Variables')
grid

资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript 来处理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件处理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值