tp钱包唯一官网|mex是什么意思

作者: tp钱包唯一官网
2024-03-09 17:54:30

ACM教程 求区间mex的多种方法 - 知乎

ACM教程 求区间mex的多种方法 - 知乎切换模式写文章登录/注册ACM教程 求区间mex的多种方法严格鸽​柚子厨/萝莉控/acm银mex:最小没有出现过的自然数。例如 mex(1,2,0,3) = 4,mex(2,1,3) =0 在区间求mex前,我们先来思考这样的问题,实现一个数据结构支持(1)添加一个数到集合中 (2)查询这个集合的mex我们可以开一个vis数组,表示某个数是否出现。初次有个下标指向0当我们添加一个数的时候,就 vis[i] = 1 (图中表示标红)当查询mex的时候,直接暴力向上,找到第一个 i ,其 vis[i] = 0 。这样我们发现,如果我们有 n 次操作。下标最多移动 n 次,也就是,总的复杂度为 O(n) 。并且我们发现,长度为 n 的数组,mex最多为 n ,那么对于值域达到了 10^9 的题目,我们直接将 a[i] > n 的数,都变成 n + 1 。如果我们在上述操作中添加一个删除操作呢?(1)添加一个数到集合中 (2)查询这个集合的mex (3)从集合中删除一个数我们可以维护一个set,表示未出现的数的集合,初始 set = [0,1,2,3,4...... n] 当添加一个新的数,他就出现过了,所以我们把它从set中删除。如果删除操作使得一个数没有出现过,就把他加添会set。那么查询mex就直接查询set中的最小值即可。int cot[N];

setst;

int m, op, x;

void slove() {

for (int i = 0; i < N; i++)st.insert(i);

cin >> m;

while (m--) {

cin >> op;

if (op == 0) {//添加

cin >> x;

if (cot[x] == 0) {

st.erase(x);

}

cot[x]++;

}

else if (op == 1) {//查询

cout << *st.begin() << endl;

}

else {//删除

cin >> x;

if (cot[x] == 1) {

st.insert(x);

}

cot[x]--;

}

}

}

复杂度为 \rm O(nlogn) 这个时候,我们引入区间查询mex 题目链接Rmq Problem / mex莫队算法Pecco:算法学习笔记(24): 莫队统共要执行 O(n\sqrt{n}) 次添加/删除操作, n 次查询操作。复杂度为 \rm O(n\sqrt{n}*log(n) + n*log(n)) 我们希望添加/删除操作的复杂度可以为 O(1) 。那么使用分块的做法Pecco:算法学习笔记(23): 分块我们 \sqrt{n} 一组分块用 cot[i] 来记录 i 出现了多少次,同时还有个 sum[i] 表示第i个块中出现了多少个数。那么我们的添加/删除可以在 O(1) 的时间内修改 cot,sum inline void add(int p){

cot[p]++;

if (cot[p] == 1)sum[p / sq]++;

}

inline void del(int p){

cot[p]--;

if (cot[p] == 0)sum[p / sq]--;

}

查询的时候,我们找到第一个没有放满的块( O(\sqrt{n}) 然后在这一块内,暴力的去找( O(\sqrt{n}) 这个时候,我们莫队的复杂度就变成了\rm O(n\sqrt{n}*1 + n *\sqrt{n} ) = O(n \sqrt{n}) codeconst int N = 2e5 + 5;

int sq = 500;

// sum 每个整快

int sum[500],cot[N], ans[N],a[N],n, m;

struct query {

int l, r, id;

} Q[N];

bool cmp(query& a, query& b) {

if (a.l / sq != b.l / sq)

return a.l < b.l;

if ((a.l / sq) & 1)

return a.r < b.r;

return a.r > b.r;

}

inline void add(int p){

cot[p]++;

if (cot[p] == 1)sum[p / sq]++;

}

inline void del(int p){

cot[p]--;

if (cot[p] == 0)sum[p / sq]--;

}

inline int que() {

for (int i = 1; i <= sq; i++) {

if (sum[i - 1] != sq) {

for (int j = (i - 1) * sq; j < i * sq; j++) {

if (!cot[j])return j;

}

}

}

}

void slove() {

cin >> n >> m;

for (int i = 1; i <= n; i++)cin >> a[i];

for (int i = 1; i <= n; i++) {

if (a[i] > 2e5)a[i] = 2e5 + 1;

}

for (int i = 1; i <= m; i++) {

cin >> Q[i].l >> Q[i].r;

Q[i].id = i;

}

sort(Q + 1, Q + 1 + m, cmp);

int l = 1, r = 0;

for (int i = 1; i <= m; i++) {

while (l > Q[i].l)

add(a[--l]);

while (r < Q[i].r)

add(a[++r]);

while (l < Q[i].l)

del(a[l++]);

while (r > Q[i].r)

del(a[r--]);

ans[Q[i].id] = que();

}

for (int i = 1; i <= m; i++)cout << ans[i] << endl;

}

离线+线段树1我们定义 mex[i] 为区间 [1,i] 的mex。这一步我们可以 O(n) 求出来。int mx = 0;

for (int i = 1; i <= n; i++) {

vis[a[i]] = 1;

while (vis[mx] == 1)mx++;

mex[i] = mx;

}

这个时候,对于 L= 1 的询问,我们可以直接出结果了。然后,我们希望,将 mex[i] 变成区间 [2,i] 的mex。也就是,删除 a[1] ,更新 mex[] 。删除 a[2] ,更新 mex[] ........我们定义 nxt[i] 为 a[i] 后面的第一个等于 a[i] 数。对于区间 [nxt[i],n] 中的 mex[] ,删除 a[i] 不会产生影响。而对于 [i,nxt[i] - 1] 之间的 mex[] ,我们用 a[i] 去更新他,大于 a[i] 的都会变成 a[i] 。我们写一个线段树即可。严格鸽:来写一个像stl一样的线段树codeint op(int a, int b) { return min(a, b); }

int e() { return 0x3f3f3f3f; }

int mmap(int f, int x) { return min(f, x); }

int comp(int f, int g) { return min(f, g); }

int id() { return 0x3f3f3f3f; }

int n, m, a[N], mex[N], nxt[N], ans[N], last[N], vis[N];

vector>g[N];

void slove() {

cin >> n >> m;

for (int i = 1; i <= n; i++)cin >> a[i];

for (int i = n; i >= 1; i--) {

nxt[i] = n + 1;

if (last[a[i]])nxt[i] = last[a[i]];

last[a[i]] = i;

}

int mx = 0;

for (int i = 1; i <= n; i++) {

vis[a[i]] = 1;

while (vis[mx] == 1)mx++;

mex[i] = mx;

}

for (int i = 1; i <= m; i++) {

int L, R; cin >> L >> R;

g[L].push_back({ R,i });

}

lazysegseg(mex, n + 10);

for (int i = 1; i <= n; i++) {

for (auto p : g[i]) {

int R = p.first, id = p.second;

ans[id] = seg.get(R);

}

seg.upd(i, nxt[i] - 1, a[i]);

}

for (int i = 1; i <= m; i++) cout << ans[i] << endl;

}

离线+线段树2我们利用权值线段树,从 1 到 n 开始,不断的添加 a[i] 进去。权值线段树为维护某个数,最后一次出现在数组中的位置,初始所有的数都没出现。这个时候,对于所有 R = i 的询问,我们可以利用 L 进行查询。找到最后一次出现的位置小于 L 的最小的数。例如 L = 2 ,我们找到 0 。 L = 1 我们找到 4 。我们直接在权值线段树上二分即可 严格鸽:什么是权值线段树 —— 用线段树来实现平衡树code#define ls (2*x)

#define rs (2*x + 1)

struct node {

int mi = 0;

int l, r;

}tr[N << 2];

void pushup(int x) {

tr[x].mi = min(tr[ls].mi, tr[rs].mi);

}

void build(int x, int l, int r) {

tr[x].l = l, tr[x].r = r;

if (l == r)return;

int mid = (l + r) / 2;

build(ls, l, mid), build(rs, mid + 1, r);

pushup(x);

}

void upd(int x, int pos, int v) {

if (tr[x].l == tr[x].r) {

tr[x].mi = v;

return;

}

int mid = (tr[x].l + tr[x].r) / 2;

if (pos <= mid)upd(ls, pos, v);

else upd(rs, pos, v);

pushup(x);

}

int get(int x, int pos) {

if (tr[x].l == tr[x].r) {

return tr[x].mi;

}

int mid = (tr[x].l + tr[x].r) / 2;

if (pos <= mid)return get(ls, pos);

else get(rs, pos);

}

int que(int x, int L) {

if (tr[x].l == tr[x].r)return tr[x].l;

if (tr[ls].mi < L)return que(ls, L);

else return que(rs, L);

}

int n, m, a[N], ans[N];

vector>g[N];

void show() {

for (int i = 0; i <= n; i++)cout << get(1, i) << " ";

cout << endl;

}

void slove() {

cin >> n >> m;

for (int i = 1; i <= n; i++)cin >> a[i];

build(1, 0, n);

for (int i = 1; i <= m; i++) {

int L, R; cin >> L >> R;

g[R].push_back({ L,i });

}

for (int i = 1; i <= n; i++) {

upd(1, a[i], i);

for (auto p : g[i]) {

int L = p.first, id = p.second;

ans[id] = que(1, L);

}

}

for (int i = 1; i <= m; i++)cout << ans[i] << endl;

}

在线+主席树实际上,如果上面的离线操作你搞明白了,并且真的会主席树的思想严格鸽:数据结构学习笔记(7) 主席树对于询问 [L,R] ,我们直接在 root[R] 上进行查询即可。const int N = 2e5 + 5;

const int M = 1e6 + 5;

struct node {

int mi = 0;

int l = 0, r = 0;

}tr[M * 30];

#define ls(x) (tr[x].l)

#define rs(x) (tr[x].r)

#define mi(x) tr[x].mi

int tot = 1;

int root[N], a[N], n, m;

void pushup(int x) { mi(x) = min(mi(ls(x)), mi(rs(x)));}

void upd(int last, int now, int pos, int k, int l, int r) {

//过去的节点 现在的节点 修改的位置,k ,当前节点表示的区间[l,r]

if (l == r) {

mi(now) = k;

}

else {

ls(now) = ls(last), rs(now) = rs(last);

int mid = (l + r - 1) / 2;

if (pos <= mid)

ls(now) = ++tot, upd(ls(last), ls(now), pos, k, l, mid);

else

rs(now) = ++tot, upd(rs(last), rs(now), pos, k, mid + 1, r);

pushup(now);

}

}

void upd(int last, int now, int pos, int k) {

upd(last, now, pos, k, 0, n);

}

int que(int x, int L, int l, int r) {

if (l == r)return l;

int mid = (l + r - 1) / 2;

if (mi(ls(x)) < L)return que(ls(x), L, l, mid);

else return que(rs(x), L, mid + 1, r);

}

void slove() {

cin >> n >> m;

for (int i = 1; i <= n; i++) {

cin >> a[i];

root[i] = ++tot;

upd(root[i - 1], root[i], a[i], i);;

}

while (m--) {

int L, R; cin >> L >> R;

cout << que(root[R], L, 0, n) << endl;

}

}

编辑于 2022-09-15 09:55ACM 竞赛数据结构OI(信息学奥林匹克)​赞同 152​​13 条评论​分享​喜欢​收藏​申请

MATLAB 与 C/C++ 混合编程(MEX)案例 - 知乎

MATLAB 与 C/C++ 混合编程(MEX)案例 - 知乎首发于随便玩玩切换模式写文章登录/注册MATLAB 与 C/C++ 混合编程(MEX)案例九折水瓶喵喵喵简介最近科研时用 MATLAB 编程遇到了一些问题, 决定采用 MEX 技术. 具体问题是, 我需要读取一批二进制文件并进行数据处理, 数量是10e6量级, 每个文件40KB. 读取采用 MATLAB 的 fread 函数, 发现时间开销巨大, 查看磁盘传输速率只有2MB/s. 于是靠万能的 MathWorks 帮助文档编写了 MEX 函数, 将读取速度提高到了 100MB/s 以上[^注1].本文将依据自己编写程序的过程, 讲述从配置环境到编写MEX函数的步骤. 博主是物理学专业的研究生, 写编程方面的文章有点啰嗦, 而且对编程术语可能有表述不清的情况, 还请各位指正. [^注1]: 后来发现, 无论对于 C++ 还是 MATLAB, 少量大文件的读取都显著快于大批小文件. 大幅度的读取速度提升实际依赖笔者将小文件进行合并. 不过数据读取功能的 MEX C++ 实现与纯 MATLAB 相比还是有约2倍的速度提升.配置环境MinGW-w64 是著名的开源 C/C++ 编译器, 是被 MATLAB 支持的兼容编译器. 现在验证其是否被正确安装, 如安装 C++ MEX 则在 MATLAB 命令行窗口输入 mex -setup C++若提示 未找到支持的编译器 或之后编译时提示 您使用的是不受支持的 MinGW 编译器版本, 则至MathWorks 帮助中心 页的示例节 版本历史记录, 以寻找所安装的 MATLAB 版本支持的MinGW. 安装 MinGW 有两种方式, 笔者选择的是从 MATLAB 官网下载, 优点是不折腾. 另一种是已经安装符合版本要求的MinGW 编译器, 那么通过查阅 手动配置MinGW 亦可完成配置过程. 该文档提到了一些安装配置的疑难问题, 包括本人遇到的 MinGW 安装文件夹名称不能包含空格. 如对于本人 Windows 系统上安装的 R2020a 版本, 可查找到 MinGW 6.3 C/C++ 为可用编译器. 若出现以下结果则说明安装成功 MEX 配置为使用 'MinGW64 Compiler (C++)' 以进行 C++ 语言编译。这个 示例 显示如何编译 C MEX 函数, 该示例可用于测试编译器安装情况. 编写 C/C++ 函数首先编写函数的主体, 即 void read_data_by_fname(). 目的是将存有长度为 data_length, 数据类型为 short (int16) 的数据读取至内存.void read_data_by_fname(short *data_m, std::string fn, int32_t data_length)

{

int data_occupy = 2; // sizeof(short)

int data_size = 1; // number of bytes for each element

FILE * fp;

fp = fopen(fn.c_str(), "rb+");

size_t result;

result = fread(data_m, data_size, data_length*data_occupy, fp);

if (result != data_length*data_occupy) // check if the expected data is xread

{fputs ("Reading error",stderr); exit (3);}

fclose(fp);

}

输入参数分别为:data_m, 指向带有 sizeof(short)*data_length 字节的内存块的指针;fn, 包含文件路径的文件名, 类型是 std::string;data_length, 数据元素的个数.下面提供测试该函数的一个主函数样例#include "stdio.h"

#include "stdlib.h"

#include

void read_data_by_fname(short *data_raw, std::string fname, int32_t matrix_size);

int main(){

std::string filepath = "E\:\\test\\test.dat"

int data_length = 4096*5000;

short data_raw[data_length];

read_data_by_fname(data_raw,filepath, data_length);

return(0);

}

我们创建了一个空数组 data_raw, 将其首地址传给 read_data_by_fname() 函数, 那么二进制文件 test.dat 的数据被读取至内存空间. 那么 C/C++ 程序如何与 MATLAB 互相传递数据呢.读取输入和准备输出本部分将结合本人编写的代码解释 C/C++ 与 MATLAB 互相传递参数, 以及数据类型转换的过程. 尝试了两种方法, 分别是使用 C MEX API 编写 C MEX 函数 和使用 C++ MEX API 编写 C++ MEX 函数. 两种方法不兼容, 数据接口分别采用了 C Matrix API 方法和更为现代的 MATLAB Data API for C++. 前者可以创建从 MATLAB® R2017b 或更早版本中调用的 C 函数, 而后者使用现代 C++ 语义和设计模式, 并通过使用 MATLAB 的写入时复制 (copy-on-write) 语义来尽可能地避免数据复制. 数据接口 C Matrix API 与 MATLAB Data API for C++ 亦不兼容. 编写 C MEX 函数创建文件 ReadData_c.c, 所有内容, 包括 read_data_by_fname() 和函数主体 mexFunction(), 以及申明部分均写在该文件下. #include "mex.h"

#include "stdio.h"

#include "stdlib.h"

#include "matrix.h"

#include

以上是编译所需要引用的库. void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{

if(nrhs != 2) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs", "Two inputs required.");

}

if(nlhs != 1) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs", "One output required.");

}

char *fname_c;

int32_t img_length;

fname_c = mxArrayToString(prhs[0]);

img_length = mxGetScalar(prhs[1]);

short data_raw[img_length];

read_data_by_fname(data_raw, fname_c, img_length);

plhs[0] = mxCreateNumericMatrix(1,img_length, mxINT16_CLASS, mxREAL);

short *data_output = mxGetInt16s(plhs[0]);

memcpy(data_output, &data_raw[0], img_length*sizeof(short));

}

