Simulink中.sxl文件与.mdl文件的区别

Simulink中.sxl文件与.mdl文件的区别

.sxl文件与.mdl文件

slx文件是二进制格式文件,mdl文件是文本格式文件,早期Simulink的模型文件为mdl格式,slx格式在Matlab/Simulink R2012a版本中引入,旨在取代以前的.mdl格式,由于slx被压缩,通常文件大小会比相同的mdl文件小。

文件区别

在这里插入图片描述
一个简单的模型分别存成K01A.slx格式和K01B.mdl文件,然后分别用记事本打开,可以看出slx文件打开后为乱码,mdl文件打开后为文本,这些文本描述了模型的特性。
在这里插入图片描述
在这里插入图片描述
slx文件是二进制格式文件,本质上是压缩文件,可以将扩展名改成.rar后,使用压缩软件解压。更改K01A.slx扩展名为K01A.rar,然后使用压缩软件解压,得到:
在这里插入图片描述

运行速度

有些网友说,slx是二进制文件,运行速度应该比Simulink快,但经过仿真试验发现,slx文件与mdl文件的运行速度并无明显差别。循环运行K01A.slx和K01B.mdl各100次,记录运行时间。

clear
clc

tic
N = 100;
for ii = 1:N
    sim('K01A')
end
t1 = toc

tic
for ii = 1:N
    sim('K01B')
end
t2 = toc
t1 =

    8.3624


t2 =

    8.3136

我的理解是:不管sxl和mdl文件,作用都只是描述模型的组成结构,经过Simulink运行环境的编译后,在底层执行时的代码是相同的,所以二者在运行速度上不会有明显差别。

联系作者

有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。
添加QQ:944077462,免费获取源程序。
更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans

在这里插入图片描述

### 创建酷狗T500榜单爬虫 为了创建一个能够抓取酷歌T500榜单页面的网络爬虫,可以按照如下方法构建程序结构: #### 使用库介绍 - `csv` 库用于将收集的数据写入CSV文件中[^1]。 - `time` 模块用来控制请求之间的延迟时间,防止过频访问给服务器带来压力[^1]。 - `requests` 是发起HTTP请求的核心工具,通过它可以直接获取网页HTML源码。 - `BeautifulSoup` 来自于`bs4`包,专门处理HTML文档解析工作,方便提取所需信息。 - `os` 提供操作系统级别的接口函数,在此主要用于管理本地文件路径以及创建必要的目录结构。 - `pymysql` 负责建立MySQL数据库间的通信桥梁,并执行SQL语句完成数据持久化操作。 #### 获取目标URL列表 首先需要准备好要爬取的目标链接地址。对于酷狗音乐Top500来说,通常会有一个固定的API端点或者是分页形式展示全部条目。这里假设存在一个基础URL模板,可以通过改变其中某些参数(比如offset偏移量)来遍历整个排行榜。 ```python import requests base_url = "https://www.kugou.com/yy/rank/home/{page}-8888.html?from=rank" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } for page in range(1, 26): # 假设共有25页 url = base_url.format(page=page) response = requests.get(url=url, headers=headers) if response.status_code != 200: continue html_content = response.text parse_html(html_content) # 解析html内容的方法定义见下文 ``` #### 页面解析逻辑 利用`BeautifulSoup` 对返回的HTML字符串进行分析,定位到包含歌曲名称、歌手姓名等字段的具体标签位置,并将其转换成易于理解的形式。 ```python from bs4 import BeautifulSoup def parse_html(html_str): soup = BeautifulSoup(html_str, features="lxml") song_list = [] items = soup.select('.pc_temp_songlist .pc_temp_item') for item in items: rank = int(item.find('span', class_='pc_temp_num').get_text(strip=True)) title_and_artist = item.find_all('a')[1].get_text().split('-') name = '-'.join(title_and_artist[:-1].strip() duration_tag = item.find('span', class_='pc_temp_tips_r') minutes, seconds = map(int, duration_tag['title'].split(':')) length_in_seconds = minutes * 60 + seconds record = {'Rank': rank, 'Name': name, 'Artist': artist, 'LengthInSeconds': length_in_seconds} save_to_database(record) # 存储至数据库的操作将在后面描述 write_into_file(f"{name},{artist},{length_in_seconds}\n") # 将记录追加到文本文件中 ``` #### 数据存储方式 ##### 文本文件(TXT) 每当成功解析一条有效记录之后,就可以调用下面这个简单的辅助函数把它附加到指定的日志文件里去。 ```python import os.path as osp output_dir = './data' if not osp.exists(output_dir): os.makedirs(output_dir) def write_into_file(line): file_path = osp.join(output_dir, 'kugou_top_500.txt') with open(file_path, mode='a+', encoding='utf-8') as f: f.write(line) ``` ##### CSV 文件 除了纯文本之外,还可以考虑采用更加通用化的表格格式——即逗号分割值(CSV),以便后续导入Excel或其他电子表格软件做进一步加工处理。 ```python import csv def store_as_csv(records): output_file = osp.join(output_dir, 'kugou_top_500.csv') fieldnames = ['Rank', 'Name', 'Artist', 'LengthInSeconds'] exists = osp.isfile(output_file) with open(output_file, newline='', mode=('r+' if exists else 'w'), encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL, fieldnames=fieldnames) if not exists: writer.writeheader() # 只有当文件不存在时才写表头 for row_dict in records: writer.writerow(row_dict) ``` ##### MySQL 数据库存储 最后一种方案就是借助关系型数据库管理系统(RDBMS)如MySQL来进行高效检索查询。这一步骤涉及到先配置好相应的连接池对象,再逐行插入新纪录。 ```python import pymysql.cursors db_config = dict( host='localhost', user='root', password='', database='music_rankings', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) def init_db(): connection = pymysql.connect(**db_config) try: create_table_query = """ CREATE TABLE IF NOT EXISTS kugou_songs ( id INT AUTO_INCREMENT PRIMARY KEY, rank SMALLINT UNSIGNED NOT NULL UNIQUE, song_name VARCHAR(255), singer_name VARCHAR(255), duration TINYINT UNSIGNED); """ with connection.cursor() as cursor: cursor.execute(create_table_query) connection.commit() finally: connection.close() init_db() def save_to_database(song_info): insert_sql = """INSERT INTO kugou_songs(rank,song_name,singer_name,duration) VALUES (%(Rank)s,%(Name)s,%(Artist)s,FLOOR(%(LengthInSeconds)s / 60)) ON DUPLICATE KEY UPDATE song_name=%(Name)s,singer_name=%(Artist)s,duration=FLOOR(%(LengthInSeconds)s / 60);""" conn = None try: conn = pymysql.connect(**db_config) with conn.cursor() as cur: affected_rows = cur.execute(insert_sql, args=song_info) print(f'Inserted {affected_rows} rows.') conn.commit() except Exception as e: raise RuntimeError(str(e)) finally: if conn is not None and conn.open: conn.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MatlabFans_Mfun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值