javascript求基本初等函数的极值

本文介绍了一种通过Echarts绘制sin(x)+cos(x)函数图像的方法,并利用循环找出函数在指定区间内的最大值。代码示例展示了如何初始化图表、设置坐标轴参数、生成数据点以及实现深浅主题切换。

基本方法思想是,拿到一个函数表达式,以一定的x递增间隔(误差值)分别求出f(x),把求得的所有f(x)放入一个暂存数组,暴力用for循环找出数组中记录的最大值.辅以Echart在浏览器中绘制出函数图像,以

sin(x)+cos(x)为例

代码如下:

<button>切换模式</button>
<div id="main" ></div>
<script type="text/javascript">
	 let flag=true;
	 let data = [];//用于存放所有x,f(x)值的数组
function go(str){	
	let chartDom = document.getElementById('main');
	let myChart = echarts.init(chartDom,str);
	let option;
	
	function func(x) {
	  return Math.sin(x)+Math.cos(x);//目标函数表达式
	}
	function generateData() {
	  for (let i = 0; i <= 10; i += 0.01) {//试探x取0到10范围内的极值,试探步调0.01
		data.push([i, func(i)]);//把x和对应的f(x)值分别存入data全局数组
	  }
	  return data;
	}
	option = {
		legend: {},
	  tooltip: {},
	  animation: false,
	  grid: {
		top: 40,
		left: 50,
		right: 40,
		bottom: 50
	  },
	  xAxis: {
		name: 'x',
		min:-10,
		max:10,
		splitNumber:10,
		minorTick: {
		  show: true
		},
		minorSplitLine: {
		  show: true
		}
	  },
	  yAxis: {
		name: 'y',
		min: -10,
		max: 10,
		minorTick: {
		  show: true
		},
		minorSplitLine: {
		  show: true
		}
	  },
	  dataZoom: [
		{
		  show: true,
		  type: 'inside',
		  filterMode: 'none',
		  xAxisIndex: [0],
		  startValue: -20,
		  endValue: 20
		},
		{
		  show: true,
		  type: 'inside',
		  filterMode: 'none',
		  yAxisIndex: [0],
		  startValue: -20,
		  endValue: 20
		}
	  ],
	  series: [
		{
		  type: 'line',
		  showSymbol: false,
		  clip: true,
		  data: generateData()//调用数据生成函数,
		}
	  ]
	};
	
	
	window.onresize = function() {
				myChart.resize();
	};
	option && myChart.setOption(option);//把配置生成Echart图表
}	
 
go('');
$(function(){
	$("button").click(function(){
		if(flag){
			let chartDom = document.getElementById('main');
				echarts.dispose(chartDom);
			 go('dark');
			 flag=false;
		}else{
			let chartDom = document.getElementById('main');
				echarts.dispose(chartDom);
			 go('');
			 flag=true;
		}
	});
});	 
function sinMax(){
	let max=data[0][1];//首先把数组的第一个f(x)设置为最大值
	let result=[];
	let x;
	for(let i=1;i<data.length;i++){//遍历data数组
		if(max<data[i][1]){//如果发现有更大值,则把该值设置为最大值
			max=data[i][1];
			x=0.01*i;//计算函数最大值f(x)对应的x值
		}
	}
	result.push(max);
	result.push(x);
	return result;//把结果放入result数组,并返回
}   
	
console.log(sinMax())	
</script>

运行结果:

放大Echart可以观察到计算到的该极值点

 sin(x)+cos(x)=\sqrt{2}*(\sqrt{2}/2*sin(x)+\sqrt{2}/2*cos(x)) =\sqrt{2}*sin(x+\pi /4)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mathhater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值