这部分是函数的主体, 借鉴了文档 创建C源MEX文件. 该文档详细地引导了构建过程, 故这里不作过多赘述. 这里逐段强调一些重点, 并列出参考资料来源. 本文件使用的数据接口是 C Matrix API. 内置函数 支持 mxArray 数据结构,用于编译 C MEX 函数或 C Engine 应用程序. if(nrhs != 2) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs", "Two inputs required.");

}

if(nlhs != 1) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs", "One output required.");

}

函数的开始部分一般是使用 nrhs 和 nlhs 参数验证 MEX 文件输入和输出参数的数量, 以及使用 plhs 和 prhs 参数验证参数类型 (这块没写).// manipulate input

char *fname_c;

int32_t img_length;

fname_c = mxArrayToString(prhs[0]);

img_length = mxGetScalar(prhs[1]);

声明输入参数的变量, 并将输入的 MATLAB 数据类型读取至 C 变量. 处理不同的数据类型可查阅 文档 中的 创建, 查询和访问数据类型. short data_raw[img_length];

read_data_by_fname(data_raw,fname_c,img_length);

执行读文件任务plhs[0] = mxCreateNumericMatrix(1,img_length, mxINT16_CLASS, mxREAL);

short *data_output = mxGetInt16s(plhs[0]);

memcpy(data_output, &data_raw[0], img_length*sizeof(short));

这一步是准备输出数据. mxCreateNumericMatrix(mwSize m, mwSize n, mxClassID classid, mxREAL) 创建一个 $m\times n$ 维 classid 类型实矩阵, 返回指向类型为 classid 的 mxArray 的指针, 赋值给第一个输出参数 plhs[0]. mxGetInt16s(plhs[0]) 取得 plhs[0] 的地址并传给 data_output. 最后使用 memcpy() 函数从数组的首位 &data_raw[0] 拷贝整个数组至存储区 data_output 即 plhs[0], 从而完成输出参数的传递.编写 C++ MEX 函数与上一节略有不同, 头文件需要额外添加#include "mexAdapter.hpp"

#include

C++ MEX API 的使用方式与上一节 C MEX API 存在差异. 具体来说, MexFunction 类将覆盖函数调用运算符 operator(). 此实现会创建一个可以像函数一样调用的函数对象.using namespace matlab::data;

class MexFunction : public matlab::mex::Function {

ArrayFactory factory;

public:

void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {

// validate arguments

checkArguments(outputs, inputs);

CharArray fname = std::move(inputs[0]);

char fname_c[40]={};

matlab_str_to_cstr(fname_c, fname);

TypedArray data_length = std::move(inputs[1]);

int32_t img_length = data_length;

short data_raw[img_length];

read_data_by_fname(data_raw, fname_c, img_length);

std::vector v(data_raw,data_raw + img_length);

TypedArray data_output_c = factory.createArray({1, v.size()}, v.data(), v.data()+v.size());

outputs[0] = std::move(data_output_c);

}

依然逐段分析代码. checkArguments() 用于检查输入输出参数的数目和类型, 定义如下. void checkArguments(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {

// Get pointer to engine

std::shared_ptr matlabPtr = getEngine();

// Check offset argument: First input must be string

if (inputs[0].getType() != ArrayType::CHAR)

{

matlabPtr->feval(u"error", 0,

std::vector({ factory.createScalar("First input must be string") }));

}

// Check array argument: Second input must be int32 scalar

if (inputs[1].getType() != ArrayType::INT32 ||

inputs[1].getNumberOfElements() != 1)

{

matlabPtr->feval(u"error",0,

std::vector({ factory.createScalar("Second input must be INT_32") }));

}

// Check number of outputs

if (outputs.size() > 2)

{

matlabPtr->feval(u"error",0,

std::vector({ factory.createScalar("Only one output is returned") }));

}

}

参考了C++ MEX 函数实例. matlab::mex::ArgumentList 是 C++ MEX 函数的输入和输出的容器.CharArray fname = std::move(inputs[0]);

char fname_c[40]={};

matlab_str_to_cstr(fname_c, fname);

TypedArray data_length = std::move(inputs[1]);

int32_t img_length = data_length;该部分处理输入数据. CharArray 和 TypedArray 是命名空间 matlab::data 中的模板化类, 用于处理 MATLAB 中的数组. 这里 介绍了 MATLAB ArrayType 和 C++ 数据类型的转换关系. 函数 matlab_str_to_cstr() 将 MATLAB 字符串转化为字符数组, 定义如下void matlab_str_to_cstr(char *to_paste, CharArray to_copy)

{

int i = 0;

while(to_copy[i] != 't')

{

to_paste[i] = to_copy[i];

i++;

}

to_paste[i] = to_copy[i];

}

short data_raw[img_length];

read_data_by_fname(data_raw, fname_c, img_length);

创建数组并读取数据.std::vector v(data_raw,data_raw + img_length);

TypedArray data_output_c = factory.createArray({1, v.size()}, v.data(), v.data()+v.size());

outputs[0] = std::move(data_output_c);

使用标准库中的 std::vector, 将 data_raw 中数据拷贝至容器 v. 然后创建并赋值 MATLAB 数组 data_output_c. 创建数组 使用了 C++ 类 ArrayFactory. 之后, data_output_c 被传给输出参数. 这里使用了 std::move 以避免不必要的拷贝.编译和测试MEX文件ReadData_c.c调用 MATLAB 的 mex 命令来编译该函数mex -R2018a ReadData_c.c参数 -R2018a 为最低的 MATLAB 版本, 因为使用的类 mxUINT8_CLASS 最初在该版本引入.编译成功后, 即可在 MATLAB 脚本或命令行调用该函数data = ReadData_c(fname,int32(data_length))这里 data_length 的数据类型应与 C 类型一致.ReadData_cpp.cpp调用 MATLAB 的 mex 命令来编译该函数mex ReadData_cpp.cpp编译成功后, 即可在 MATLAB 脚本或命令行调用该函数data = ReadData_cpp(fname,int32(data_length))编辑于 2023-07-21 13:21・IP 属地福建MatlabC / C++​赞同 11​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录随便玩玩一

mex文件_百度百科

件_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10mex文件播报讨论上传视频输出函数mexFunction 的dll文件MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件。中文名mex文件外文名MATLAB和Executable介    绍在matlab环境中调用的C语言定    义输出函数mexFunction 的dll文件目录1程序简介2程序编写3程序编译4程序调用5环境配置程序简介播报编辑MEX从字面上是MATLAB和Executable 两个单词的缩写。.MEX文件是一种可在matlab环境中调用的C(或fortran)语言衍生程序,MEX文件的后缀名按32位/64位分别为 .mexw32/.mexw64。MEX文件是由C或Fortran语言编写的源代码,经matlab编译器处理而生成的二进制文件。它是可以被matlab解释器自动装载并执行的动态链接程序,类似windows下的dll文件。MEX文件实现了一种其它语言与MATLAB的接口,通过MEX文件可以在MATLAB中像调用内嵌函数一样调用使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能提高MATLAB环境中数据处理的效率。程序编写播报编辑mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件,所以写MEX程序其实就是写一个DLL程序。编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等。MEX文件格式#include "mex.h"

void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )

{

}四个参数分别用来输出和输入数据: nlhs 是输出参数个数,plhs 是输出参数指针;nrhs 是输入参数个数,prhs 是输入参数指针。注意: 对输出和输入参数的操作都是通过指针的方式进行的。操作输入数据对输入数据进行操作,需要通过MEX函数mxGetPr 得到数据的指针地址。 mxGetM 和 mxGetN 得到矩阵数据的行和列 (返回整数)。对于实矩阵,我们可以定义 double *M; 来对实矩阵数据操作。如:double *M;

int m,n;

//指针指向第一个参数的数据地址

M = mxGetPr(prhs[0]);

m = mxGetM(prhs[0]);

n = mxGetN(prhs[0]);MATLAB矩阵数据的存储顺序是"从上到下,从左到右"的,这点和Fortran是一样的。也就是说对于MATLAB的m x n的矩阵A。 A(1,1) 就是 *M,A(2,1) 就是 *(M+1) ,以此类推,A(i,j) 就是 *(M + m*(j-1) + (i-1)).注意: MATLAB的指标从1开始,C的指标从0开始。操作输出数据对于输出数据,需要首先用专门的mex函数分配内存空间,如:plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的实矩阵。同输入数据一样,要对输出数据操作,我们也需要一个指向数据的指针变量,如double *A;

A = mxGetPr(plhs[0]);完整的代码示例创建文件 timestwoalt.c,其内容如下:#include "mex.h"

void timestwo_alt(double *y, double x)

{    

    *y = 2.0*x;

}

void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )

{    

    double *M;

    int m,n;    //指针指向第一个参数的数据地址

    M = mxGetPr(prhs[0]);

    m = mxGetM(prhs[0]);

    n = mxGetN(prhs[0]);

    

    plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的实矩阵,分配内存空间

    double *A;

    A = mxGetPr(plhs[0]);

    

    timestwo_alt(A,*M);     //调用并直接赋值到指针指向的输出变量

}程序编译播报编辑如编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mex timestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件程序调用播报编辑运行:在MATLAB的控制窗口中输入timestwoalt(10)结果为ans =20.0000 + 0.0000i环境配置播报编辑MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB要求配置接口组件和相关工具,二是要有C语言或Fortran语言的编译器。Matlab中的配置使用如下命令按照提示进行:karry新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

MATLAB 配置 MEX 编译环境 - 知乎

MATLAB 配置 MEX 编译环境 - 知乎首发于The Duality Gap切换模式写文章登录/注册MATLAB 配置 MEX 编译环境sjhstone奋跻来潮 / Keep evolving into the next gen.MATLAB 可以调用由 C/C++ 或 FORTRAN 语言文件编译生成的二进制 MATLAB 可执行文件(MEX, MATLAB executable)。与普通的 C/C++/FORTRAN 不同,MEX 源文件需要额外设置 gateway 函数来对接 MATLAB。Mathworks 也提供了相关的头文件,提供了一些数据类型的定义,以及对数据大小的预处理等各类功能。这一功能在提升某些运算方面具有极大的潜力。对于同一架构、同一操作系统、同一 MATLAB 版本而言,编译完成后的 MEX 文件是通用的。但反之,架构、操作系统或 MATLAB 版本中的任一因素均可导致 MEX 文件不可通用。所以,对于开源软件作者而言,还是维护源代码比维护二进制发行版更为现实。但这也要求用户需要掌握对 MEX 编译环境的配置。MEX 相关功能在三类主流操作系统上都有所支持,但各个系统上 MATLAB 所支持的编译器种类不尽相同。Windows 上受 MATLAB 支持的编译器种类是最多的,其中包括由 Intel Parallel Studio 自带的大名鼎鼎的 Intel C++ Compiler。在大多数情况下,编译器安装好后,通过简单执行 mex -setup language_name ,MATLAB 就能通过环境变量或注册表值找到所需的编译器文件。但是,有可能出现以下几种情况:环境变量设置不正确注册表键值设置不正确MATLAB 版本号较小,无法支持当前新版本的编译器(如 R2017a 无法支持 Intel Parallel Studio XE 2018,默认只能支持 2017 及以下版本)就个人经历而言,曾把 Visual Studio 2017 从 SSD 的系统盘中卸载后重装到 HDD 中去过一次,但重装后对应的注册表键值却没有被安装程序重新修改。对于这种情况,在设置 mex 时开启 verbose 模式就可以看得很清楚到底哪里缺东西或是搞错了。>> mex -setup C++ -v

Verbose mode is on.

... Looking for compiler 'Intel C++ Composer XE 2013 with Microsoft SDK 7.1' ...

... Looking for environment variable 'ICPP_COMPILER14' ...No.

... Looking for environment variable 'ICPP_COMPILER13' ...No.

...

... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 15.0 ...Yes ('Some_Wrong_Path').

... Executing command 'set "vcroot=Some_Wrong_Path"&for /f "delims= " %a in ('type "Some_Wrong_Path\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "Some_Wrong_Path\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%' ...Yes ('Some_Wrong_Path').而对于无法兼容最新版编译器的情况,在 MATLAB 或是对应编译器的接口没有 break changes 的情况下,一般是能够两边调通的。要做的就是告诉 MATLAB,要去找哪些依赖文件,能运行怎样的编译命令。在 GitHub:rymut/matlab-mex-intel18 这个仓库中(MATLAB Central File Exchange 镜像),我们就能找到让 R2017a 支持 2018 版英特尔 ICC 的 XML 配置文件。而在 R2017b 中,已经内置了对应的 XML 配置文件。如果下载到对应路径后,再运行开启 verbose 模式的 mex setup 命令,就能看到与 XML 文件中 下相对应的搜寻过程了。看完本文,可以试试运行 cd([matlabroot '\bin\win64\mexopts']) 进一步探索有哪些可以自由定制的选项。本文亦发布于 5t0n3 的技术自留地。编辑于 2018-03-14 18:11Matlab​赞同 32​​4 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录The Duality Gap科研相关随

墨西哥(墨西哥合众国)_百度百科

