《数学建模实战攻略:引言》

Posted SYBH.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《数学建模实战攻略:引言》相关的知识,希望对你有一定的参考价值。

一、专栏简介与目标

欢迎来到《数学建模实战攻略》专栏!本专栏旨在帮助初学者、参加数学建模竞赛的学生以及对数学建模感兴趣的研究者和开发者全面了解数学建模的知识体系,掌握建模方法和技巧,提高解决实际问题的能力。

本专栏将涵盖数学建模的基本概念、方法论、常用数学理论和工具、编程工具与软件、实战案例分析、数学建模竞赛攻略以及高级建模技巧与拓展等内容。通过循序渐进地学习,希望大家能在数学建模的道路上取得长足进步。

二、数学建模的重要性及应用领域

数学建模是利用数学方法和思想对现实世界中的各种问题进行抽象、分析和解决的过程。在科学研究、工程技术和经济管理等领域中,数学建模被广泛应用于预测未来趋势、优化决策和资源分配、分析复杂系统等方面,具有很高的实用价值。

以下是数学建模在不同领域的典型应用:

  1. 生物医学:基因组学、蛋白质结构预测、药物设计、流行病传播等。
  2. 交通物流:交通流量预测、路径规划、调度优化等。
  3. 环境科学:气候变化预测、污染物扩散模拟、生态系统评估等。
  4. 金融经济:股票市场分析、信用评分、风险管理等。
  5. 工程技术:结构优化设计、过程控制、能源系统规划等。

为了更好地展示数学建模在实际应用中的效果,下面我们将通过一个简单的例子来说明如何使用MATLAB进行线性回归分析。

三、MATLAB实例:线性回归分析

线性回归是一种基本的预测和分析方法,适用于研究变量之间的线性关系。在这个例子中,我们将使用MATLAB对某城市的人口与房价数据进行线性回归分析,预测未来的房价走势。

  1. 准备数据:假设我们有以下人口(单位:万人)和房价(单位:万元/平方米)的数据:
    population = [50, 60, 70, 80, 90, 100, 110, 120];
    house_price = [2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0];
    

  2. 绘制散点图:在进行线性回归分析之前,我们可以先绘制人口和房价的散点图,直观地观察它们之间的关系:
    figure;
    scatter(population, house_price, 'filled');
    xlabel('Population (10,000 people)');
    ylabel('House Price (10,000 yuan/square meter)');
    title('Scatter Plot of Population and House Price');
    

  3. 进行线性回归分析:MATLAB提供了polyfit函数,可以方便地进行线性回归分析。我们使用polyfit计算回归系数:
    degree = 1; % Degree of the polynomial to fit
    coefficients = polyfit(population, house_price, degree);
    

  4. 绘制回归线:根据回归系数,我们可以绘制回归线,观察拟合效果:
    hold on;
    regression_line = polyval(coefficients, population);
    plot(population, regression_line, 'r', 'LineWidth', 2);
    legend('Data Points', 'Regression Line');
    hold off;
    

通过上述MATLAB代码,我们成功地对人口与房价数据进行了线性回归分析,并预测了未来的房价走势。这仅仅是数学建模在实际问题中应用的一个简单示例。在后续的专栏文章中,我们将继续深入学习数学建模的各种方法和技巧,助力大家在数学建模领域取得更大的突破。

在接下来的专栏文章中,我们将逐步深入了解数学建模的基本概念与方法论。为了给读者提供一个直观的认识,我们将首先从问题抽象与建模过程入手,了解数学建模的整体框架。

四、问题抽象与建模过程

数学建模的核心在于将现实世界中的问题抽象成数学模型,然后利用数学方法求解。一般来说,数学建模的过程可以分为以下几个步骤:

  1. 问题分析:对现实世界中的问题进行深入分析,了解问题的背景、目标和约束条件。

  2. 模型假设:根据问题的特点,提出合理的假设,简化问题的复杂程度。需要注意的是,合适的假设应能保留问题的主要特征,同时尽量降低问题的复杂性。

  3. 模型建立:在模型假设的基础上,运用数学方法将问题转化为数学模型。这一过程需要选择合适的数学方法,如微分方程、概率论、优化方法等。

  4. 模型求解:针对建立的数学模型,运用数学理论和计算工具求解。求解过程可能涉及解析解、数值解等不同类型的解法。

  5. 模型验证:通过与实际数据的对比,检验模型的有效性。如果模型预测结果与实际情况相符合,则说明模型是有效的;否则,需要重新分析问题,调整模型假设或方法。

  6. 模型优化与应用:根据验证结果,对模型进行优化,提高模型的预测准确性和实用性。同时,可以将优化后的模型应用于实际问题的解决,为决策者提供有价值的参考依据。

