[从头学数学] 第151节 二次函数 小结与复习题

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了筑基后期的修炼,
这次要修炼的目标是[二次函数 小结与复习题]。

正剧开始:

星历2016年03月24日 14:45:50, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[二次函数 小结与复习题]。


[从头学数学] 第151节 二次函数 小结与复习题_第1张图片


话说最近[人叫板老师]老爱让[机器小伟]解方程,本来吧这也没什么,毕竟用python的numpy库可以轻松搞定。

但是呢,[工程师阿伟]却嫌那个numpy要加载的东西太多,也不知道里面都有些什么,反正附带的文件相当的多。

而且最重要的是,它是用python写的,所以阿伟就想用JS自己写一个,当然,这只能慢慢来。

考虑到[人叫板老师]现在的方程也就是一些二元、三元的,好像用行列式也可以解决了。

于是,阿伟终于忍不住了,还是走上了从头创建矩阵类的道路。


<span style="font-size:18px;">/**
* @usage   矩阵类
* @author  mw
* @date    2016年03月24日  星期四  14:51:45 
* @param
* @return
*
*/
function Matrix() {
	this.delta = function(matrix) {
		var size = matrix.length;
		
		if (!matrix[0].length) {
			return 0;
		}
		else {
			if (matrix[0].length != size) {
				return 0;
			}
			
			if (size < 1) {
				return 0;
			}
			else if (size == 1) {
				return matrix[0][0];
			}
			else {
				var d = 0;
				var subMatrix = [];
				
				for (var i = 0; i < size; i++) {
					subMatrix = this.subSet(matrix, i, 0);
					d += Math.pow(-1, i)*matrix[i][0]*this.delta(subMatrix);
				}
				return d;
			}
		}
	}
	
	this.subSet = function(matrix, row, col) {	
		var size = matrix.length;
		
		if (!matrix[0].length) {
			return [];
		}
		else {
			if (matrix[0].length != size) {
				return [];
			}
			
			var newMatrix = new Array();
			var rowArray= new Array();
			
			for (var i = 0; i < size; i++) {
				if (i == row) {
					continue;
				}
				else {
					rowArray = [];
				
					for (var j = 0; j < size; j++) {
						if (j == col) {
							continue;
						}
						else {
							rowArray.push(matrix[i][j]);
						}
					}
					
					newMatrix.push(rowArray)
				}
			}
			
			return newMatrix;
		}
	}
	
	this.identityMatrix = function(rank) {
		var newMatrix = new Array();
		var rowArray= new Array();
		
		for (var i = 0; i < rank; i++) {
			rowArray = [];
			
			for (var j = 0; j < rank; j++) {
				if (j == i) {
					rowArray.push(1);
				}
				else {
					rowArray.push(0);
				}
			}
			
			newMatrix.push(rowArray);
		}
		
		return newMatrix;
	}
	
	//把从1-n的n个数按顺序放到矩阵中
	this.sequenceMatrix = function(rank) {
		var newMatrix = new Array();
		var rowArray= new Array();
		
		var count = 0;
		for (var i = 0; i < rank; i++) {
			rowArray = [];
			
			for (var j = 0; j < rank; j++) {
				count++;
				rowArray.push(count);
				
			}
			
			newMatrix.push(rowArray);
		}
		
		return newMatrix;
	}
	
	
	this.print = function(matrix) {
		var size = matrix.length;
		
		if (!matrix[0].length) {
			return [];
		}
		else {
			var rSize = matrix[0].length;
			
			var s = '';
			
			for (var i = 0; i < size; i++) {
				s = '';
				
				for (var j = 0; j < rSize; j++) {
					s += matrix[i][j].toFixed(2) + ' , ';
				}
				
				document.write(s+'<br/>');
			}
		}
	}
					
					
	
}</span>

现在这么点函数能做什么呢?

<span style="font-size:18px;">	var matrix = new Matrix();
	var m = matrix.identityMatrix(5);
	var m2 = [[1,5,7],[2,6,-3],[99,23,5]];
	matrix.print(m);
	document.write(matrix.delta(m)+'<br/>');
		matrix.print(m2);
	document.write(matrix.delta(m2)+'<br/>');
	
	var m3 = [[4,5,7,3],[4,-2,6,-1],[5,8,5,3],[14,67,4,2]];
			matrix.print(m3);
	document.write(matrix.delta(m3)+'<br/>');</span>

[从头学数学] 第151节 二次函数 小结与复习题_第2张图片

还是来看看这次[人叫板老师]出的题吧。

也不知道能不能用上这个工具。


[从头学数学] 第151节 二次函数 小结与复习题_第3张图片

[从头学数学] 第151节 二次函数 小结与复习题_第4张图片

[从头学数学] 第151节 二次函数 小结与复习题_第5张图片