墨西哥合众国)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心墨西哥是一个多义词,请在下列义项上选择浏览(共6个义项)展开添加义项墨西哥播报讨论上传视频墨西哥合众国收藏查看我的收藏0有用+10墨西哥合众国(西班牙语:Estados Unidos Mexicanos,英语:United Mexican States),简称“墨西哥”,领土面积196.44万平方公里,是拉丁美洲第三大国,位居世界第十四位,位于北美洲南部,拉丁美洲西北端,全国划分为32个州(首都墨西哥城已由联邦区改为州),州下设市(镇)和村,首都是墨西哥城。2023年,墨西哥全国总人口1.30亿。 [1] [10]墨西哥是美洲大陆印第安人古文化中心之一。1521年沦为西班牙殖民地。 [1]1821年,墨西哥独立战争后,建立墨西哥第一帝国,1823年,被军事政变推翻,1824年,建立墨西哥合众国。1848年,美墨战争后被迫将位于北部的近三分之一领土割让给美国。 [1]1863年,在法国的扶持下建立墨西哥第二帝国。1910年爆发墨西哥革命,推翻了独裁统治,最终促成了1917年宪法的制定和现行政治体制的建立。 [1]墨是拉美经济大国,《美墨加协定》(原北美自由贸易区)成员,世界最开放的经济体之一,同50个国家签署了自贸协定。 [1]中文名墨西哥合众国 [1]外文名Estados Unidos Mexicanos(西班牙语)United Mexican States(英语)简    称墨西哥所属洲北美洲首    都墨西哥城 [1]主要城市瓜达拉哈拉,蒙特雷,韦拉克鲁斯,普埃布拉,莱昂等 [1]国庆日9月16日 [1]国    歌《墨西哥人响应战争号召》国家代码MEX官方语言西班牙语 [1]货    币墨西哥比索时    区UTC-6至UTC-8政治体制总统共和制国家领袖安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔 [1](总统)人口数量1.30 亿 [10](2023年)人口密度66.3 人/平方公里(2020年)主要民族印欧混血种人、印第安人 [1]主要宗教天主教 [1]国土面积1964400 km²水域率2.5%GDP总计1.4 万亿美元 [1](2022年)人均GDP11000 美元 [1](2022年)国际电话区号52国际域名缩写.mx道路通行靠右行驶中央银行墨西哥银行目录1历史沿革▪公元前▪西班牙统治时期▪独立▪美墨战争▪法国侵略▪迪亚斯独裁▪当代2地理环境▪区域位置▪气候特征3自然资源4行政区划▪区划▪首都▪重要城市5国家象征▪国名▪国旗▪国徽▪国鸟6人口民族7政治▪政体▪宪法▪议会▪政府▪政党▪司法▪政要8经济▪对外贸易▪货币▪人民生活9文化▪语言▪宗教▪节日▪风俗▪艺术▪民歌▪习俗▪美食10军事▪国防▪军力▪军费▪指挥体制11交通▪公交车▪汽车▪计程车▪火车▪航空▪水运12社会▪媒体▪教育▪体育13外交▪外交政策▪与中国的关系▪与秘鲁的关系14旅游▪玛雅古迹▪月亮金字塔▪杜伦古城▪莫雷利亚▪蒙特雷▪奇琴伊察古城▪宪法广场▪坎昆▪奇琴伊察▪墨西哥城历史沿革播报编辑公元前大约九千年前,古代墨西哥人驯化玉米,并推动农业革命,从而导致形成了许多文明。这些文明发展成城市、建筑、天文研究、数学、和军队。有名的文明像是奥尔梅克、提奥提华坎、阿兹台克和玛雅人。1.奥尔梅克文明玛雅神庙(3张)奥尔梅克文明(Olmec)是已知的最古老的美洲文明。它约存在和于公元前1200年到公元前400年,位在于现在的墨西哥中南部的热带雨林中,以大型的头部雕像闻名。奥尔梅克文明于公元前1200年左右产生于中美洲圣洛伦索高地的热带丛林当中。圣洛伦索是早期奥尔梅克文明的中心,在繁盛了大约300年后,于公元前900年左右毁于暴力。其后奥尔梅克文明的中心迁移到靠近墨西哥湾的拉文塔。奥尔梅克文明最终在公元前400年左右消失,为爱比奥尔梅克文化所取代。其消失的具体原因尚不得知,但它影响了大量的中美洲文明。奥尔梅克文明的许多特征,如金字塔和宫殿建造,玉器雕琢,美洲虎和羽蛇神崇拜也是后来中美洲各文明的共同元素。大多数学者认为奥尔梅克文明是玛雅、萨波特克、提奥提华坎等文明的母体。但也有人认为奥尔梅克文明和其他中美洲文明的关系是姐妹关系。2.特奥蒂瓦坎文明特奥蒂瓦坎文明(Teotihuacán)起始于公元前200年左右,大约在现在墨西哥的中部,是个在奥尔梅克文明灭亡之后才诞生,约与玛雅文明同期的古印地安文明,特奥蒂瓦坎人在西元元年到150年间,建造了一个人口约为5万的城市,堪称是整个美洲地区最早存在的城市等级之聚落,其建造许多金字塔。然而,不似其它古印地安文明般在谱系上的脉络比较分明,关于特奥蒂瓦坎人的起源,迄今为止仍然是尚未厘清的谜题,也没有任何人能证实该文明曾拥有文字并且留下资料记载。今日我们之所以知悉这文明的存在,除了是因为他们遗留下了巨大的遗迹可供分析证明外,一些与他们同时期的其他周边文明在典籍或绘画中提到关于特奥蒂瓦坎人的事情,也是另一个参考的关键。特奥蒂瓦坎人并不用这个名字称呼他们自己,这名字是该文明灭亡后,接着存在于此地区的后继文明托尔特克人以他们所使用的纳瓦特语(Nahuatl,一种墨西哥中部的印地安原住民语言)用来称呼前人,意指“众神造人之地”。虽然在托尔特克人乃至于更后期的阿兹特克时代,该古文明早已消逝无影踪,但他们仍然视特奥蒂瓦坎人曾居住过的古代城市作为圣地,也因此会有这样的称呼。西班牙统治时期1519年,西班牙人入侵墨西哥,1521年,阿兹特克首都特诺奇蒂特兰(Tenochtitlán)被西班牙和阿兹特克的主要敌人特拉斯卡尔特卡人(Tlaxcalteca)征服。但是西班牙并没有完全征服阿兹特克,而是在两世纪后才完成,有两个主要原因使西班牙人胜利。1.阿兹特克人因为相信要有恒定的活人牺牲,宇宙才会持续运作,所以每一年都牺牲了许多人,这一些人大多来自战争的战俘。但在和平的时候,阿兹热克人诉诸一种形式上的“礼战”,已获得战俘。因此特拉斯卡尔特卡人才会心甘情愿加入西班牙对付阿兹热克人的部队。2.另一个重要因素,西班牙人带入各种瘟疫和传染病带到美洲,天花、流感、鼠疫、麻疹,数以十万计的土人受到感染,这些流行病可能造成大约八百万当地人死亡。独立墨西哥独立战争由1810年开始,一直到1821年起义军才进入墨西哥市。整个独立战争由米格尔·伊达尔戈·伊·科斯蒂利亚发起,在1810年10月1日起义,试图推翻西班牙统治,但是9月起义计划由于叛徒告密泄露,所以提早在9月16日的多洛雷斯(Dolores)小镇开始,成功后成立了第一共和国,瓜达卢佩·维多利亚为其首任总统。美墨战争美墨战争由1846年一直打到1848年,战争原因是因为得克萨斯(今属美国)独立和美国扩张主义的关系,美国以利益吸收得克萨斯共和国为第28个州,并且对墨西哥遥远的加利福尼亚和新墨西哥进攻,战后墨西哥丧失了大半国土 [5],导致墨西哥人现在还是会仇恨美国人,也出现了一个新的政治家,他们摆脱了圣安纳对墨西哥的统治,并于1857年建立了一个自由共和国。法国侵略法国在墨西哥扶植的傀儡:马克西米连一世在1860年代,法国在墨西哥发生内战的时候控制了墨西哥,但它并没有完全控制就被推翻了,在1867年,恢复民主制度,华雷斯(Juárez)竞选连任成功,继续推行他的改革。在1871年,他当选第二次,他的反对党自由党,他们认为选举过程不民主。华雷斯去世一年后,米格尔·莱尔多·德特哈达继任(Miguel Lerdo de Tejada)。迪亚斯独裁在1876年特哈达再度当选,击败迪亚斯(Diaz)。1876年,迪亚斯反抗政府并宣布计划推翻特哈达自立为总统。迪亚斯推翻原政府后,特哈达逃离该国,迪亚斯成为新的总统。从而开始了超过三十年(1876年到1911年)的独裁统治,这个时期的相对繁荣与和平,该国的基础设施大为改善,这有赖外国投资。当代在经过波菲里奥·迪亚斯长时期的独裁统治后,墨西哥革命终于在1910年爆发。革命武装击败了联邦军队,但却又发生内斗,让墨西哥在长达二十年的时间里陷入内战。革命结束后,墨西哥革命制度党(Partido Revolucionario Institucional,PRI)获得了政权,并且统治着墨西哥,直到20世纪末,于2000年实现了首次的政党轮替。2006年7月2日,墨西哥总统和议会选举开始投票。9月5日,墨西哥联邦选举法院正式宣布,墨西哥国家行动党总统候选人费利佩·卡尔德龙·伊诺霍萨在总统选举中获胜,当选墨西哥新总统。2012年7月1日,反对党革命制度党总统候选人恩里克·培尼亚·涅托参加总统选举。他的竞选纲领以“变革”为核心内容——要向外国开放墨西哥国家石油公司垄断的石油业,增加税收并改革劳动力市场,加上他年轻俊朗的形象,使他的民意支持度一直领先于其他三位总统候选人。最终以38.21%的得票率赢得总统选举,第二次和平实现政党轮替,革命制度党历经12年在野后再次执政。2018年7月,左翼候选人安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔当选总统。 [2]2023年1月1日,墨西哥将不再是安理会成员国。 [6-7]地理环境播报编辑区域位置墨西哥卫星地图墨西哥领土面积196.44万平方公里,是拉丁美洲第三大国,仅次于巴西与阿根廷,位居世界第十四位,位于北美洲南部,拉丁美洲西北端,是南美洲、北美洲陆路交通的必经之地,素称“陆上桥梁”。北邻美国,南接危地马拉和伯利兹,东接墨西哥湾和加勒比海,西临太平洋和加利福尼亚湾。海岸线长11122公里。其中太平洋海岸7828公里,墨西哥湾、加勒比海岸3294公里。东、西、南三面为马德雷山脉所环绕,中央为墨西哥高原,东南为地势平坦的尤卡坦半岛,沿海多狭长平原。有300万平方公里专属经济区和35.8万平方公里大陆架。著名的特万特佩克地峡将北美洲和中美洲连成一片。墨西哥属于西5时区,当地时间比北京时间晚14个小时,实行夏时制时比北京时间晚13个小时。 [3]气候特征墨西哥气候复杂多样,由于多高原和山地,垂直气候特点明显。墨气候复杂多样。高原地区终年温和,平均气温10~26℃;西北内陆为大陆性气候;沿海和东南部平原属热带气候。大部分地区分旱(10~4月)、雨(5~9月)两季,雨季集中了全年75%的降水量。每年最旱月份为2月,降水量仅5毫米,降水最多月份为7月,降水量约170毫米。70%的地方气候干燥。西北地区年平均降水量不足250毫米,内地为750-1000毫米,墨西哥湾沿岸中部与太平洋沿岸南部为1000-2000毫米。国土面积中湿热地区占4.8%,干热地区占23%,温带地区占23.1%,干旱地区占28.3%,极干旱地区占20.8%。因墨西哥境内多为高原地形,冬无严寒,夏无酷暑,四季万木常青,故享有“高原明珠”的美称。墨西哥城街景首都墨西哥城属于高原地区,海拔2,240米,5月平均气温12-26°C,最冷月为1月,平均气温6-19°C。 [3]自然资源播报编辑墨西哥作为拉美经济大国和世界重要的矿业生产国。墨西哥主要的能源矿产资源有石油、天然气、铀和煤等;金属矿产有铁、锰、铜、铅、锌、金、银、锑、汞、钨、钼、钒等;非金属矿产有硫、石墨、硅灰石、天然碱和萤石等。储量居世界前列的矿产有:银位居世界第1位;铜和石墨居世界第3位;硫和重晶石位居世界第6位;钼、铅和锌位居世界第7位;锰位居世界第11位。油气资源是墨西哥最重要的矿产资源,据墨西哥经济部统计,截至2011年底,墨西哥的石油剩余探明可采储量为20.62亿吨,居世界第18位;天然气剩余探明可采储量为3325.14亿立方米,居世界第31位;常规石油可采资源量为114亿吨,居世界第8位;常规天然气可采资源量为5.53万亿立方米,居世界第13位。此外,墨西哥待发现的石油资源量为38亿吨,天然气为1.32万亿立方米。从地区分布上来看,油气资源主要分布在东北部海上地区,煤炭资源主要分布在东北部的科阿韦拉州和南部的瓦哈卡州,金矿主要分布在中央高原和西马德雷山脉,其中最大的金矿是墨西哥州的雷亚尔-德奥罗矿。西马德雷山区除金矿外还储藏着铅、铜、锰、锑、钨、锡、铋、汞等有色金属,是墨西哥最重要的有色金属资源分布地区。墨西哥为世界重要的非金属矿产品生产国,据墨西哥国家统计局统计,2012年非金属矿业产值约134亿比索(约合10.2亿美元),其中各非金属矿所占比例为:萤石23%、盐16%、硫14%、硅砂13%、硫酸钙10%、磷钙土9%、石膏4%、其他11%。2012年非金属矿产量增长幅度较大的矿产有硅砂、石膏、天青石等。行政区划播报编辑区划墨西哥行政区划全国划分为32个州(首都墨西哥城已由联邦区改为州),州下设市(镇)和村。32州名称如下:墨西哥城、阿瓜斯卡连特斯州、北下加利福尼亚州、南下加利福尼亚州、坎佩切州、恰帕斯州、齐瓦瓦州、科阿韦拉州、科利马州、杜兰戈州、瓜纳华托州、格雷罗州、伊达尔哥州、哈利斯科州、墨西哥州、米却肯州、莫雷洛斯州、纳亚里特州、新莱昂州、瓦哈卡州、普埃布拉州、克雷塔罗州、金塔纳罗奥州、圣路易斯波托西州、锡那罗亚州、索诺拉州、塔巴斯科州、塔毛利帕斯州、特拉斯卡拉州、韦拉克鲁斯州、尤卡坦州、萨卡特卡斯州。首都墨西哥首都为墨西哥城(Ciudad de México)。 [1]重要城市在墨西哥有很多著名城市。下面介绍的是一些最重要大城市,毫无疑问可以被称为墨西哥的最主要城市。重要城市城市特点墨西哥城(Ciudad de México)墨西哥城不仅是首都,也是墨西哥最大的城市。面积1525平方公里,人口约2280万(含卫星城),海拔2240米。建筑楼宇,历史古迹,博物馆,宫殿,纪念碑,商场,政府大楼,在墨西哥城应有尽有。霍奇米尔科(Xochimilco)运河的水上花园是该城市最大的旅游景点,还有埃尔安赫尔日独立报,独立天使胜利柱等里程碑式建筑。墨西哥城是许多大型媒体公司和西班牙文报纸的总部。大约五分之一的墨西哥人口居住在墨西哥城,因此这座城市也以不夜城而著称。瓜达拉哈拉(Guadalajara)瓜达拉哈拉是墨西哥第二大城市,也是哈利斯科州(Jalisco)的首府。墨西哥的文化根源核心可以在这个城市中找到,因为它是大部分正宗墨西哥产品的生产中心。其中最著名的例子是起源于瓜达拉哈拉的龙舌兰酒。殖民地中心,查帕拉湖(Chapala),广场,教堂和大教堂的墨西哥历史描绘是瓜达拉哈拉著名的旅游景点。除了历史景点以外,瓜达拉哈拉也有异国餐厅,购物商场和动感的夜生活。蒙特雷(Monterrey)蒙特雷是新莱昂州(Nuevo León)的首府,是墨西哥第三大城市。这座城市以“Grutas de Garcia”等美丽洞穴,和看起来像马尾巴的世界著名瀑布“Cascada Cola de Caballo”而闻名。独特的锡亚峰(Cerro de la Silla)是蒙特雷市的地标。此外,除了美术馆,博物馆,森林,古迹以外,蒙特雷也是墨西哥工业资本与一些大型工业总部所在地。莱昂(León)莱昂是蒙特雷市的首府,是墨西哥另一个主要城市。神圣耶稣的心赎罪保护区(Expiatorio)是莱昂新哥特式建筑设计的著名风景名胜之一。市政宫,以及英雄加冕拱门也是这个城市的标志。莱昂以盛产优质皮革(特别是皮鞋)而享誉国际。普埃布拉(Puebla)普埃布拉是普埃布拉州的首府,是墨西哥主要工业中心。过去只是以纺织业而知名,如今,普埃布拉还是汽车和钢铁工业的商业中心。普埃布拉位于风景如画的山谷之中,山脉和火山环绕四周。普埃布拉还以拥有从文艺复兴,古典到巴洛克时期历史古迹等文化遗产而闻名。艺术博物馆,教堂和古董商店也使其成为一个有吸引力的旅游景点。 [3]国家象征播报编辑国名墨西哥合众国(英语:The United Mexican States,西班牙语:Estados Unidos Mexicanos)国旗国旗墨西哥国旗呈长方形,长与宽之比为7:4。从左至右由绿、白、红三个平行相等的竖长方形组成,白色部分中间绘有墨西哥国徽,图案内容来自关于墨西哥历史的传说。绿色象征独立和希望,白色象征和平与宗教信仰,红色象征国家的统一。国徽国徽墨西哥国徽为一只展翅的雄鹰嘴里叼着一条蛇,一只爪抓着蛇身,另一只爪踩在从湖中的岩石上生长出的仙人掌上。这组图案描绘了墨西哥人的祖先阿兹特克人建国的历史。相传在很久很久以前,太阳神为了拯救四处流浪的墨西哥人祖先阿兹特克人,托梦给他们,只要见到鹰叼着蛇站在仙人掌上,就在那地方定居下来。居住在墨西哥北部地区的阿滋特克人在太阳神的启示下,找到图案中所描绘的地方定居下来,这个地方在特斯科科湖的岛上,建立了特诺奇提特兰(Tenochtitlán),就是现在的墨西哥城(Ciudad de México)。仙人掌是墨西哥的国花,象征着墨西哥民族及其顽强的斗争精神。图案中下方为橡树和月桂树枝叶,象征力量、忠诚与和平。国鸟金雕金雕的特点是头颈上有金色的羽毛。黑眼睛,黄色的腊膜,灰色的喙。黄色的大脚,脚上长满羽毛,爪又大又强健。翼展长度达2.3米,它是象征墨西哥的国鸟。在北美洲,金雕的栖息地从墨西哥中部开始,沿着太平洋沿岸地区向洛基山脉分布,一直延伸到阿拉斯加北部和纽芬兰。也有少量沿阿巴拉契亚山脉向南方的北卡罗来纳州分布。由于金雕数量稀少,处濒危状态,所以美国联邦政府颁布法律加以保护。但在有些地区,因为金雕袭击羊群,允许捕杀。在欧洲,挪威、苏格兰、西班牙、阿尔卑斯山、意大利和巴尔干半岛都有人饲养金雕。此外,非洲北部也有金雕栖息。但数量还不如分布在西伯利亚、伊朗、巴基斯坦、我国南方和日本高纬度地区的多。金雕的窝筑在悬崖峭壁的洞穴里,或者在孤零零的一棵大树上。金雕的蛋白色褐色都有,每窝大约产1~4个,一般是2个。雄雕和雌雕轮流孵化,经过40~45天,小雕即可出壳,3个月以后开始长羽毛。一般只有一二只能够存活。人口民族播报编辑2023年,墨西哥全国总人口1.30亿。印欧混血人和印第安人占总人口的90%以上。 [1] [10]政治播报编辑政体墨西哥实行总统制。总统是国家元首和政府首脑,任期6年,终身不得再任。不设副总统职位。2018年7月,国家复兴运动党候选人洛佩斯当选总统,于当年12月1日就职,任期至2024年9月。洛佩斯政府以推进反腐、消除特权、惠民为特点的“第四次变革”为政纲。 [1] [10]宪法1824年颁布独立后第一部宪法。1917年颁布《墨西哥合众国宪法》,历经多次修改后执行至今。宪法规定立法、行政、司法三权分立;总统通过直接选举产生;土地、水域及其它一切自然资源归国家所有等。联邦各州制定本州宪法,但州政府权力受国家宪法约束。 [1] [10]议会墨西哥联邦议会分为参众两院,行使立法权。两院议员不得连选连任,但可隔届竞选。【参议院】 128名议员,任期6年。本届参议院于2021年6月选举产生,国家复兴运动党60席,国家行动党20席,公民运动党12席,革命制度党9席,其他党派27席。现任参议长为国家复兴运动党的安娜·莉莉娅·里维拉·里维拉(Ana Lilia Rivera Rivera),2023年9月1日就职,任期至2024年8月31日。【众议院】500名议员,其中300席通过多数票选举产生,200席按政党比例代表制产生,任期3年。本届众议院于2021年6月产生,国家复兴运动党201席,国家行动党114席,革命制度党69席,绿色生态党41席,劳动党33席,公民运动党27席,民主革命党15席。现任众议长为革命制度党的马塞拉·格拉·卡斯蒂略(Marcela Guerra Castillo),2023年9月1日就职,任期至2024年8月31日。 [1] [10]政府本届政府于2018年12月1日成立。主要内阁成员有内政部长路易莎·玛利亚·阿尔卡德·卢汉(Luisa María Alcalde Luján,女)、外交部长阿莉西亚·巴尔塞纳·伊巴拉(Alicia Bárcena Ibarra,女)、国防部长路易斯·克雷森西奥·桑多瓦尔(Luis Cresencio Sandoval)、海军部长何塞·拉斐尔·奥赫达·杜兰(José Rafael Ojeda Durán)、公共安全部长罗莎·伊塞拉·罗德里格斯(Rosa Icela Rodríguez,女)、财政和公共信贷部长罗赫略·拉米雷斯(Rogelio Ramírez)、福利部长阿里阿德纳·蒙特尔·雷耶斯(Ariadna Montiel Reyes,女)、环境和自然资源部长玛利亚·路易莎·阿尔沃雷斯·冈萨雷斯(María Luisa Albores González,女)、能源部长米格尔·安赫尔·马西埃尔·托雷斯(Miguel Ángel Maciel Torres)、经济部长拉奎尔·布恩罗斯特罗(Raquel Buenrostro,女)、农业和农村发展部长维克多·比利亚洛沃斯·阿兰布拉(Víctor Villalobos Arámbula)、交通通信部长豪尔赫·努诺·拉腊(Jorge Nuño Lara)、公共职能部长罗伯托·萨尔塞多·阿基诺(Roberto Salcedo Aquino)、公共教育部长莱蒂西亚·拉米雷斯·阿马亚(Leticia Ramírez Amaya,女)、卫生部长豪尔赫·卡洛斯·阿尔科塞尔·巴雷拉(Jorge Carlos Alcocer Varela)、劳动和社会保障部长马拉斯·巴鲁克·博拉尼奥斯·洛佩斯(Marath Baruch Bolaños López)、农村、国土和城市发展部长罗曼·吉列尔莫·梅耶尔·法尔孔(Román Guillermo Meyer Falcón)、文化部长亚力杭德拉·弗劳斯托·格雷罗(Alejandra Frausto Guerrero,女)、旅游部长米格尔·托鲁科·马克斯(Miguel Torruco Márquez)等。 [1] [10]政党分类执政类型成立日期党领袖国家复兴运动党(Movimiento Regeneración Nacional)执政党2014年7月9日党主席马里奥·马丁·德尔加多(Mario Martín Delgado)(2020年10月),总书记西特拉莉·埃尔南德斯(Citlalli Hernández,女)(2020年10月)。2018年7月,该党候选人安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔(Andrés Manuel López Obrador)赢得大选,于12月1日正式就职总统。革命制度党(Partido Revolucionario Institucional):反对党社会党国际成员1929年3月4日成立,1929-2000年连续执政71年,时隔12年后于2012年至2018年再度执政。党主席亚历杭德罗·莫雷诺(Alejandro Moreno),总书记阿尔玛·维贾诺(Alma Viggiano,女)国家行动党(Partido Acción Nacional)反对党1939年9月15日成立,基督教民主国际成员,2000年至2012年执政。党主席马尔科·科尔特斯·门多萨(Marko Cortés Mendoza),总书记塞西莉亚·帕特龙·拉薇达(Cecilia Patrón Laviada,女)。 [1]司法墨西哥司法机构分为最高法院、大区法院(巡回法院)和地区法院3级。最高法院大法官由总统提名18名候选人,参议院任命其中11人,任期15年。最高法院每4年从其法官中选举1人任院长,不得连任。现任最高法院院长诺尔玛·卢西娅·皮尼亚·埃尔南德斯(Norma Lucía Piña Hernández,女),任期至2026年12月31日。大区法院和地区法院的法官由最高法院指派,任期4年。墨西哥设有总检察院和联邦区检察院。总检察长由总统提名,参议院任命。现任联邦总检察长亚力杭德罗·赫尔茨·马内罗(Alejandro Gertz Manero)。 [1]政要安德烈斯·曼努埃尔·洛佩斯·奥夫拉多尔:总统。1953年11月13日生于墨西哥塔瓦斯科州。墨西哥国立自治大学政治学和公共管理学学士。2000年至2006年担任墨西哥城市长。2018年7月,作为国家复兴运动党、社会共识党和劳动党组成的“我们共同创造历史”联盟总统候选人赢得大选。2018年12月就职,任期6年。 [1]经济播报编辑硬币图案墨是拉美经济大国,《美墨加协定》(原北美自由贸易区)成员,世界最开放的经济体之一,同50个国家签署了自贸协定。工业门类齐全,石化、电力、矿业、冶金和制造业较发达。传统农业国,是玉米、番茄、甘薯、烟草的原产地。据统计,2022年国内生产总值1.4万亿美元,同比增长3.1%,人均国内生产总值1.1万美元,通胀率8.8%,失业率2.8%。 [1]当地时间2023年9月16日,“77国集团和中国”峰会在古巴首都哈瓦那闭幕。峰会通过一项单独声明,同意墨西哥重新加入“77国集团和中国”机制。 [9]对外贸易墨主要出口原油、工业制成品、石油产品、服装、农产品等,主要出口对象国为美国、加拿大、欧盟、中美洲、中国等;主要进口食品、医药制品、通讯器材等,主要进口来源国为美国、中国、德国、日本、韩国等。2022年外贸总额11828.1亿美元,其中出口5781.9亿美元,进口6046.1亿美元,同比分别增长18.5%,17.2%和19.9%。 [1]货币墨西哥官方货币为墨西哥比索(peso mexicano),1美元≈16.7比索。 [1]人民生活2022年全国人口出生率16.6‰,死亡率6.2‰。 [1]文化播报编辑语言墨西哥主要使用语言为西班牙语。 [1]宗教墨西哥88%的居民信奉天主教,5.2%信奉基督教新教。 [1]节日墨西哥城独立纪念碑节日日期节日名称西班牙语描述1月1日新年日Año Nuevo西历新年2月5日立宪日Día de la Constitución Mexicana1917年墨西哥立宪会议通过宪法3月21日胡阿雷斯诞辰Natalicio de Benito Juárez墨西哥爱国者胡阿雷斯(Benito Juárez)诞辰,同时也是立春之意4月6日感恩节Viernes Santo, Good Friday从当年3月1日起算第40日之当周周五为感恩节5月1日劳动节Día del Trabajo劳动节5月5日五月五Cinco de Mayo1862年击溃法国的纪念日9月16日独立日Día de independencia1810年从西班牙独立出来11月20日革命日Dia de la Revolución纪念1816年在西班牙的统治下获得独立12月25日耶诞节Navidad耶稣诞生日(又名圣诞节)风俗墨西哥人吃“许愿葡萄”迎新年世界各地的人们以各自独特的风俗习惯辞旧迎新。在墨西哥,人们是吃着“许愿葡萄”喜迎新年。葡萄是每一个墨西哥家庭年末必备的食物。辞旧迎新的钟声每响一下,人们吃下一粒“许愿葡萄”,一共要吃12粒,每吃一粒许下一个心愿,求“平安”“幸福”“健康”和“财富”,祈祷新的一年从年初至岁末的每个月都吉祥如意。“哈拉贝”是墨西哥最具代表性的民间舞蹈,男子身穿传统民族服装,头戴宽沿帽,热情专注,追逐女伴;女子身穿宽肥艳丽的土布裙,佯装害羞,优雅地躲避,并不时用裙子甩出各种花形图案。墨西哥是玉米的故乡,当地人对玉米有着深厚的感情。过去5000年来,玉米从一种不为人知的野生黍类成了世界第三大粮食来源,这离不开墨西哥人的勤劳与智慧。墨西哥人还在种植玉米的过程中创造出了玛雅和阿兹特克文明。墨西哥人常说:“创造了玉米,玉米同时也创造了我们,我们是玉米人”。艺术玛雅古城遗址墨西哥是美洲文明古国,曾蕴育了玛雅、阿兹特克、托尔特克、奥尔梅加和特奥蒂华坎等古印第安文化。玛利雅奇音乐和萨巴特奥舞蹈融合了西班牙和印第安音乐舞蹈的特色,成为墨西哥独特的民族艺术形式。墨已有21处古迹被联合国宣布为“人类文化和自然遗产”。墨西哥大型民俗舞蹈58年常青。名为“墨西哥民俗芭蕾”的大型历史文化舞蹈由墨西哥著名艺术家阿玛利亚·埃尔南德斯于1952年编排而成。该舞蹈剧融合了墨西哥全国各具特色的民俗文化并表现了墨西哥独立200周年以来的历史演变。58年来,该舞蹈剧一直受到墨西哥民众以及外国旅游者的喜爱。同时也得到了墨西哥国内及国际评论家推崇,认为舞蹈剧是墨西哥一项重要的艺术成果。墨西哥文学在拉美独树一帜。作家奥克塔维奥·帕斯(1990年诺贝尔文学奖)、胡安·鲁尔福和卡洛斯·富恩特斯都是现代西班牙语文坛巨匠。墨西哥壁画举世闻名,里维拉、奥罗斯科、西凯罗斯为杰出壁画家。民歌《鸽子》《黄昏牧牛》《多幸福》《美丽的姑娘》《美丽的小天使》《齐跳跳跳》习俗墨西哥人的生活习惯除受天主教等影响外,还保留了其独特的传统色彩。在墨西哥,虽然许多人会说英语,但却希望用西班牙语交谈。如果接到对方用西班牙文写来的信而用其他文字回信,会被视为失礼。微笑和握手是墨西哥人的问候方式,男子绝不能吻一个不熟悉的女士的面颊和手;亲吻和拥抱仅用于熟人之间。墨西哥国花为仙人掌,国鸟是雄鹰,国石为黑曜石。他们最喜欢的颜色是白色,最不喜欢的颜色是紫色,最讨厌的数字为13。忌讳将黄色和红色的花送人。美食美食分类介绍龙舌兰酒龙舌兰对于墨西哥而言,具有十分重要的意义。龙舌兰叶可以造纸,而龙舌兰的花朵十分尖锐,据说可以当作武器。而如今,龙舌兰最重要的作用是制造龙舌兰酒(Tequila)。用龙舌兰叶酿制成的龙舌兰酒是墨西哥一大特产。龙舌兰酒的度数比较高,喝起来会有一些辣辣的而带香甜的感觉绕于舌尖,缠绵于喉,爱喝酒的朋友不妨一试。墨西哥的西餐谈到吃西餐,人们可能更多光顾的是法国、意大利、德国和俄式餐厅,却对墨西哥菜缺乏了解。殊不知,在当今世界权威美食家的眼中,墨西哥菜肴是和法国、印度、中国和意大利菜齐名的世界五大菜系之一。墨西哥菜以辣为主,内地居民常以龟、蛇、斑鸠、松鼠、石鸡入菜、家常蔬菜要数炒仙人掌、仙人球最富特色。墨西哥人还以嗜酒闻名于世。宾客上门,习惯先以酒招待。墨西哥城,你可以买到墨西哥各地的特产如辣椒、龙舌兰酒和海产。Taco和玉米饼数百年来,玉米一直是墨西哥食品中的主角。而以玉米为原料制成的Tortia饼也是墨西哥最基本、也最有特色的食品。这是一张用玉米煎制的薄饼,吃的时候,顾客可根据自己的喜好加入碳烤的鸡肉条或是牛肉酱,然后再加入蕃茄、生菜丝、玉米饼起司等等配料,看上去颜色格外丰富,就好似一件艺术品一般。包好以后,放入嘴中一咬,外面脆生生的,而里面却有香、辣、酸、甜各味俱全,刚柔相济、多味混杂,真叫人“爱不释口”。香辣牛扒通常在餐馆里吃的牛扒,多数人是不加任何调料的,有时顶多加一点盐。不过墨西哥的牛扒却不一样,你可以看见它是先用辣椒、盐等调料腌制好的,煎好后,即使不浇汁也非常够味。值得一提的是,人们通常认为新西兰的牛肉是上品,其实墨西哥的牛肉与新西兰的牛肉也不相上下,滑嫩清香。食虫国在世界上许多地方,人们一直保持着食昆虫的传统。在墨西哥,这个习俗已有几个世纪的历史了,因为墨西哥昆虫的数量和种类世界闻名。在墨西哥城的一些高级饭店中,人们可以品尝到墨西哥最具代表性的昆虫“查普林”蝗虫。这种蝗虫的价格昂贵,每公斤高达9美元,比牛肉的价格都高。在墨西哥瓦哈卡市的市场上,经常可看到大小不一的蝗虫:大的身长2厘米左右,小的不足1厘米。据食用者说,其味道是越小的越好,小蝗虫价格最高,就证实了这一点。在瓦哈卡市,“查普林”比萨饼越来越受人们欢迎。“湖米尔”蚊是半翅目的一种昆虫,在墨西哥一些地区可食用的蚊虫达10余种,但在味道和营养价值方面,最佳的是生活在塔斯科市周围山脉中的“湖米尔”蚊。这种蚊虫身长1.5厘米,吃树叶的汁液,隐藏在树干、植物和树的根部或地上的干树叶下。“湖米尔”蚊在当地十分受重视,特别是在塔斯科市郊的湖米尔山。那里每年11月的第一个星期一是“湖米尔”节,在山中的教堂里举行弥撒后,捕捉活动就开始了。“埃斯卡莫尔”是多种蚂蚁的蚁卵,特别是干旱土地上的蚂蚁。每年4月是当地人从地下蚁穴中挖取蚁卵的最佳时节。收集这种大小与米粒相似的蚁卵的人有很高的技巧,他们跟随在外出寻找食物的蚂蚁后面,发现蚁穴的位置后,就开挖,直到找到蚂蚁用枝条、泥巴和树叶编织成的用于产卵的洞穴。有时在一个蚁穴中可挖出1公斤蚁卵。不同厂牌的龙舌兰酒军事播报编辑国防墨西哥军队建于1821年,始称国民军,1913年改称宪制军。根据宪法,总统为武装力量最高统帅,有权宣布“紧急状态”和“战争状态”,决定兵力调动、国防开支和将级以上将领任命等。最高国防决策机构为“国家安全内阁会议”,由总统领导,成员包括国防部长、海军部长、内政部长、外交部长及其它有关政府部长。国防部和海军部是最高军事行政机关和军事指挥机构。国防部领导并指挥陆军和空军,海军部领导并指挥海军。长期以来,墨西哥军基本上没有对外作战,主要担负维护国内安定的任务。墨西哥实行义务兵和志愿兵相结合的兵役制度。规定18-45岁的男性公民均需服兵役。义务兵服役期1年,志愿兵服役期3-9年。墨西哥军事为中美洲的中型国防力量,现役部队约19万人,预备役30万人,另有民兵1.4万人。实行义务兵役制,同时招募志愿兵,义务兵服役期为1年,志愿兵服役期为3-9年。总统通过国防部和海军部对全国武力实施领导,国防部长和海军部长经总统任命,由现役四星上将担任。陆军没有主战坦克而是以装甲车和炮兵为主,海军以3艘驱逐舰和8艘巡防舰为主力,另有百艘巡逻艇和9000人的海军陆战队,空军则有10架F-5战机和80架直升机、35架运输机。大致上属于消极防御的军事规模,与北方邻国的美国军力相比落差极大,所以并非以对抗思维建军,而是以存在为主同时配合反毒和反走私作战。军力陆军截止2014年,共有陆军14.4万人。划分为12个军区、44个军分区。编有3个军、4个装甲旅、1个空降旅、1个军警旅、9个步兵旅、3个炮兵团、80个步兵营、1个机械化步兵营、19个装甲营、44个特种空中机动分队。海军截止2014年,共有海军3.7万人(含海军陆战队和海军航空兵)。划分为16个军区。编有2个舰队、17个分舰队。空军截止2014年,共有空军1.18万人。编有18个中队。装备作战飞机107架、武装直升机71架。军费2005年国防开支30.9亿美元,2006年国防预算33.2亿美元。指挥体制墨宪法规定,总统为武装力量最高统帅,有权宣布全国“紧急状态”和“战争状态”,决定兵力调动、高级将领任免、国防开支等重大事宜。国家安全内阁会议为最高国防决策机构,由总统领导,成员有国防部长、海军部长、内政部长、外交部长以及其他有关政府部长。国防部和海军部分别为政府中一个部,是最高军事行政机关,也是最高军事指挥机构。国防部领导和指挥陆、空军。海军部领导和指挥海军。国防部长和海军部长经总统任命,由现役四星上将担任。总统通过国防部和海军部对全国武装力量实施领导和指挥,通过总统府参谋部对国家安全和军事问题进行协调。交通播报编辑公交车墨西哥的公车系统发展得很不错,价格又便宜。搭乘巴士前要注意该班车是Local还是De Paso。Local是指该班车从你所在的车站发车;De Paso则是从其他车站发车的班车,这种班车无法事先购票。巴士可简单分为等级:豪华车(Servicio Ejecutivo)、头等车(Primera Clase)以及二等车(Segunda Clase),三种等级。豪华巴士提供皇家级的待遇,服务包括:可斜躺式座椅、饮食、空调和电影。头等公车已经蛮舒适便捷了,可在购票窗口询问该班车是否有盥洗室和空调。二等车牌较便宜,但比较拥挤。上车后最好保留票根以备查票。 [3]汽车在墨西哥开车非常危险,速限一般是时速100公里,不过通常那些标志都只有参考价值。其它地区在雨季(5-10月)开车尤其要特别小心,那时的路况很不好,道路上坑坑洞洞是很常见的现象。在靠近墨西哥市的路上要特别留意浓雾,看见减速慢行的号志千万别掉以轻心。经过单线道的桥,第一个先闪灯的车子能优先通过。而即使在双线道上遇到卡车,要让卡车通过,但是要小心有些路根本没有路肩,你就要停在满是植物的砂石路面上。晚上最好别开车,因为很容易就撞到人或牲畜。另外,千万千万要记得准备一个备胎,这是非常容易用到的东西。公路Palomales和Tuxtepek及瓦哈卡州之间的公路Baja的3号公路(Rte.3;整条都是坑洞)。太平洋岸和Dulango城之间的40号公路(Rte.40)。避免走Sinaloa的1号公路(Rte.1)。 [3]计程车大城市里计程车很多,价格也很合理,不过既然公车如此便捷,行运路线又广,因此除非在深夜或是在偏远的地方,最好不要搭乘计程车。若真要搭计程车,上车前最好先讲价,以免被坑,而且杀价是必需的,千万别答应照表计算(Taximetro),除了说跳表较贵之外,有些不肖司机会在跳表器上动手脚,欺负不明究理的旅客。而且,墨西哥市曾经发生一连数起的绿色计程车的强盗事件,其他地方也有类似事件发生,所以要特别小心。最好的办法就是在合法的招呼站或旅馆叫Taxi de Sitio计程车,而不要随便在路边拦车。 [3]火车墨西哥的火车由墨西哥铁路局(Ferrocarriles Nacionales De Mexico;FFNN)国营,但是墨西哥除了两条观光线路之外城市之间并没有通火车,其主要交通工具是巴士。航空主要由Mexikcana及Aeromexico经营,购买来回票可享折扣。从Benito Jualez国际机场可以搭乘地铁或出租车抵达市区。在墨西哥,地铁、巴士也是最主要的交通工具。另外,若是持有国际驾照的话,可以自己租车到任何想去的目的地。 [3]水运水上运输,特别是海运方式承担了墨西哥部分货物、国内货物和出人境旅客运输的任务。根据全国港口系统的统计,2013年1-12月,全国货运集装箱载重共达2.88亿吨货物,同比增长1.6%。其中,仅石油和石油衍生物的载重量就达1.22亿吨,占货运总量的42.5%;大宗矿产品约7836万味,占27.2%;农产品冇1356万吨,占比4.7%。此外,2013年墨西哥沿海港口和国际游轮共接待船次56710,累计接待乘客逾996万人次。经过20世纪90年代的私有化改革后,墨西哥港口成功地完成了现代化改造,国内码头各种设施已较为先进,同欧洲、美国、中南美洲和加勒比地区、远东地区、地中海地区和斯堪的纳维亚半岛的许多国家设有定期或不定期客货运班轮。果西哥全国共有大小港口和码头198个,其中海港140个,内河港口29个,内湖码头29个(根据果西哥通讯交通部统计),墨西哥海运港口和码头共117个。其中,太平洋沿岸有港口和码头58个,墨西哥湾和加勒比地区有港口和码头5个。 [3]社会播报编辑媒体莫雷利亚大教堂全国约有300家报纸和100多种全国性刊物。平均每百人订报14.4份。主要报刊有1929年创刊的《国民报》。墨西哥通讯社为官方通讯社,属于内政部。全国批准建立广播电台1,365家(1997年)。主要报刊有1929年创刊的《国民报》,现为官方报纸,发行量3.8万余份、1917年创刊的《至上报》、《至上晚报》、《墨西哥太阳报》、《金融报》、《呼声报》、《新闻报》、《宇宙报》、《消息报》、《日报》,在青年和大学生中较有影响、《墨西哥先驱报》、1953年创刊的《永久》周刊、《进程》周刊、《冲击》周刊。墨西哥通讯社为官方通讯社,属于内政部。全国批准建立广播电台1365家(1997年),电视台556家(包括有线电视台),特莱维萨和阿兹特克为墨两大电视集团,拥有全国95%以上的电视观众。墨每年出版1.2万种书刊,总发行量达2.5亿册。教育墨西哥公共教育基本为免费教育。义务教育阶段的教材全部免费。宪法规定从2008年开始实行从学前3年到初中的12年义务教育制。墨西哥国立自治大学是墨规模最大、历史最悠久的大学。根据西班牙高等科学理事会CSIC评定,该校也是拉美地区最好的大学之一。学校前身是1551年西班牙摄政王费利佩二世批准建立的墨西哥皇家大学,后曾更名为墨西哥皇家教廷大学、墨西哥国立教廷大学等,几经变迁,于1929年实行自治,称墨西哥国立自治大学并沿用至今。 [1]体育2018年6月13日,国际足联在代表大会上正式宣布,美国、加拿大和墨西哥(联合申办)击败了摩洛哥,获得了2026年世界杯的主办权。 [4]2026年世界杯足球赛将由美国、墨西哥和加拿大联合举办,其中墨西哥的3个举办城市分别是墨西哥城、瓜达拉哈拉、蒙特雷 [8]。外交播报编辑外交政策长期奉行独立自主的外交政策,主张维护国家主权与独立,尊重民族自决权,推行对外关系多元化。主张和平解决国际争端。墨是联合国、世界贸易组织、二十国集团、亚太经合组织、经济合作与发展组织、美洲国家组织、拉美和加勒比国家共同体、太平洋联盟等机制成员和不结盟运动观察员。 [1]与中国的关系中国同墨西哥于1972年2月14日建交。2003年12月,温家宝总理访墨,两国建立战略伙伴关系。2013年6月习近平主席访墨期间,两国元首共同宣布将双边关系提升为全面战略伙伴关系。2004年8月,中墨成立政府间两国常设委员会,迄已召开6次会议。中国是墨西哥第二大贸易伙伴,墨西哥是中国在拉美第二大贸易伙伴。据中国海关总署统计,2023年中墨贸易总额达1002亿美元,其中中方出口额815亿美元,进口额187亿美元。中方对墨主要出口电子元件、厨房用品、机动车零部件等,自墨主要进口石油原油、电气设备、医疗仪器等产品。墨西哥是中国公民出境旅游目的地国,2022年,中国赴墨旅游人数为5.6万人。中墨两国有3条直航航线,分别是南方航空公司开通广州—墨西哥直航航线、海南航空公司开通北京—蒂华纳—墨西哥城直航航线、墨西哥航空公司开通墨西哥—上海直航航线,目前均暂停。 [11]与秘鲁的关系2023年2月24日,秘鲁总统博卢阿特宣布,鉴于墨西哥总统洛佩斯一再发表干涉秘鲁内政的言论,秘鲁政府决定召回驻墨西哥大使,并将两国外交关系降为代办级。旅游播报编辑墨西哥是印第安人古文化中心之一。闻名世界的玛雅文化、托尔特克文化和阿兹台克文化均为墨西哥印第安人创造。墨西哥位于北美大陆南部。北邻美国,东南与危地马拉和伯利兹毗邻,南濒墨西哥湾和加勒比海,西南濒临太平洋。土地面积的5/6是高原和山地,平均海拔约1800米。沿海有众多的岛屿。其中太平洋中有雷维利亚希赫多群岛、瓜达卢佩岛、塞德罗斯岛和特雷斯——马里亚斯群岛,在加里福尼亚湾中有提布龙岛和安赫尔——德瓜达岛,在加勒比海中有穆雷斯岛和科苏梅尔岛等。玛雅古迹墨西哥的玛雅古迹(20张)奇琴伊察玛雅城邦遗址曾是古玛雅帝国最大最繁华的城邦。遗址位于尤卡坦半岛中部。始建于公元514年。城邦的主要古迹有:千柱广场,它曾支撑巨大的穹窿形房顶。可见此建筑物之大。武士庙及庙前的斜倚的两神石像。9层、高30米的呈阶梯形的库库尔坎金字塔。以及圣井(石灰岩竖洞)和筑在高台上呈蜗形的玛雅人古天文观象台,称“蜗台”。月亮金字塔杜伦古城(2张)月亮金字塔位于太阳金字塔旁,是祭祀月亮神的地方,属于阿兹台克文明的产物。建筑风格和太阳金字塔一样,比太阳金字塔晚200年建成。它坐北朝南,址长150米,宽120米,塔高46米,也分5层,外部叠砌的石块上绘有许多色彩斑斓的壁画,塔前的宽阔广场可容纳上万人。爬金字塔的时候一定要慢慢来,走急了容易因为缺氧而头晕。金字塔顶上风比较大,夏天去的时候会感觉比较凉快。杜伦古城杜伦古城是玛雅文化后期的重要遗址,坐落于犹卡坦半岛(Yukatan Peninsula)东北部,距离Cancun大城市廉著名度假胜地约130公里,盘居于加勒比海沿岸崖边。曾是14世纪玛雅文化末期的宗教城市,现今遗址保存尚好,当中有超过60栋石建筑。但当然以屹立于12公尺悬崖以上的castillo古城大神殿最著名。此外,Templo de las Flesco神殿也很完整,成为主要游览区。莫雷利亚莫雷利亚在殖民时期是著名的文化和艺术中心。该市的许多街道、广场、宫殿、教堂、拱桥高架水道等,至今仍保持殖民时期的建筑原貌。1991年,莫雷利亚市其完整地保存了西班牙殖民时代的建筑原貌,被列入联合国教科文组织的《世界遗产名录》。为墨西哥米却肯州首府莫雷利亚市的拱桥高架水道。1785年,莫雷利亚为减轻旱情修建了这条长达5公里的拱桥高架水道,后因水量不足,于19世纪末停用。如今,它是莫雷利亚市的标志性建筑。莫雷利亚大教堂是这座城市最高大最醒目的建筑,巴罗克风格与丘里格拉风格的完美结合使其成为墨西哥最经典的殖民建筑之一。大教堂始建于1660年,直到1744年才建成,工期长达84年。蒙特雷蒙特雷是墨西哥东北部新莱昂州的首府,为墨西哥第九大城市,是墨西哥北部的商业中心。该城市是一个高度发达的城市,为墨西哥比较富裕的城市。蒙特雷被认为是墨西哥最美国化的城市,丰富多彩的历史和文化是其最大的特色,拥有多处赏心悦目的自然美景和充满人文气息的旅游胜地。大广场、商业灯塔、蒙特雷现代艺术博物馆、高炉公园、总统府等都是蒙特雷的必游之地。蒙特雷市是一座国际大都市,拥有诸多博物馆,包括现代艺术博物馆、墨西哥历史博物馆、总督府博物馆、东北博物馆、自然历史博物馆、玻璃博物馆、蒙特雷地区博物馆、阿尔法天文馆和博物馆、墨西哥职业棒球名人馆等,此外,还有新莱昂艺术之家、文艺中心和民事学院艺术画廊。奇琴伊察古城奇琴伊察是古玛雅城市遗址,位于墨西哥尤卡坦州南部。南北长3公里,东西宽2公里,有建筑物数百座,是古玛雅文化和托尔特克文化的遗址。“奇琴”意为“井口”,天然井为建城的基础,现有公路把它分为两半。南侧老奇琴伊察建于公元七至十世纪,具玛雅文化特色,著名建筑有金字塔神庙、柱厅殿堂、球场、市场和椭圆形天文观象台,以石雕刻装饰为主;北侧新奇琴伊察为灰色建筑物,具托尔特克文化特色,有库库尔坎金字塔、勇士庙等,以朴素的线条装饰和羽蛇神灰泥雕刻为主。奇琴伊察是古希腊罗马时期玛雅人的圣殿,其鼎盛时期大约在公元五百年到七百年左右,对整个乌松布拉河盆地有着重大的影响。典雅的建筑、高超的技术以及轻巧的浮雕都说明了玛雅人的神话。宪法广场宪法广场中央树有巨大的墨西哥国旗,四周则是包括国家宫、最高法院和大教堂在内的重要建筑。众多身着印第安民族服饰的传统服装摊贩和装扮得绚丽多彩的印第安民俗艺人,是广场上的独特风景。位于宪法广场东侧的国家宫是墨西哥饱经沧桑的无声见证。宪法广场以北坐落着拉丁美洲最大的天主教教堂——大主教堂(Catedral Metropolitana)。坎昆坎昆(Cancun)是墨西哥著名国际旅游城市,位于加勒比海北部,墨西哥尤卡坦半岛东北端,过去它只是加勒比海中靠近大陆的一座长21公里、宽仅400米的狭长小岛。整个岛呈蛇形,西北端和西南端有大桥与尤卡坦半岛相连。隔尤卡坦海峡与古巴岛遥遥相对。该城市三面环海,风光旖旎。坎昆是世界公认的十大海滩之一,在洁白的海岸上享受加勒比的阳光是人们休闲假期的最高境界。在玛雅语中,坎昆意为“挂在彩虹一端的瓦罐”,被认为是欢乐和幸福的象征。这里的海面平静清澈,因其深浅、海底生物情况和阳光照射等原因,呈现出白色、天蓝、深蓝、黑色等多种颜色。还可以游览拉里维拉玛雅,去发现卡尔门海滩、斯卡雷特和西尔哈以及面对大海、唯一有围墙的玛雅文化城市和引人入胜的考古区图伦。在尤卡坦半岛东北部的奇琴-伊察,还有闻名世界的库库尔坎金字塔,库库尔坎在玛雅语中意为“带羽毛的蛇神”,被当地人认为是风调雨顺的象征。此外,在距坎昆130公里处还有图伦遗址,据说,这是迄今墨西哥保存最好的一座玛雅和托尔特克人的古城。奇琴伊察奇琴伊察古城遗址是墨西哥古代宗教遗址,位于墨西哥东南部尤卡坦半岛梅里达城东部120公里处。半岛属石灰岩层地带,没有河流湖泊,但有许多因岩层塌陷而形成的天然地下水池或水井。玛雅人的伊察部落能在该处定居建城,靠的就是这些地下水池供水。“奇琴伊察”在玛雅语中即为“伊察人的井口”之意,城市因此而得名。古城初建于5世纪,后随着玛雅帝国的衰亡而被遗弃。公元10世纪末,古城又曾一度兴旺。古城是以天象确立方位,布局严密、结构合理,主要建筑多围绕方形天然水井或位于通向水源道路的两侧。古城南北长3公里,东西宽2 公里。遗址中最主要的建筑物有城堡金字塔、虎庙、厅殿、球场、石柱、圣井、尼庵等等,还有一些圆形建筑,所有建筑都以雄伟壮观的风格以及建筑内外精美的雕刻装饰而引人注目。墨西哥城墨西哥城位于墨西哥中部的高原地区中央,是墨西哥的首都及该国的政治、经济、文化和交通中心,亦为世界上最大的都市之一。该城市集中了全国约二分之一的工业、商业、服务业和银行金融机构,是墨西哥高度发展的城市。墨西哥城四周青山环绕,因地势较高,冬无严寒,夏无酷暑,四季花开,常年披绿,风光秀丽。墨西哥城是世界著名的旅游城市,名胜古迹众多,宪法广场是墨西哥城中心,广场周围有国家宫、市政大厦、博物馆和大教堂,各式各样的建筑融古涵今、景色独特。市内古代阿兹特克文化的遗迹,西班牙殖民时期欧洲风格的宫殿、教堂和独立后兴建的高楼大厦交相辉映,构成了一幅墨西哥民族的历史画卷。墨西哥城的旅游中心是查普尔特佩克公园,这里是保留在人口密集、繁华喧闹的市中心区的一片环境幽静的地方,被人们称为“墨西哥城之肺”。郊区的知名古迹有太阳金字塔和月亮金字塔,每天吸引成千上万游客的造访。墨西哥城被称为“壁画之都”,集中了全墨西哥80%的壁画。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

