码迷,mamicode.com
首页 > 其他好文 > 详细

[从头学数学] 第182节 不等式

时间:2016-04-17 22:41:04      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了结丹后期的修炼,
这次要修炼的目标是[不等式]。

正剧开始:

星历2016年04月17日 10:30:26, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[不等式]。


技术分享


技术分享

技术分享

技术分享

图中绿色部分取值表示A公司划算,否则就是B公司划算了。


<span style="font-size:18px;">    if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
        config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);          
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 2, spaceY = 2;       
        var xS = -10, xE = 10;      
        var yS = -10, yE = 10;      
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax^2+bx+c 
		var coeffecient = [1, -5, 0];
		var yVal = 0;
		
		for (var x = xS; x <= xE; x+=0.3) {
			yVal = 0;
			
			for (var i = 0; i < coeffecient.length; i++) {
				yVal *= x;
				yVal += coeffecient[i];
			}
			
			if (yVal <= 0) {
				arrayYes.push([x, yVal]);
			}
			else {
				arrayNo.push([x, yVal]);
			}
		}
             
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, 'blue');  
			tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); 
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, 'green');   
			tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   
		}
      
    }
	</span>


技术分享

<span style="font-size:18px;">	if (1) {
		var mathText = new MathText();
		
		var s = [
			'(-b± |Δ^[0.5])/2a',
			'-b/2a',
			'[-[INF], (-b- |Δ^[0.5])/2a), ((-b+ |Δ^[0.5])/2a, [INF]]',
			'R',
			'( (-b- |Δ^[0.5])/2a, (-b+ |Δ^[0.5])/2a )',
			
			
			
			
		];
		
		var x =40, y=40;
		var r1 = 40;
			
		var len = s.length;
		for (var i = 0; i < len; i++) {
		
			if (s[i] == '') {
				if (x < 100) {
					x += 300;
					y-=r1*3;
				}
				else {
					x = 20;
					y += r1;
				}
			}
			else {			
				mathText.printSet(s[i], x, y, 'red');
				y+=r1;
			}
		}		
	
	}</span>


技术分享

技术分享

<span style="font-size:18px;">function Equation() {
	this.quadratic = function(array) {
		//array = [a, b, c]
		//满足ax2 + bx + c = 0 (a!=0)
		var a = array[0], b = array[1], c = array[2];
		
		if (a < 0) {
			a = -a;
			b = -b;
			c = -c;
		}
		
		
		var p = 0, q = 0, delta = 0;
		var x1 = 0, x2 = 0;
		var s = '';
		
		if (a == 0) {
			s = '方程 '+b.toString()+'x + '+c.toString()+' = 0  =>';
			document.write(s+'<br/>');
			x1 = -c / b;
			s = '方程的解为:x =  '+x1.toString()+' ;';
		}
		else {
			s = '方程 '+a.toString()+'x^[2] + '+b.toString()+'x + '+c.toString()+' = 0  =>';
			document.write(s+'<br/>');
			delta = b*b-4*a*c;
			s = 'Δ = b^[2] - 4ac = ' + delta.toString()+' ;';
			document.write(s+'<br/>');
			
			if (delta < 0) {
				s = '没有实数解。';
				document.write(s+'<br/>');
			}
			else {
				if (Math.abs(delta) < 0.000001) {
					x1 = x2 = -b/(2*a);
					s = '方程的解为:x1 = x2 = '+x1.toString()+' ;';
				}
				else if (delta > 0) {
					x1 = (-b-Math.sqrt(delta))/(2*a);
					x2 = (-b+Math.sqrt(delta))/(2*a);
					s = '方程的解为:x1 = '+x1.toString()+', x2 = '+x2.toString()+' ;';
				}
				document.write(s+'<br/>');
				
				p = x1+x2;
				q = x1*x2;
				
				s = '方程根与系数的关系:x1 + x2 = ' + p.toString()+', x1 * x2 = '+q.toString()+' ;';
				document.write(s+'<br/>');
				document.write(''+'<br/>');
			}
		}
		
	}
}

	if (1) {
		var equation = new Equation();
		
		equation.quadratic([4, -4, 1]);
	
	}
	
方程 4x^[2] + -4x + 1 = 0 =>
Δ = b^[2] - 4ac = 0 ;
方程的解为:x1 = x2 = 0.5 ;
方程根与系数的关系:x1 + x2 = 1, x1 * x2 = 0.25 ;

	if (1) {
		var equation = new Equation();
		
		equation.quadratic([-1, 2, -3]);
	
	}
	