通过以上六个步骤,我们可以将现实世界中的问题抽象为数学模型,并求解。需要注意的是,数学建模是一个迭代的过程,可能需要多次调整模型和方法,以获得满意的结果。在后续的专栏文章中,我们将详细介绍各种数学建模方法,以及如何运用这些方法解决实际问题。敬请期待!

Android 进阶——性能优化之电量优化全攻略及实战小结

文章大纲

引言

电池续航时间是移动用户体验中最重要的一个方面。没电的设备完全无法使用。因此,对于应用来说,尽可能地考虑电池续航时间是至关重要的。为使应用保持节能,有三点需要注意:

  • 让应用变得“偷懒至上”。
  • 充分利用可帮助您管理应用耗电量的平台功能。
  • 使用可帮助您找出耗电源头的工具。

当测试或者其他人反馈耗电问题时,bug report结合Battery Historian是最好的排查方法。

//7.0和7.0以后
$ adb bugreport bugreport.zip
//6.0和6.0之前:
$ adb bugreport > bugreport.txt
//通过historian图形化展示结果
python historian.py -a bugreport.txt > battery.html

一、偷懒至上的原则

让应用变得“偷懒至上”是指设法减少和优化特别耗电的操作,“偷懒至上”设计背后的核心问题包括:

  • 减少操作:您的应用是否存在可删减的多余操作?例如,是否可以缓存已下载的数据,而不是反复唤醒无线装置来重新下载数据?
  • 推迟操作:应用是否需要立即执行某项操作?例如,是否可以等到设备充电后再将数据备份到云端?
  • 合并操作:工作是否可以批处理,而不是多次将设备置于活动状态?例如,是否真的有必要让数十个应用分别在不同时间打开无线装置发送消息?是否可以改为在无线装置单次唤醒期间传输消息?

在使用 CPU、无线装置和屏幕时,您应该考虑这些问题。“偷懒至上”设计通常可以很好地优化这些耗电因素。

二、低电耗模式

从 Android 6.0(API 级别 23)开始,Android 引入了两项省电功能:低电耗模式和应用待机模式通过管理应用在设备未连接至电源时的行为方式,帮助用户延长电池寿命。

1、低电耗模式概述

当用户长时间未使用设备时,低电耗模式会延迟应用的后台 CPU 和网络活动,从而降低耗电量。如果用户未插接设备的电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动状态,那么设备就会进入低电耗模式。在低电耗模式下,系统会:

  • 尝试通过限制应用访问占用大量网络和 CPU 资源的服务来节省电量。
  • 会阻止应用访问网络,并延迟其作业、同步和标准闹钟。

系统会定期退出低电耗模式一小段时间,让应用完成其延迟的活动。在此维护期内,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。

在每个维护期结束时,系统会再次进入低电耗模式,暂停网络访问并推迟作业、同步和闹钟。随着时间的推移,系统安排维护期的次数越来越少,这有助于在设备未连接至充电器的情况下长期处于不活动状态时降低耗电量。一旦用户通过移动设备、打开屏幕或连接至充电器唤醒设备,系统就会立即退出低电耗模式,并且所有应用都会恢复正常活动

2、低电耗模式限制

在低电耗模式下,您的应用会受到以下限制:

  • 暂停访问网络。
  • 系统忽略唤醒锁定
  • 标准 AlarmManager 闹钟(包括 setExact()setWindow())推迟到下一个维护期。
    • 如果您需要设置在设备处于低电耗模式时触发的闹钟,请使用 setAndAllowWhileIdle()setExactAndAllowWhileIdle()
    • 使用 setAlarmClock() 设置的闹钟将继续正常触发,系统会在这些闹钟触发之前不久退出低电耗模式。
  • 系统不执行 WLAN 扫描。
  • 系统不允许运行同步适配器
  • 系统不允许运行 JobScheduler

3、适配适应低电耗模式

低电耗模式可能会对应用产生不同的影响,具体取决于应用提供的功能和使用的服务。许多应用无需修改即可在低电耗模式周期内正常运行。在某些情况下,您必须优化应用管理网络、闹钟、作业和同步的方式。应用应该能够在每个维护期内高效地管理活动。低电耗模式尤其可能会影响 AlarmManager 闹钟和定时器管理的活动,因为当系统处于低电耗模式时,不会触发 Android 5.1(API 级别 22)或更低版本中的闹钟。为了帮助安排闹钟,Android 6.0(API 级别 23)引入了两种新的 AlarmManager 方法:setAndAllowWhileIdle()setExactAndAllowWhileIdle()。通过这些方法,您可以设置即使设备处于低电耗模式也会触发的闹钟。