从 MATLAB 调用 C/C++ MEX 函数 - MATLAB & Simulink - MathWorks 中国

从 MATLAB 调用 C/C++ MEX 函数

- MATLAB & Simulink

- MathWorks 中国

Skip to content

Toggle Main Navigation

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

帮助中心帮助中心

搜索帮助中心

帮助中心

MathWorks

搜索 MathWorks

MathWorks

帮助中心

Close Mobile Search

Open Mobile Search

Off-Canvas Navigation Menu Toggle

文档主页MATLAB

外部语言接口将 C++ 与 MATLAB 结合使用类别从 MATLAB 中调用 C++从 MATLAB 调用 C/C++ MEX 函数调用 MEX 函数编写可从 MATLAB(MEX 文件)调用的 C++ 函数从 C++ 调用 MATLABMATLAB Data API for C++

文档示例函数App视频问答

试用版

试用版

产品更新

产品更新

资源

文档示例函数App视频问答

Main Content

从 MATLAB 调用 C/C++ MEX 函数MEX 文件是在 MATLAB® 中创建的函数,可用来调用 C/C++ 程序。

MEX 文件是在 MATLAB 中创建的函数,可用来调用 C/C++ 程序或 Fortran 子例程。MEX 函数的行为类似于 MATLAB 脚本或函数。