[从头学数学] 第151节 二次函数 小结与复习题_第6张图片

[从头学数学] 第151节 二次函数 小结与复习题_第7张图片

<span style="font-size:18px;">		var r = 20;  
        config.setSector(1,1,1,1);    
        config.graphPaper2D(0, 0, r);  
        config.axis2D(0, 0, 180, 1);    
      
        var scaleX = 2*r, scaleY = 2*r;
        var spaceX = 2, spaceY = 10; 
		var xS = -10, xE = 10;
		var yS = -100, yE = 100;
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');  
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');  
          
        var transform = new Transform();  
        var a = [], b = [], c = [], d = [];
		
		for (var x = xS; x <= xE; x+=spaceX/2) {
			a.push([x, x*x-2*x-3]);
			b.push([x, 1+6*x-x*x]);
			c.push([x, 0.5*x*x+2*x+1]);
			d.push([x, -1/4*x*x+x-4]);
		}
		
		
          
        a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY); 
		
          
        var tmp = [].concat(a);  
        shape.pointDraw(tmp, 'red');  
        tmp = [].concat(a);  
        shape.multiLineDraw(tmp, 'pink');
		
		plot.setFillStyle('red');
		plot.fillText('y = x*x-2*x-3', 100, -20, 200);
		
		
		
		b = transform.scale(transform.translate(b, 0, 0), scaleX/spaceX, scaleY/spaceY);
		tmp = [].concat(b);  
        shape.pointDraw(tmp, 'blue');  
        tmp = [].concat(b);  
        shape.multiLineDraw(tmp, '#22CCFF');  
		plot.setFillStyle('blue');
		plot.fillText('y=1+6*x-x*x', 100, -40, 200);
		

          
		c = transform.scale(transform.translate(c, 0, 0), scaleX/spaceX, scaleY/spaceY);
        tmp = [].concat(c);  
        shape.pointDraw(tmp, 'green');  
        tmp = [].concat(c);  
        shape.multiLineDraw(tmp, '#CCFF22');
		plot.setFillStyle('green');
		plot.fillText('y=0.5*x*x+2*x+1', 100, -60, 200);
		
		d = transform.scale(transform.translate(d, 0, 0), scaleX/spaceX, scaleY/spaceY);
        tmp = [].concat(d);  
        shape.pointDraw(tmp, 'orange');  
        tmp = [].concat(d);  
        shape.multiLineDraw(tmp, '#CC8800');
		plot.setFillStyle('orange');
		plot.fillText('y=-1/4*x*x+x-4', 100, -80, 200);
		</span>




[从头学数学] 第151节 二次函数 小结与复习题_第8张图片

[从头学数学] 第151节 二次函数 小结与复习题_第9张图片


先用行列式解出a, b,c

<span style="font-size:18px;">	var matrix = new Matrix();
	var matrixArray = new Array();
	var rowArray = new Array();
	var ma, mb, mc;
	
	var a = [[-3,2],[-1,-1],[1,3]];
	
	matrixArray = [[9,-3,1],[1,-1,1],[1,1,1]];
	
	
	ma = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		ma[i][0] = a[i][1];
	}
	mb = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		mb[i][1] = a[i][1];
	}
	mc = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		mc[i][2] = a[i][1];
	}
	
	
	var d, da, db, dc;
	d = matrix.delta(matrixArray);
	da = matrix.delta(ma);
	db = matrix.delta(mb);
	dc = matrix.delta(mc);	
	
	
	matrix.print(matrixArray);
	
	document.write(d+'<br/>');
		matrix.print(ma);
	document.write(da+'<br/>');
		matrix.print(mb);
	document.write(db+'<br/>');
		matrix.print(mc);
	document.write(dc+'<br/>');
	
	var s = 'a = '+ (da/d).toFixed(2)+', b= '+(db/d).toFixed(2)+', c = ' + (dc/d).toFixed(2);
	document.write(s+'<br/>');</span>

再画图

<span style="font-size:18px;">		var r = 20;  
        config.setSector(1,1,1,1);    
        config.graphPaper2D(0, 0, r);  
        config.axis2D(0, 0, 180, 1.5);    
      
        var scaleX = 2*r, scaleY = 2*r;
        var spaceX = 2, spaceY = 2; 
		var xS = -10, xE = 10;
		var yS = -10, yE = 20;
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');  
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');  
          
        var transform = new Transform();  
        var a = [], b = [], c = [], d = [];
		
		for (var x = xS; x <= xE; x+=spaceX/5) {
			a.push([x, 0.88*x*x+2*x+0.13]);
			
		}
		
		
          
        a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY); 
		
          
        var tmp = [].concat(a);  
        shape.pointDraw(tmp, 'red');  
        tmp = [].concat(a);  
        shape.multiLineDraw(tmp, 'pink');
		
		plot.setFillStyle('red');
		plot.fillText('y = 0.88*x*x+2*x+0.13', 100, -20, 200);</span>