方程 1x^[2] + -2x + 3 = 0 =>
Δ = b^[2] - 4ac = -8 ;
没有实数解。
</span>

技术分享

<span style="font-size:18px;">   if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
        config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);          
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 2, spaceY = 2;       
        var xS = -10, xE = 10;      
        var yS = -10, yE = 10;      
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax^2+bx+c 
		var coeffecient = [4, -4, 1];
		var yVal = 0;
		
		for (var x = xS; x <= xE; x+=0.3) {
			yVal = 0;
			
			for (var i = 0; i < coeffecient.length; i++) {
				yVal *= x;
				yVal += coeffecient[i];
			}
			
			if (yVal > 0) {
				arrayYes.push([x, yVal]);
			}
			else {
				arrayNo.push([x, yVal]);
			}
		}
             
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, 'blue');  
			tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); 
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, 'green');   
			tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   
		}
      
    }
	</span>


技术分享

蓝色表示非解集,所以这个无解。

<span style="font-size:18px;">  if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
        config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);          
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 2, spaceY = 2;       
        var xS = -10, xE = 10;      
        var yS = -10, yE = 10;      
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax^2+bx+c 
		var coeffecient = [-1, 2, -3];
		var yVal = 0;
		
		for (var x = xS; x <= xE; x+=0.3) {
			yVal = 0;
			
			for (var i = 0; i < coeffecient.length; i++) {
				yVal *= x;
				yVal += coeffecient[i];
			}
			
			if (yVal > 0) {
				arrayYes.push([x, yVal]);
			}
			else {
				arrayNo.push([x, yVal]);
			}
		}
             
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, 'blue');  
			tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); 
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, 'green');   
			tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   
		}
      
    }</span>



技术分享

技术分享

技术分享


<span style="font-size:18px;">  if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
   
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 2, spaceY = 2;       
        var xS = -10, xE = 10;      
        var yS = -10, yE = 10;      

            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax + by + c
		var coeffecient = [1, 4, -4];
		var yes = 0, no = 0;

		
		for (var x = xS; x <= xE; x+=0.5) {
			for (var y = yS; y <= yE; y+=0.5) {
				//条件
				yes = (coeffecient[0]*x+coeffecient[1]*y+coeffecient[2] < 4);
			
			
				if (yes) {
					arrayYes.push([x, y]);
				}
				else {
					arrayNo.push([x, y]);
				}
			}
		}
             
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, '#CC88FF');  
			/*tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); */
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, '#CCFF88');   
			/*tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   */
		}
		
		config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);       
		config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
      
    }
	</span>

技术分享

技术分享

<span style="font-size:18px;">    if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
   
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 3, spaceY = 5;       
        var xS = -10, xE = 20;      
        var yS = -10, yE = 20;      

            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax + by + c
		var coeffecient = [];
		var yes = 0, no = 0;

		
		for (var x = xS; x <= xE; x+=0.5) {
			for (var y = yS; y <= yE; y+=0.5) {
				//条件
				yes = (2*x + y >= 15) &&
					  (x+2*y>=18) &&
					  (x+3*y>=27) && 
					  (x >= 0) &&
					  (y >= 0);
			
			
				if (yes) {
					arrayYes.push([x, y]);
				}
				else {
					arrayNo.push([x, y]);
				}
			}
		}
             
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, '#CC88FF');  
			/*tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); */
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, '#CCFF88');   
			/*tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   */
		}
		
		config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);       
		config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
      
    }
	</span>


技术分享

技术分享

