基本方法思想是,拿到一个函数表达式,以一定的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可以观察到计算到的该极值点

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

1394

被折叠的 条评论
为什么被折叠?