[从头学数学] 第151节 二次函数 小结与复习题_第10张图片

<span style="font-size:18px;">	var matrix = new Matrix();
	var matrixArray = new Array();
	var rowArray = new Array();
	var ma, mb, mc;
	
	var a = [[-0.5,0],[1.5,0],[0,-5]];
	
	for (var i = 0; i < 3; i++) {
		matrixArray.push([a[i][0]*a[i][0], a[i][0], 1]);
	}
	
	
	ma = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		ma[i][0] = a[i][1];
	}
	mb = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		mb[i][1] = a[i][1];
	}
	mc = matrix.deepCopy(matrixArray);
	for (var i = 0; i < 3; i++) {
		mc[i][2] = a[i][1];
	}
	
	
	var d, da, db, dc;
	d = matrix.delta(matrixArray);
	da = matrix.delta(ma);
	db = matrix.delta(mb);
	dc = matrix.delta(mc);	
	
	
	matrix.print(matrixArray);
	
	document.write(d+'<br/>');
		matrix.print(ma);
	document.write(da+'<br/>');
		matrix.print(mb);
	document.write(db+'<br/>');
		matrix.print(mc);
	document.write(dc+'<br/>');
	
	var s = 'a = '+ (da/d).toFixed(2)+', b= '+(db/d).toFixed(2)+', c = ' + (dc/d).toFixed(2);
	document.write(s+'<br/>');
	

</span>

<span style="font-size:18px;">0.25 , -0.50 , 1.00 , 
2.25 , 1.50 , 1.00 , 
0.00 , 0.00 , 1.00 , 
1.5
0.00 , -0.50 , 1.00 , 
0.00 , 1.50 , 1.00 , 
-5.00 , 0.00 , 1.00 , 
10
0.25 , 0.00 , 1.00 , 
2.25 , 0.00 , 1.00 , 
0.00 , -5.00 , 1.00 , 
-10
0.25 , -0.50 , 0.00 , 
2.25 , 1.50 , 0.00 , 
0.00 , 0.00 , -5.00 , 
-7.5
a = 6.67, b= -6.67, c = -5.00</span>

<span style="font-size:18px;">		var r = 20;  
        config.setSector(1,1,1,1);    
        config.graphPaper2D(0, 0, r);  
        config.axis2D(0, 0, 180, 1.5);    
      
        var scaleX = 2*r, scaleY = 2*r;
        var spaceX = 2, spaceY = 2; 
		var xS = -10, xE = 10;
		var yS = -10, yE = 20;
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');  
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');  
          
        var transform = new Transform();  
        var a = [], b = [], c = [], d = [];
		
		for (var x = xS; x <= xE; x+=spaceX/5) {
			a.push([x, 6.67*x*x-6.67*x-5]);
			
		}
		
		
          
        a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY); 
		
          
        var tmp = [].concat(a);  
        shape.pointDraw(tmp, 'red');  
        tmp = [].concat(a);  
        shape.multiLineDraw(tmp, 'pink');
		
		plot.setFillStyle('red');
		plot.fillText('y = 6.67*x*x-6.67*x-5', 100, -20, 200);</span>

[从头学数学] 第151节 二次函数 小结与复习题_第11张图片

[从头学数学] 第151节 二次函数 小结与复习题_第12张图片

[从头学数学] 第151节 二次函数 小结与复习题_第13张图片

<span style="font-size:18px;">		var r = 20;  
        config.setSector(1,1,1,1);    
        config.graphPaper2D(0, 0, r);  
        config.axis2D(0, 0, 180, 1.5);    
      
        var scaleX = 2*r, scaleY = 2*r;
        var spaceX = 5, spaceY = 150; 
		var xS = -10, xE = 20;
		var yS = -10, yE = 800;
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');  
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');  
          
        var transform = new Transform();  
        var a = [], b = [], c = [], d = [];
		
		for (var x = xS; x <= xE; x+=spaceX/5) {
			a.push([x, 6.28*x*(18-x)]);
			
		}
		
		
          
        a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY); 
		
          
        var tmp = [].concat(a);  
        shape.pointDraw(tmp, 'red');  
        tmp = [].concat(a);  
        shape.multiLineDraw(tmp, 'pink');
		
		plot.setFillStyle('red');
		plot.fillText('y = 6.28*x*(18-x)', 100, -20, 200);</span>


[从头学数学] 第151节 二次函数 小结与复习题_第14张图片



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

你可能感兴趣的:([从头学数学] 第151节 二次函数 小结与复习题)