要试验调用 MEX 函数,请使用MEX 函数源代码示例表中的代码来编译和运行示例。

有关创建 C++ MEX 函数的信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数。

有关在模型中使用 MEX S Function 的信息,请参阅您的 Simulink® 文档。

类别调用 MEX 函数

从 MATLAB 调用 C/C++ 或 Fortran MEX 文件函数

编写可从 MATLAB(MEX 文件)调用的 C++ 函数

创建用现代 C++ 实现并可以从 MATLAB 中调用的高性能函数

×

MATLAB 命令

您点击的链接对应于以下 MATLAB 命令:

请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。

关闭

×

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Switzerland (English)

Switzerland (Deutsch)

Switzerland (Français)

中国 (简体中文)

中国 (English)

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

América Latina (Español)

Canada (English)

United States (English)

Europe

Belgium (English)

Denmark (English)

Deutschland (Deutsch)

España (Español)

Finland (English)

France (Français)

Ireland (English)

Italia (Italiano)

Luxembourg (English)

Netherlands (English)

Norway (English)

Österreich (Deutsch)

Portugal (English)

Sweden (English)

Switzerland

Deutsch

English

Français

United Kingdom (English)

Asia Pacific

Australia (English)

India (English)

New Zealand (English)

中国

简体中文

English

