c++map的使用_怎么用Matlab画一个优美的电机效率Map?

本文介绍如何使用Matlab创建二维和三维电机效率Map。通过contour、meshgrid、contourf和surf等函数,结合数据处理和颜色调整,展示绘制过程。
摘要由CSDN通过智能技术生成

做电动车经济性仿真时,我们必须用到电机效率Map。手里没有,怎么办?凭经验定义一个Map,再画出来吧。所以今天的内容来了:怎么用Matlab画一个实用而不失优美的电机效率呢?

有人喜欢二维Map,看着直观;有人喜欢三维Map,看着带感。不急,我们一个一个来。

怎么画二维电机效率Map?

首先,要有数据。凭着多年的工程经验,很容易造出一个电机效率数据,运行下图代码。

a3d4a4f14a520fa03f2b8bd6e197ea32.png

然后,我们开始画效率的等高线,这里会用到一个关键函数contour。

[c,h]=contour(X,Y,Z,n),X、Y、Z分别表示横轴数值、纵轴数值、对应高度的数值,n用于定义等高线的数量,C用于保存等高线的数据,h是等高线的句柄。需要注意的是,X、Y、Z三个矩阵必须维度相同。

所以需要对上面的TrqEff、SpdEff做处理,让他们从向量变为矩阵,便于后面contour调用,这里会用到函数meshgrid。

[X,Y] = meshgrid(x,y),X的每一行数值都等于x的值,Y的每一列数值都等于y的值。

接着运行下图代码:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C++实现matlab的spline函数的例程。 ```C++ #include <iostream> #include <vector> #include <map> using namespace std; struct SplineCoef { double a, b, c, d; }; vector<SplineCoef> spline(vector<double>& x, vector<double>& y) { int n = x.size(); vector<double> h(n - 1), alpha(n - 1), l(n), mu(n - 1), z(n); vector<SplineCoef> coef(n - 1); for (int i = 0; i < n - 1; i++) { h[i] = x[i + 1] - x[i]; alpha[i] = 3.0 / h[i] * (y[i + 1] - y[i]) - 3.0 / h[i - 1] * (y[i] - y[i - 1]); } l[0] = 1.0; mu[0] = 0.0; z[0] = 0.0; for (int i = 1; i < n - 1; i++) { l[i] = 2.0 * (x[i + 1] - x[i - 1]) - h[i - 1] * mu[i - 1]; mu[i] = h[i] / l[i]; z[i] = (alpha[i - 1] - h[i - 1] * z[i - 1]) / l[i]; } l[n - 1] = 1.0; z[n - 1] = 0.0; coef[n - 2].c = 0.0; for (int j = n - 3; j >= 0; j--) { coef[j].c = z[j] - mu[j] * coef[j + 1].c; coef[j].b = (y[j + 1] - y[j]) / h[j] - h[j] * (coef[j + 1].c + 2.0 * coef[j].c) / 3.0; coef[j].d = (coef[j + 1].c - coef[j].c) / (3.0 * h[j]); coef[j].a = y[j]; } return coef; } double spline_eval(vector<SplineCoef>& coef, double x) { int n = coef.size(); if (x <= coef[0].a) return coef[0].a; if (x >= coef[n - 1].a) return coef[n - 1].a; int i = 0, j = n - 1; while (i < j) { int k = (i + j) / 2; if (x <= coef[k].a) j = k; else i = k + 1; } double dx = x - coef[i].a; return coef[i].a + coef[i].b * dx + coef[i].c * dx * dx + coef[i].d * dx * dx * dx; } int main() { vector<double> x = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0}; vector<double> y = {0.0, 0.8, 0.9, 0.1, -0.8, -1.0}; vector<SplineCoef> coef = spline(x, y); // 输出样条插值系数 for (int i = 0; i < coef.size(); i++) { cout << "a = " << coef[i].a << ", b = " << coef[i].b << ", c = " << coef[i].c << ", d = " << coef[i].d << endl; } // 输出样条插值结果 for (double i = 0.0; i <= 5.0; i += 0.1) { cout << "x = " << i << ", y = " << spline_eval(coef, i) << endl; } return 0; } ``` 该例程先定义了样本点的x和y坐标,然后调用spline函数得到样条插值系数,最后使用spline_eval函数得到样条插值结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值