注意setAndAllowWhileIdle()setExactAndAllowWhileIdle() 为每个应用触发闹钟的频率都不能超过每 9 分钟一次。

低电耗模式对网络访问的限制也有可能影响应用,特别是当应用依赖于操作消息或通知等实时消息时更是如此。如果应用需要与网络建立持久性连接来接收消息,您应尽可能使用 Firebase 云消息传递 (FCM)。要确认应用在低电耗模式下的行为方式符合预期,您可以使用 adb 命令强制系统进入和退出低电耗模式并观察应用的行为。如需了解详情,请参阅在低电耗模式和应用待机模式下进行测试

三、应用待机模式

应用待机模式会延迟用户近期未与之交互的应用的后台网络活动。当设备处于低电耗模式时,应用对某些高耗电量资源的访问会延迟到维护期,应用待机模式允许系统判定应用在用户未主动使用它时是否处于闲置状态。当用户有一段时间未触摸应用时,系统便会作出此判定,但以下条件均不适用:

  • 用户明确启动应用。

  • 应用当前有一个进程在前台运行(作为活动或前台服务,或者正在由其他活动或前台服务使用)。

    注意:您只能将前台服务用于用户希望系统立即执行或不中断的任务。 此类情况包括将照片上传到社交媒体,或者即使在音乐播放器应用不在前台运行时也能播放音乐。您不应该只是为了阻止系统判定您的应用处于闲置状态而启动前台服务。

  • 应用生成用户可在锁定屏幕或通知栏中看到的通知。

  • 应用是正在使用中的设备管理应用(例如设备政策控制器)。虽然设备管理应用通常在后台运行,但永远不会进入应用待机模式,因为它们必须保持可用性,以便随时从服务器接收策略。

当用户将设备插入电源时,系统会从待机状态释放应用,允许它们自由访问网络并执行任何待处理的作业和同步。如果设备长时间处于闲置状态,系统将允许闲置应用访问网络,频率大约每天一次。 未主动使用应用、一段时间未触摸应用进入以下情况不会进入:

  • 用户显式启动应用。
  • 应用当前有一个进程位于前台(表现为 Activity 或前台服务形式,或被另一 Activity 或前台服务占用)。
  • 应用生成用户可在锁屏或通知托盘中看到通知时。

通过运行以下命令强制应用进入应用待机模式:

$ adb shell dumpsys battery unplug

$ adb shell am set-inactive true

使用以下命令模拟唤醒应用:

$ adb shell am set-inactive false

$ adb shell am get-inactive

对其他用例的支持

通过妥善管理网络连接、闹钟、作业和同步以及使用高优先级 FCM 消息,几乎所有应用都应该能够支持低电耗模式。对于一小部分用例,这可能还不够。对于此类用例,系统提供了一个可配置的白名单,将部分免除低电耗模式和应用待机模式优化的应用列入其中。

在低电耗模式和应用待机模式期间,列入白名单的应用可以使用网络并保留部分唤醒锁定。不过,列入白名单的应用仍会受到其他限制,就像其他应用一样。例如,列入白名单的应用的作业和同步会延迟(在搭载 API 级别 23 及更低级别的设备上),并且其常规 AlarmManager 闹钟不会触发。应用可以调用 isIgnoringBatteryOptimizations() 来检查它当前是否在豁免白名单中。用户可以依次转到设置 > 电池 > 电池优化来手动配置该白名单。另外,系统也提供了一些方法,让应用要求用户将其列入白名单。

  • 应用可以触发 ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent,让用户直接转到电池优化,以便他们在其中添加该应用。
  • 具有 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限的应用可以触发一个系统对话框,让用户直接将该应用添加到白名单,而无需转到“设置”。此类应用将通过触发 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 来触发该对话框。
  • 用户可以根据需要从白名单中手动移除应用。

在要求用户将您的应用添加到白名单之前,请确保该应用符合列入白名单的可接受用例

以上是关于《数学建模实战攻略:引言》的主要内容,如果未能解决你的问题,请参考以下文章

余胜威《MATLAB数学建模经典案例实战》2015年版

数学建模MATLAB应用实战系列(九十)-TOPSIS法应用案例(附MATLAB和Python代码)

数学建模MATLAB应用实战系列(八十二)-数学建模非线性多元回归(附MATLAB代码)

数学建模MATLAB应用实战系列(八十二)-数学建模非线性多元回归(附MATLAB代码)

数学建模MATLAB应用实战系列(八十三)-灰色预测(附MATLAB代码)

数学建模MATLAB应用实战系列(109)-KNN分类(附MATLAB代码)