日本 (日本語)

한국 (한국어)

Contact your local office

试用版

试用版

产品更新

产品更新

中国

信任中心

商标

隐私权政策

防盗版

应用状态

京公网安备 11010502045942号   京ICP备12052471号

© 1994-2024 The MathWorks, Inc.

×

WeChat

关注我们

调用 MEX 函数 - MATLAB & Simulink

调用 MEX 函数

- MATLAB & Simulink

Skip to content

Toggle Main Navigation

Products

Solutions

Academia

Support

Community

Events

Get MATLAB

Products

Solutions

Academia

Support

Community

Events

Get MATLAB

帮助中心帮助中心

Search Help Center

Help Center

MathWorks

Search MathWorks.com

MathWorks

Help Center

Close Mobile Search

Open Mobile Search

Off-Canvas Navigation Menu Toggle

文档主页MATLAB

外部语言接口将 C++ 与 MATLAB 结合使用从 MATLAB 调用 C/C++ MEX 函数类别调用 MEX 函数编写可从 MATLAB(MEX 文件)调用的 C++ 函数

文档示例函数App视频问答

Trial Software

Trial Software

Product Updates

Product Updates

Resources

文档示例函数App视频问答

Main Content

调用 MEX 函数从 MATLAB® 调用 C/C++ 或 Fortran MEX 文件函数

MEX 文件是在 MATLAB 中创建的函数,可用来调用 C/C++ 程序或 Fortran 子例程。MEX 函数的行为类似于 MATLAB 脚本或函数。

要调用 MEX 函数,请使用 MEX 文件的名称,但不带文件扩展名。MEX 文件只包含一个函数或子例程。调用语法取决于 MEX 函数定义的输入和输出参数。MEX 文件必须位于您的 MATLAB 路径下。

虽然 MATLAB 脚本和函数的扩展名 .m 和 .mlx 独立于平台,但 MEX 函数具有如下所示的 64 位平台特定的文件扩展名:

MEX 文件与平台相关的扩展名平台二进制 MEX 文件扩展名Windows®mexw64Linux®mexa64 采用 Apple 芯片的 macOSmexmaca64 采用 Intel® 的 macOSmexmaci64

注意使用 Rosetta 2 的 Apple 芯片平台不支持使用 Intel 在 macOS 上编译的 MEX 文件。

要试验调用 MEX 函数,请使用MEX 函数源代码示例表中的代码来编译和运行示例。

有关创建 MEX 函数的信息,请参阅:

编写可从 MATLAB(MEX 文件)调用的 C++ 函数 编写可从 MATLAB(MEX 文件)调用的 C 函数 编写可从 MATLAB(MEX 文件)调用的 Fortran 函数

有关在模型中使用 MEX S Function 的信息,请参阅您的 Simulink® 文档。

函数

mexext二进制 MEX 文件扩展名

主题

MEX File PlacementPut your MEX file in a folder on the MATLAB path.

运行您从其他人处接收的 MEX 文件如何运行 MEX 文件。

疑难解答

MEX 版本兼容性

为了获得最佳效果,请运行使用您的 MATLAB 版本编译的 MEX 文件。MEX Platform Compatibility

If you get a binary MEX file from another source, be sure that the file was

compiled for the same platform on which you want to run it.无效的 MEX 文件错误

在遇到无效的 MEX 文件错误时如何操作。

×

MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window.

Web browsers do not support MATLAB commands.

Close

×

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Switzerland (English)

Switzerland (Deutsch)

Switzerland (Français)

中国 (简体中文)

中国 (English)

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

América Latina (Español)

Canada (English)

United States (English)

Europe

Belgium (English)

Denmark (English)

Deutschland (Deutsch)

España (Español)

Finland (English)

France (Français)

Ireland (English)

Italia (Italiano)

Luxembourg (English)

Netherlands (English)

Norway (English)

Österreich (Deutsch)

Portugal (English)

Sweden (English)

Switzerland

Deutsch

English

Français

United Kingdom (English)

Asia Pacific

Australia (English)

India (English)

New Zealand (English)

中国

简体中文

English

日本 (日本語)

한국 (한국어)

Contact your local office

Trial Software

Trial Software

Product Updates

Product Updates

United States

Trust Center

Trademarks

Privacy Policy

Preventing Piracy

Application Status

© 1994-2024 The MathWorks, Inc.

Join the conversation

mex是什么意思_mex的翻译_音标_读音_用法_例句_爱词霸在线词典

什么意思_mex的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录mex是什么意思_mex用英语怎么说_mex的翻译_mex翻译成_mex的中文意思_mex怎么读,mex的读音,mex的用法,mex的例句翻译人工翻译试试人工翻译翻译全文mex英 释义abbr.military exchange 军用交换机大小写变形:MEXMex点击 人工翻译,了解更多 人工释义实用场景例句全部Mix prawns, chinese celery and bamboo shoots together . Add seasoning and mex well.将中虾 、 芹菜、竹笋加入调味拌匀.互联网He's been a fixture in the Austin Tex - Mex establishment since well before I was born.早在我出生之前,他就是奥斯汀得-墨餐馆业的长青树.互联网收起实用场景例句释义实用场

编译 MEX 函数或引擎应用程序 - MATLAB mex - MathWorks 中国

编译 MEX 函数或引擎应用程序 - MATLAB mex

- MathWorks 中国

Skip to content

Toggle Main Navigation

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

帮助中心帮助中心

搜索帮助中心

帮助中心

MathWorks

搜索 MathWorks

MathWorks

帮助中心

Close Mobile Search

Open Mobile Search

Off-Canvas Navigation Menu Toggle

文档主页

MATLAB

外部语言接口将 C++ 与 MATLAB 结合使用从 MATLAB 调用 C/C++ MEX 函数编写可从 MATLAB(MEX 文件)调用的 C++ 函数MATLAB

外部语言接口将 C 与 MATLAB 结合使用编写可从 MATLAB(MEX 文件)调用的 C 函数

mex

本页内容

语法描述示例使用交错式复矩阵 API 编译 MEX 文件编译 C MEX 文件显示详细编译和故障排除信息追加编译器选项覆盖默认编译器开关选项从多个源文件编译 MEX 文件使用通配符组合源文件预览编译命令创建并链接到单独的目标文件指定包含文件的路径指定库文件的路径定义编译器指令编译引擎应用程序选择 C 编译器链接命令选项输入参量filenamesapioption1 ... optionNlang提示版本历史记录支持 Microsoft Visual Studio 编译工具在 Apple 芯片平台上支持 NAG Fortran支持 MinGW-w64 8.1 版编译器支持 Intel oneAPI 编译器从 MEX 选项文件中删除了 -std=c++11 标志Windows 平台上的 UTF-8 系统编码MEX 文件宏 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID 已删除支持 Microsoft Visual Studio 2022 编译器在 Linux 平台上支持 gcc 版本 5.x 和更高版本macOS 和 Linux 平台上的 UTF-8 系统编码编译器支持已更改编译器支持已更改C MEX 和引擎应用程序: 定义的 true、false 和 bool支持 Intel Parallel Studio XE 2019 编译器使用交错式复矩阵 API 编译 Fortran MEX 文件编译器支持已更改从 C++ 更轻松地访问 MATLAB 数据和对象使用交错式复矩阵 API 编译 C MEX 文件特定于发行版的编译选项指定 Boost 库的版本编译器支持已更改编译器支持已更改默认情况下,MEX 使用 64 位 API 进行编译编译器支持已更改嵌入在 MEX 文件中的版本编译器支持已更改MEX 命令不接受 .bat 或 .sh 编译器选项文件编译器支持已更改另请参阅

文档示例函数App视频问答

试用版

试用版

产品更新

产品更新

资源

文档示例函数App视频问答

Main Content

mex编译 MEX 函数或引擎应用程序全页折叠

语法mex filenamesmex filenames api option1 ... optionNmex -client engine filenamesmex -client engine filenames api option1 ... optionNmex -setup [lang]mex -setup -client engine [lang]说明

示例mex filenames 编译一个或多个用 MATLAB Data API for C++ 编写的 C++ 源文件并将其链接到当前文件夹中的二进制 MEX 文件中。有关编写这些应用程序的信息,请参阅 编写可从 MATLAB(MEX 文件)调用的 C++ 函数。如果基于C Matrix API或Fortran Matrix API编写 MEX 文件,则 mex filenames 使用 -R2017b api 编译一个或多个 C、C++ 或 Fortran 源文件。在以后的 MATLAB® 版本中,默认的 api 选项将改用交错式复矩阵 API (-R2018a)。MathWorks 建议您新建 MEX 文件或更新现有 MEX 文件,以使用交错式复矩阵 API。也可以使用 MX_HAS_INTERLEAVED_COMPLEX 宏在各个版本的 MATLAB 中应用预期行为。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。有关使用 C、C++ 和 Fortran 应用程序的信息,请参阅将 MATLAB 与外部编程语言和系统集成。