<span style="font-size:18px;">   if (1) {  
        var r = 20;        
        config.setSector(1,1,1,1);          
   
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 1, spaceY = 1;       
        var xS = 0, xE = 5;      
        var yS = 0, yE = 5;      

            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax + by + c
		var coeffecient = [];
		var yes = 0, no = 0;

		
		for (var x = xS; x <= xE; x+=1) {
			for (var y = yS; y <= yE; y+=1) {
				//条件
				yes = (x+2*y<=8) &&
					  (4*x<=16) && 
					  (4*y<=12) &&
					  (x >= 0) &&
					  (y >= 0);
			
			
				if (yes) {
					arrayYes.push([x, y]);
				}
				else {
					arrayNo.push([x, y]);
				}
			}
		}
		
		
		//可行域与最优解
		var size = arrayYes.length;
		var feasible = [];
		
		for (var i = 0; i < size; i++) {
			
			feasible.push([arrayYes[i][0], arrayYes[i][1], arrayYes[i][0]*2+arrayYes[i][1]*3]);
		}
		
		feasible.sort(function(a, b) {
			//求最小值为最优时不加负号
			//最大值为最优时加负号
			return -(a[2]-b[2]);
		});
		
		var best =  [feasible[0][0]*scaleX/spaceX, feasible[0][1]*scaleY/spaceY];

		var s = '最优解是:'+feasible[0][0].toFixed(3)+' , ' + feasible[0][1].toFixed(3)+' , ' +feasible[0][2].toFixed(3);
		
		plot.fillText(s, -270, -170, 200);
		

		
        //区域图  
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, '#CC88FF');  
			/*tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); */
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, '#CCFF88');   
			/*tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   */
		}
		
		//最优点绘制
		shape.pointDraw(best, 'red');
		
		//坐标轴标注
		config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,190);       
		config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
		

			
      
    }</span>

技术分享

技术分享

技术分享

技术分享

这个Excel解决的是这个问题:


技术分享

技术分享


<span style="font-size:18px;">    if (1) {  
        var r = 20;        
        config.setSector(10,5,9.5,1);          
   
            

          
		//坐标轴设定    
        var scaleX = 2*r, scaleY = 2*r;      
        var spaceX = 0.1, spaceY = 0.1;       
        var xS = 0, xE = 1;      
        var yS = 0, yE = 0.8;      

            
		//
        var arrayYes = [], arrayNo= [];
		//系数阵列 ax + by + c
		var coeffecient = [];
		var yes = 0, no = 0;

		
		for (var x = xS; x <= xE; x+=0.01) {
			for (var y = yS; y <= yE; y+=0.01) {
				//条件
				yes = (0.105*x+0.105*y>=0.075) &&
					  (0.07*x+0.14*y>=0.06) && 
					  (0.14*x+0.07*y>=0.06) &&
					  (x >= 0) &&
					  (y >= 0);
			
			
				if (yes) {
					arrayYes.push([x, y]);
				}
				else {
					arrayNo.push([x, y]);
				}
			}
		}
		
		
		//可行域与最优解
		var size = arrayYes.length;
		var feasible = [];
		
		for (var i = 0; i < size; i++) {
			
			feasible.push([arrayYes[i][0], arrayYes[i][1], arrayYes[i][0]*28+arrayYes[i][1]*21]);
		}
		
		feasible.sort(function(a, b) {
			return (a[2]-b[2]);
		});
		
		var best =  [feasible[0][0]*scaleX/spaceX, feasible[0][1]*scaleY/spaceY];


		

		
        //区域图  
        var transform = new Transform();  
        var tmp = [];  
          
		if (arrayNo.length > 0) {		
			arrayNo = transform.scale(transform.translate(arrayNo, 0, 0), scaleX/spaceX, scaleY/spaceY); 


			//不满足条件的点
			tmp = [].concat(arrayNo);        
			shape.pointDraw(tmp, '#CC88FF');  
			/*tmp = [].concat(arrayNo);        
			shape.strokeDraw(tmp, 'blue'); */
		}
		
		if (arrayYes.length > 0) {
			arrayYes = transform.scale(transform.translate(arrayYes, 0, 0), scaleX/spaceX, scaleY/spaceY);   
			//满足条件的点 --> 解集
			tmp = [].concat(arrayYes);        
			shape.pointDraw(tmp, '#CCFF88');   
			/*tmp = [].concat(arrayYes);        
			shape.strokeDraw(tmp, 'green');   */
		}
		
		//最优点绘制
		shape.pointDraw(best, 'red');
		
		//坐标轴标注
		config.graphPaper2D(0, 0, r);        
        config.axis2D(0, 0,350);       
		config.axisSpacing(xS, xE, spaceX, scaleX, 'X');        
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');     
		
		var s = '最优解是:'+feasible[0][0].toFixed(3)+' , ' + feasible[0][1].toFixed(3)+' , ' +feasible[0][2].toFixed(3);
		
		
		plot.setFillStyle('blue')
			.fillText(s, 270, -340, 200);
			
      
    }</span>

技术分享


技术分享

本节到此结束,欲知后事如何,请看下回分解。

[从头学数学] 第182节 不等式

标签:

原文地址:http://blog.csdn.net/mwsister/article/details/51172034

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!