示例mex filenames api option1 ... optionN 使用指定的 api 和可选的 option1 ... optionN 参量进行编译。option1 ... optionN 参量补充或覆盖默认 mex 编译配置。

mex -client engine filenames 将使用 MATLAB Data API for C++ 编写的 C++ 源文件编译到独立的 MATLAB 引擎应用程序中。有关详细信息,请参阅Elements of a C++ Engine Program。如果基于MATLAB Engine API for C、C MAT 文件 API、Fortran Engine API 或 Fortran MAT 文件 API 编写应用程序,则 mex -client engine filenames 使用 -R2017b api 编译独立应用程序。在以后的 MATLAB 版本中,默认的 api 选项将改用交错式复矩阵 API (-R2018a)。MathWorks 建议您创建新引擎应用程序并更新现有应用程序,以使用交错式复矩阵 API。

mex -client engine filenames api option1 ... optionN 使用指定的 api 和可选的 option1 ... optionN 参量编译引擎应用程序。

mex -setup [lang] 显示用于编译 MEX 文件的给定语言的默认编译器的有关信息。MATLAB 为每种支持的语言定义一个默认编译器。如果某种给定语言有多个编译器,请使用 lang 选项更改该语言的默认编译器。有关详细信息,请参阅更改默认编译器和选择 C++ 编译器。

mex -setup -client engine [lang] 选择用来编译引擎应用程序的编译器。

示例全部折叠使用交错式复矩阵 API 编译 MEX 文件从 matlabroot/extern/examples 文件夹复制源代码示例。copyfile(fullfile(matlabroot,'extern','examples','mex','explore.c'),'.','f')

编译该 MEX 文件。输出显示特定于您的编译器的信息。mex -R2018a explore.c

通过传递复矩阵来测试函数。a = [1 3 5];

b = [5 3 1];

A = complex(a,b);

explore(A)------------------------------------------------

Name: prhs[0]

Dimensions: 1x3

Class Name: double

------------------------------------------------

(1,1) = 1 + 5i

(1,2) = 3 + 3i

(1,3) = 5 + 1i编译 C MEX 文件打开实时脚本将单个 C 程序 yprime.c 编译为一个 MEX 文件。 从 matlabroot/extern/examples 文件夹复制源代码示例。copyfile(fullfile(matlabroot,"extern","examples","mex","yprime.c"),".","f")编译该 MEX 文件。输出显示特定于您的编译器的信息。mex yprime.cBuilding with 'Microsoft Visual C++ 2019 (C)'.

MEX completed successfully.

测试。T=1;

Y=1:4;

yprime(T,Y)ans = 1×4

2.0000 8.9685 4.0000 -1.0947

显示详细编译和故障排除信息

要显示编译和链接命令及其他用于故障排除的信息,请使用详尽模式。输出显示特定于您的平台和编译器的信息。

mex -v -compatibleArrayDims yprime.c追加编译器选项

使用环境变量指定要传递给编译器的附加选项。

确定变量名称:要使用 MinGW®、macOS 和 Linux® 编译器编译 C++ 代码,请使用 CXXFLAGS。要使用 MinGW、macOS 和 Linux 编译器编译 C 代码,请使用 CFLAGS。对于 Microsoft® Visual Studio® 编译器,请使用 COMPFLAGS。使用 Visual Studio 编译 MEX 文件时,请指定 C++17 标准。mex COMPFLAGS='$COMPFLAGS -std=c++17' yprime.c有关在不同平台上使用字符串分隔符的详细信息,请参阅覆盖默认编译器开关选项。覆盖默认编译器开关选项

通过将值 -Wall 追加到现有编译器标志来编译 yprime.c 对应的 MEX 文件。因为该值包括空格字符,所以您必须界定该字符串;界定所用字符取决于平台。

在 MATLAB 提示符处,使用单引号 (')。mex -v COMPFLAGS='$COMPFLAGS -Wall' yprime.c对于基于 gcc/g++ 的 MinGW-w64 编译器,请使用 Linux 编译器标识符。选择以下命令之一:mex -v CXXFLAGS='$CXXFLAGS -Wall' yprime.c % C++ compiler

mex -v CFLAGS='$CFLAGS -Wall' yprime.c % C compiler

在 Windows® 命令提示符处,使用双引号 (")。mex -v COMPFLAGS="$COMPFLAGS -Wall" yprime.c在 macOS 和 Linux 上的 Shell 命令行处,使用单引号 (')。mex -v CFLAGS='$CFLAGS -Wall' yprime.c从多个源文件编译 MEX 文件打开脚本

MEX 文件示例 fulltosparse 由两个 Fortran 源文件 loadsparse.F 和 fulltosparse.F 组成。要运行此示例,您需要在您的系统上安装支持的 Fortran 编译器。

将源文件复制到当前文件夹。copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')

copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')

编译 fulltosparse MEX 文件。MEX 文件名为 fulltosparse,这是因为 fulltosparse.F 是命令行上的第一个文件。输出包含特定于您的编译器的信息。mex -largeArrayDims fulltosparse.F loadsparse.F

Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.

MEX completed successfully.

测试。full = eye(5);

spar = fulltosparse(full)

spar =

1,1 1

2,2 1

3,3 1

4,4 1

5,5 1

使用通配符组合源文件

将当前文件夹中的所有 C 源文件组合为 MEX 文件 mymex。使用 -output 选项控制 MEX 文件的名称。

mex -output mymex *.c

预览编译命令

在不执行命令的情况下,使用 -n 选项可预览编译命令详细信息。输出显示特定于您的平台和编译器的信息。

mex -n yprime.c创建并链接到单独的目标文件打开脚本

您可以链接到与源 MEX 文件分开编译的目标文件。

MEX 文件示例 fulltosparse 由两个 Fortran 源文件组成。fulltosparse 文件是入口例程(包含 mexFunction 子例程),loadsparse 包含计算例程。要运行此示例,您需要在您的系统上安装支持的 Fortran 编译器。将计算子例程复制到当前文件夹。copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')

编译子例程,并将目标文件放在单独的文件夹 c:\objfiles 中。mkdir c:\objfiles

mex -largeArrayDims -c -outdir c:\objfiles loadsparse.F

Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.

MEX completed successfully.

将入口子例程复制到当前文件夹。编译 loadsparse 目标文件并与之链接。copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')

mex -largeArrayDims fulltosparse.F c:\objfiles\loadsparse.obj

Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'.

MEX completed successfully.

指定包含文件的路径

要指定包含 MATLAB LAPACK 库子例程以处理复数例程的路径,请使用 -I 选项。要使用这些子例程,您的 MEX 文件必须访问头文件 fort.h。

将 matrixDivideComplex.c 示例复制到当前文件夹。 copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivideComplex.c'),'.','f')

通过串联 '-I' 和 fort.h 文件的路径来创建 -I 参量。ipath = ['-I' fullfile(matlabroot,'extern','examples','refbook')];为 LAPACK 库文件和文件 fort.c 的名称和路径创建变量,这些变量包含复数处理例程。 lapacklib = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwlapack.lib');

fortfile = fullfile(matlabroot,'extern','examples','refbook','fort.c');

编译该 MEX 文件。mex('-v','-R2017b',ipath,'matrixDivideComplex.c',fortfile,lapacklib)

指定库文件的路径

通过使用 -L 和 -l 选项指定 libmwlapack.lib 库,在 Windows 平台上编辑 matrixDivide.c 示例。库文件位于文件夹 matlabroot\extern\lib\arch\microsoft 中。

将 matrixDivide.c 示例复制到当前文件夹。copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivide.c'),'.','f')

捕获此语句显示的 matlabroot 的值,以便在 mex 命令中使用。matlabrootans =

C:\Program Files\MATLAB\R2014a捕获此语句显示的 arch 的值,以便在 mex 命令中使用。computer('arch')ans =

win64要编译 MEX 文件,请将 matlabroot 和 arch 的值复制到 mex 命令中。mex '-LC:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft' ...

-llibmwlapack matrixDivide.c

您必须使用 ' 字符,这是因为路径中的 \Program Files 包括一个空格。定义编译器指令打开脚本

mxcreatecharmatrixfromstr.c 示例使用 #define 符号 SPACE_PADDING 来确定要在矩阵的字符向量之间使用的字符。要设置该值,请使用 -D 选项编译 MEX 文件。

将示例复制到当前文件夹。copyfile(fullfile(matlabroot,'extern','examples','mx','mxcreatecharmatrixfromstr.c'),'.','f')

将 SPACE_PADDING 指令设置为在值之间添加空格。mex mxcreatecharmatrixfromstr.c -DSPACE_PADDING

Building with 'MinGW64 Compiler C '.

MEX completed successfully.

编译引擎应用程序将 engwindemo.c 引擎示例复制到当前文件夹。copyfile(fullfile(matlabroot,'extern','examples','eng_mat','engwindemo.c'),'.','f')使用 -client engine 语法编译独立的 MATLAB 引擎应用程序。mex -client engine engwindemo.c如果您在 Windows 平台上运行,则必须先将 MATLAB 注册为 COM 服务器。有关详细信息,请参阅Register MATLAB as a COM Server。运行示例。!engwindemo选择 C 编译器mex -setupMATLAB 根据支持和兼容的编译器列表显示适用于您的版本和系统的选项。链接命令选项要向 mex 链接命令添加选项,请使用 LINKFLAGS 命令行选项。例如,要指定在 Windows 上编译 mymex.c 时可执行文件的环境,请键入:mex -v LINKFLAGS='$LINKFLAGS /subsystem:windows' mymex.c输入参数全部折叠filenames — 一个或多个文件名

字符串 | 字符向量

一个或多个文件名,包括名称和文件扩展名,指定为字符串或字符向量。如果文件不在当前文件夹中,请指定该文件的完整路径。

文件名可以是以下项的任意组合:

C、C++ 或 Fortran 源文件。Simulink® S-Function 文件。目标文件。静态库文件。filenames 必须包含库文件的完全限定路径。该库必须使用 mex 当前使用的同一编译器进行编译。要链接动态库,请使用 -llibname 选项。

filenames 中列出的第一个源代码文件是该二进制 MEX 文件或引擎应用程序的名称。要覆盖此命名约定,请使用 -output 选项。

使用 MATLAB 编辑器编写源代码。如果您使用集成开发环境 (IDE),例如 Microsoft Visual Studio 或 Xcode,则您可以使用 mex 命令或遵循Custom Build with MEX Script Options中的规范。

MATLAB 基于 filenames 参量的语言自动选择一个编译器(如果已安装)。

api — 特定于版本的 API -R2017b (默认) | -R2018a | -largeArrayDims | -compatibleArrayDims

使用特定于版本的 C Matrix API 或 Fortran Matrix API 进行链接,指定为下表中的值之一。请勿将这些选项组合使用。

不要将此选项用于使用 MATLAB Data API for C++ 的 MEX 文件或引擎应用程序。

API描述-R2017b(默认值)通过以下方式进行编译:

分离式复矩阵 API,包含 MATLAB R2017b 及更早版本中的 C 和 Fortran 矩阵 API 功能。大型数组处理 API,用于处理元素数目超过 231–1 个的数组。将图形对象的句柄视为 object,而不是 double。

在以后的 MATLAB 版本中,默认的 api 选项将改用交错式复矩阵 API (-R2018a)。MathWorks 建议您创建新应用程序并更新现有应用程序,以使用交错式复矩阵 API。也可以使用 MX_HAS_INTERLEAVED_COMPLEX 宏在各个版本的 MATLAB 中应用预期行为。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。-R2018a通过以下方式进行编译:

使用交错式复矩阵 API,它包含类型化数据访问函数。有关详细信息,请参阅Upgrade MEX Files to Use Interleaved Complex API。大型数组处理 API将图形对象的句柄视为 object,而不是 double。

要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。 -largeArrayDims通过以下方式进行编译:分离式复矩阵 API大型数组处理 API将图形对象的句柄视为 object,而不是 double。要将句柄视为 double,请将此选项与 -DMEX_DOUBLE_HANDLE 结合使用。-compatibleArrayDims通过以下方式进行编译:分离式复矩阵 API使用版本 7.2 数组处理 API,它将数组限制为不超过 231–1 个元素将图形对象的句柄视为 object,而不是 double。要将句柄视为 double,请将此选项与 -DMEX_DOUBLE_HANDLE 结合使用。当调用 LAPACK 或 BLAS 函数 时,不要使用 -compatibleArrayDims 选项。仅适用于 C MEX S-Function 的默认选项。

示例: mex -R2018a explore.c

option1 ... optionN — 可选编译选项 与有效选项标志对应的字符串或字符向量

可选的编译选项,指定为下表中的值之一。除非另有说明,否则选项可在任意平台上按任意顺序出现。

选项描述@rspfile使用 Windows RSP 文件。RSP 文件是包含命令行选项的文本文件。不支持非 ASCII 字符。-c仅编译目标文件。不要编译二进制 MEX 文件。-client engine编译引擎应用程序。-Dsymbolname

-Dsymbolname=symbolvalue

-Usymbolname-D 选项定义 C 预处理器宏。等效于源文件中的以下符号: #define symbolname#define symbolname symbolvalue-U 选项删除 C 预处理器宏 symbolname 的任何初始定义。-D 选项的反选。不要在 D 或 U 与 symbolname 之间添加空格。不要在 = 符号前后添加空格。示例:定义编译器指令-f filepath覆盖默认编译器选择。filepath 是配置文件的名称和完整路径,指定为字符串或字符向量。有关使用非默认编译器的信息,请参阅更改默认编译器。不要使用 -f 选项来编译引擎应用程序。改用 -client engine 选项。-g添加符号信息并禁用对编译的目标代码的优化。用于调试。-h[elp]显示 mex 的帮助。在操作系统提示符环境下使用。-Ipathname将 pathname 添加到文件夹列表以搜索 #include 文件。不要在 I 和 pathname 之间添加空格。示例:指定包含文件的路径-llibname

-Llibfolder -llibname与 libfolder(可选)中的动态对象库 libname 的链接。MATLAB 将 libname 扩展为:libname.lib 或 liblibname.lib - Windows 系统liblibname.dylib - macOS 系统liblibname.so - Linux 系统如有使用,-L 选项必须位于 -l 选项之前。在 Linux 或 macOS 系统上使用 -L 选项时,您还必须设置运行时库路径,如Set Run-Time Library Path中所述。使用 L 的小写字母指定 -l 选项。不要在 l 和 libname 之间或 L 和 libfolder 之间添加空格。要链接静态库,请使用 filenames 输入参量。示例:指定库文件的路径-n显示但不执行命令,将由 mex 执行。示例:预览编译命令-O优化目标代码。使用此选项执行优化编译。默认情况下,优化处于启用状态。使用大写字母 O 指定此选项。-outdir dirname将所有输出文件放在文件夹 dirname 中。例如:创建并链接到单独的目标文件-output mexname 覆盖默认的 MEX 文件命名机制。创建具有相应 MEX 文件扩展名且名称为 mexname 的二进制 MEX 文件。示例:使用通配符组合源文件-setup lang更改用于编译 lang 语言 MEX 文件或引擎应用程序的默认编译器。当您使用此选项时,mex 将忽略所有其他命令行选项。-silent隐藏信息性消息。在您指定 -silent 时,mex 命令仍会报告错误和警告。-Usymbolname删除 C 预处理器宏 symbolname 的任何初始定义。(-D 选项的反选。) 不要在 U 和 symbolname 之间添加空格。-v在详尽模式下编译。在考虑所有命令行参量后显示内部变量的值。显示每个编译步骤和链接步骤的详细计算信息。用于排查编译器设置问题。示例:显示详细编译和故障排除信息varname=varvalue向环境变量 varname 追加值。在考虑所有命令行参量后处理此选项。示例:

追加编译器选项覆盖默认编译器开关选项

lang — 语言 C (默认) | C++ | CPP | Fortran

语言,指定为下列不区分大小写的值之一。

CC 编译器,包括 C++。C++ 或 CPPC++ 编译器FortranFortran 编译器

提示您可以从以下位置运行 mex:MATLAB 命令行窗口Windows 系统提示符macOS 终端Linux Shell要在 MATLAB 之外使用命令行,请访问由 [matlabroot '/bin'](UNIX 平台上)或 [matlabroot '\bin\win64'](Windows 平台上)所指定文件夹中的 mex 程序。MEX 文件具有与平台相关的扩展名。您可以将适用于不同平台的多个二进制 MEX 文件放在同一个文件夹中。要标识 MEX 文件扩展名,请使用 mexext 函数。

MEX 文件与平台相关的扩展名平台二进制 MEX 文件扩展名Windowsmexw64Linuxmexa64 采用 Apple 芯片的 macOSmexmaca64 采用 Intel® 的 macOSmexmaci64

注意使用 Rosetta 2 的 Apple 芯片平台不支持使用 Intel 在 macOS 上编译的 MEX 文件。

要使用 mex 为独立 MATLAB 引擎应用程序编译可执行文件,请使用 -client engine 选项。mex 命令不支持包含双引号 (") 字符的文件夹名称。版本历史记录在 R2006a 之前推出全部展开R2023b: 支持 Microsoft Visual Studio 编译工具MATLAB 支持适用于 C 和 C++ 的 Build Tools for Visual Studio 2022 和 2019,以便在 Windows 平台上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB Engine 和 MAT 文件应用程序。有关支持的编译器的最新列表,请参阅支持和兼容的编译器。R2023b: 在 Apple 芯片平台上支持 NAG FortranMATLAB 支持 NAG® Fortran 编译器,以便在 Apple 芯片平台上编译 Fortran MEX 文件和独立的 MATLAB Engine 和 MAT 文件应用程序。R2023a: 支持 MinGW-w64 8.1 版编译器MATLAB 在 Windows 平台上支持 MinGW-w64 8.1 版编译器。有关安装说明,请参阅 MATLAB Answers™ 文章常见问题解答:如何安装 MinGW 编译器?R2023a: 支持 Intel oneAPI 编译器MATLAB 支持以下 Intel oneAPI 编译器:oneAPI 2023 编译器与 Microsoft Visual Studio 2019 和 2022。oneAPI 2022 编译器与 Visual Studio 2017、2019 和 2022。在 Windows 和 macOS 平台上用于编译:C 和 C++ 接口C、C++ 和 Fortran MEX 文件C、C++ 和 Fortran 独立 MATLAB 引擎应用程序C 和 Fortran 独立 MATLAB MAT 文件应用程序R2023a: 从 MEX 选项文件中删除了 -std=c++11 标志用 MinGW 和 Linux 编译器编译 C++ 代码时,MEX 选项文件不再包含 CXXFLAGS 标志 -std=c++11。现在,macOS 编译器的 MEX 选项文件包含 CXXFLAGS 选项 -std=c++14。要继续使用 -std=c++11 选项编译 MEX 文件 myFunc,请键入:mex myFunc.cpp 'CXXFLAGS=$CXXFLAGS -std=c++11'

R2022a: Windows 平台上的 UTF-8 系统编码MATLAB 现在使用 UTF-8 作为其在 Windows 上的系统编码,从而在所有支持的平台上都可采用 Unicode®。从 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。R2022a: MEX 文件宏 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID 已删除对于在 R2021b 及更早版本中编译的 MEX 文件,MATLAB 提供了 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID 宏,用于处理将复数传递给 Fortran BLAS 和 LAPACK 函数时平台相关的调用语法差异。从 R2022a 开始,不再需要在不同平台上使用不同调用语法,因此处理这种差异的宏已被删除。要更新您的代码,请使用 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID 替换类似如下的语句:/* Call BLAS function */

/* Use a different call syntax on different platforms */

#ifdef FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID

zdotu(&result, &nElements, zinA, &incx, zinB, &incy);

#else

result = zdotu(&nElements, zinA, &incx, zinB, &incy);

#endif替换为:/* Call BLAS function */

zdotu(&result, &nElements, zinA, &incx, zinB, &incy);R2021b: 支持 Microsoft Visual Studio 2022 编译器从 R2021b Update 3 开始,MATLAB 支持 Microsoft Visual Studio 2022,用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。R2020b: 在 Linux 平台上支持 gcc 版本 5.x 和更高版本MATLAB 支持 gcc 版本 5.x 和更高版本,用于在 Linux 上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。如果您使用 4.0 或更早版本,则 MATLAB 会显示警告。R2020a: macOS 和 Linux 平台上的 UTF-8 系统编码在 macOS 和 Linux 平台上,MATLAB 使用 UTF-8 作为其系统编码。在 macOS 或 Linux 上编译的 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。在 Windows 平台上,如果在 Windows 区域设置中启用使用 Unicode UTF-8 提供全球语言支持选项,则 MATLAB 使用 UTF-8 作为其系统编码。R2020a: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2020a 中所示的支持的编译器。支持编译器平台已添加Intel Parallel Studio XE 2020 for C, C++, and FortranWindows已添加Intel Parallel Studio XE 2020 for FortranmacOS已添加Apple Xcode 11.xmacOS已停用 Intel Parallel Studio XE 2017WindowsmacOSR2019b: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2019b 中所示的支持的编译器。支持编译器平台已添加Microsoft Visual Studio 2019 for C and C++ Windows 已停用 Intel Parallel Studio XE 2015 and XE 2016 for Fortran Windows macOSR2019b: C MEX 和引擎应用程序: 定义的 true、false 和 bool对于在 Windows 和 Linux 平台上使用 C99 兼容编译器编译 MEX 文件和独立 MATLAB 引擎及 MAT 文件应用程序,true、false 和 bool 的定义已更改。MATLAB 根据 IEEE 标准 1003.1 的定义,使用 定义这些值:The header shall define the following macros:

bool

Expands to _Bool.

true

Expands to the integer constant 1.

false

Expands to the integer constant 0.

_bool_true_false_are_defined

Expands to the integer constant 1.在 R2019a 及更早版本中,MATLAB 在 Windows 和 Linux 平台上将这些值定义为:true - #defined 为 1false - #defined 为 0bool - typedef 为 unsigned char对于 macOS 平台,没有变化。R2019a: 支持 Intel Parallel Studio XE 2019 编译器下表列出了 MATLAB 中新增的 Intel 编译器支持,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。支持编译器平台已添加Intel Parallel Studio XE 2019 with Microsoft Visual Studio 2015 and 2017 for C, C++, and Fortran Windows 新增Intel Parallel Studio XE 2019 for FortranmacOSR2018b: 使用交错式复矩阵 API 编译 Fortran MEX 文件Fortran Matrix API 支持复数的交错存储表示。有关详细信息,请参阅 MATLAB Support for Interleaved Complex API in MEX Functions如果您编译 Fortran MEX 函数,则您应该查看Do I Need to Upgrade My MEX Files to Use Interleaved Complex API?注意要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。R2018b: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2018b 中所示的支持的编译器。支持编译器平台已添加https://mingw-w64.org 提供的 MinGW-w64 版本 6.3.0 编译器 Windows 新增Intel Parallel Studio XE 2018 with Microsoft Visual Studio 2015 and 2017 for C, C++, and Fortran Windows 新增Intel Parallel Studio XE 2018 for FortranmacOS已停用Microsoft Visual C++® 2013 Professional Windows R2018a: 从 C++ 更轻松地访问 MATLAB 数据和对象使用现代 C++ 设计模式、扩展数据类型支持和 MATLAB 写入时复制语义编写 MEX 函数,以更快地处理大型数据数组。有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数。如果您不需要在 R2017b 及更早版本中工作的 MEX 文件,并且您熟悉现代 C++,请考虑使用新的 C++ MEX API 和 MATLAB Data API for C++。如果您更喜欢使用 C 语言,请继续使用 C MEX API 和 C 矩阵 API。R2018a: 使用交错式复矩阵 API 编译 C MEX 文件MATLAB 使用复数的交错存储表示。交错式复矩阵指这种实部和虚部一起存储的表示形式。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。如果您编译 C MEX 函数、C/C++ MEX S-Function 或独立的 MATLAB 引擎和 MAT 文件应用程序,请查看Do I Need to Upgrade My MEX Files to Use Interleaved Complex API?。MATLAB 不支持对 Fortran 函数使用交错式复矩阵 API。此更改不影响 MATLAB 语言。您可以继续使用复数中所述的功能,而无需修改您的函数和脚本。R2018a: 特定于发行版的编译选项mex 命令有新的编译选项 -R2017b 和 -R2018a,它们与版本特定的 C Matrix API 相链接。-R2017b - 默认选项。此选项等效于以下命令:mex mymex.c -largeArrayDims -DMEX_DOUBLE_HANDLE-R2018a - 使用交错式复矩阵 API,它包含类型化数据访问函数。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。R2018a: 指定 Boost 库的版本虽然 MATLAB 使用 Boost 库版本 1.56.0 进行编译,但从 R2018a 开始,您可以在 MEX 函数中指定任何 Boost 库版本。R2018a: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2018a 中所示的支持的编译器。支持编译器平台新增GNU® gcc 和 gfortran 版本 6.x。推荐使用 6.3 版。 Linux 已停用GNU gcc 和 gfortran 版本 4.9.x Linux 已停用Apple Xcode 7.xmacOS已停用Intel C++ Composer XE 2013 Windows 已停用Intel Visual Fortran Composer XE 2013 Windows 已停用Intel Fortran Composer XE 2013macOS将逐步停用Visual C++ 2013 Professional Windows R2017b: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2017b 中所示的支持的编译器。支持编译器平台新增Microsoft Visual C++ 2017 Professional、Community 和 Enterprise 版Windows新增Microsoft Visual C++ 2015 和 2013 Community 和 Enterprise 版,并继续支持 Professional 版Windows新增在 Visual Studio 2017 上安装的 Microsoft Visual Studio 2015 (v140) 工具集Windows已添加https://mingw-w64.org 提供的 MinGW-w64 版本 5.3.0 编译器Windows已添加Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2017 for C, C++, and FortranWindows已停用TDM-GCC 提供的 MinGW-w64 版本 4.9.2 编译器Windows已停用Microsoft Visual C++ 2012 ProfessionalWindows已停用Microsoft Windows SDK 7.1Windows将逐步停用在以后的版本中将停止对 GNU gcc 和 gfortran 版本 4.9 的支持,届时将支持新版本。LinuxR2017a: 默认情况下,MEX 使用 64 位 API 进行编译mex 函数默认使用大型数组处理 API(-largeArrayDims 选项)。最佳做法是更新您的 MEX 源代码以使用此库并重新编译 MEX 文件。有关说明,请参阅Upgrade MEX Files to Use Interleaved Complex API。您可以运行现有的二进制 MEX 文件,而无需重新编译。有关详细信息,请参阅MEX 版本兼容性。如果您在不使用 mex 命令选项 -largeArrayDims 或 -compatibleArrayDims 的情况下编译 MEX 文件,请查看下表以避免依赖 R2017a 中已更改的默认行为。有关使用 -compatibleArrayDims 选项编译 MEX 文件的结果的信息,请参阅What If I Do Not Upgrade?C MEX S-Function 的默认编译模式仍为 -compatibleArrayDims。下表显示您在重新编译 MEX 文件或 S-Function 时必须对 mex 命令进行的更改。源代码mex 命令 - R2016b 及更早版本mex 命令 - R2017a 及更高版本MEX 文件 C/C++ 或 Fortran 源代码使用 32 位 APImex myMex.cmex myMex.c -compatibleArrayDimsmex myMex.c -compatibleArrayDims无变化。MEX 文件 C/C++ 或 Fortran 源代码使用 64 位 APImex myMex.c -largeArrayDims使用:

mex myMex.c或者继续使用:

mex myMex.c -largeArrayDimsS-Function C/C++ 源代码使用 32 位 APImex sfun.c无变化。mex sfun.c -compatibleArrayDims无变化。S-Function C/C++ 源代码使用 64 位 APImex sfun.c -largeArrayDims无变化。S-Function Fortran 源代码使用 32 位 APImex sfun.Fmex sfun.F -compatibleArrayDimsS-Function Fortran 源代码使用 64 位 APImex sfun.F -largeArrayDims无变化。R2017a: 编译器支持已更改MATLAB 增加了对下表中编译器的支持,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。支持编译器平台新增Intel Parallel Studio XE 2017Windows新增Intel Parallel Studio XE 2017 for FortranmacOS新增Xcode 8.x,从 R2016b 开始提供macOSR2016b: 嵌入在 MEX 文件中的版本mex 命令在使用 MATLAB R2016b 及更高版本编译的 MEX 文件中嵌入 MEX 版本号。此版本号标识 MEX 函数在运行时期望链接的矩阵 API 的版本。如果不使用 mex 命令,则必须更新用于编译 MEX 文件的命令。有关详细信息,请参阅在不使用 mex 命令的情况下编译 MEX 文件。R2016b: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2016b 中所示的支持的编译器。支持编译器平台新增GNU gcc 和 gfortran 版本 4.9Linux已停用GNU gcc 和 gfortran 版本 4.7Linux新增Intel Parallel Studio XE 2016 for Fortran

Intel Parallel Studio XE 2015 for FortranMac OS X已停用 Microsoft Visual Studio 2010 ProfessionalWindows将逐步停用Visual C++ 2012 Professional

Apple Xcode 6.2Windows

Mac OS XR2016a: MEX 命令不接受 .bat 或 .sh 编译器选项文件mex 命令 -f 选项不接受文件扩展名为 .bat 或 .sh 的参量。不要使用 -f 选项来指定编译器,而是使用更改默认编译器中所述的工作流。您可以使用 mex 命令选项修改编译器编译选项。例如,使用 -L 和 -I 选项在您的系统上定位库。使用 varname=varvalue 选项将选项传递给编译器。R2016a: 编译器支持已更改下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2016a 中所示的支持的编译器。支持编译器平台新增Intel Parallel Studio XE 2016

Intel Parallel Studio XE 2015

Intel C++ Composer XE 2013 with Microsoft Visual Studio 2013Windows新增Apple Xcode 7.xMac OS X已停用 Microsoft Visual Studio 2008 Professional Edition

Intel C++ Composer XE 2011 with Microsoft Visual Studio 2010

Intel Visual Fortran Composer XE 2011 with Microsoft Visual Studio 2010 Windows将逐步停用Microsoft Visual Studio 2010 Professional Edition

Microsoft Windows SDK 7.1Windows另请参阅dbmex | mexext | computer | system主题MEX 函数源代码示例表支持和兼容的编译器更改默认编译器MATLAB Data API for C++编译 C++ MEX 程序C Matrix APIFortran Matrix API编译 C MEX 函数Upgrade MEX Files to Use Interleaved Complex API升级 MEX 文件以使用 64 位 APIUpgrade MEX Files to Use Graphics Objects

×

打开示例

您曾对此示例进行过修改。是否要打开带有您的编辑的示例?

否,请覆盖修改版本 是

×

MATLAB 命令

您点击的链接对应于以下 MATLAB 命令:

请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。

关闭

×

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Switzerland (English)

Switzerland (Deutsch)

Switzerland (Français)

中国 (简体中文)

中国 (English)

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

América Latina (Español)

Canada (English)

United States (English)

Europe

Belgium (English)

Denmark (English)

Deutschland (Deutsch)

España (Español)

Finland (English)

France (Français)

Ireland (English)

Italia (Italiano)

Luxembourg (English)

Netherlands (English)

Norway (English)

Österreich (Deutsch)

Portugal (English)

Sweden (English)

Switzerland

Deutsch

English

Français

United Kingdom (English)

Asia Pacific

Australia (English)

India (English)

New Zealand (English)

中国

简体中文

English

日本 (日本語)

한국 (한국어)

Contact your local office

试用版

试用版

产品更新

产品更新

中国

信任中心

商标

隐私权政策

防盗版

应用状态

京公网安备 11010502045942号   京ICP备12052471号

© 1994-2024 The MathWorks, Inc.

×

WeChat

关注我们