是否有可能将MATLAB代码转换为C代码?

71(30天)
我想把我的MATLAB代码C代码用于MATLAB以外的项目。

接受的答案

MathWorks支金宝app持团队
释放R2011a,我们有一个产品MATLAB®编码器™产生独立的从MATLAB®C和c++代码。生成的源代码是便携式和可读性。MATLAB编码器支持核心金宝appMATLAB语言特性的一个子集,包括程序控制结构、函数和矩阵运算。它可以生成墨西哥人功能,让你加速计算密集型的MATLAB代码和验证生成的代码的行为。
关于MATLAB编码器的更多信息,请参阅:

答案(1)

Kamilu撒努斯
Kamilu撒努斯 2022年8月17日
请我怎么这c++代码转化为MATLAB代码?
# include < iostream >
# include < fstream >
# include < iomanip >
# include <复杂>
# include < cmath >
使用 名称空间 性病;
创{
公共 :
int isDG、qlim类型;
mp, nq, V0, w0 Qmax;
gen ();
};
创:gen ()
{
isDG = 0;
qlim = 0;
= 1.0;
w0 = 1.0;
Qmax = 10000000;
类型= 1;
}
负载{
公共 :
int 类型;
Pl0 Ql0,α,β,kpf kqf;
load ();
};
/ /选择α= 0和β= 0常数PQ类型的负载
负载:负载()
{
类型= 0;
Pl0 = 0;
Ql0 = 0;
/ /α= 0;
α= 2.0;
kpf = 0;
kqf = 0;
/ /β= 0;
β= 2.0;
}
复杂的< >总和(复杂的< > * x, int n)
{
int 我;
复杂的< > y;
(我= 1,< = n;我+ +)
y = y + x[我];
返回 y;
}
max ( * x, int n)
{ int 我;
y;
y = abs (x [1]);
(我= 2,< = n;我+ +)
如果 (abs (x[我])> y)
y = abs (x[我]);
返回 y;
}
int 分钟(复杂的< > * x, int n)
{ int 我;
y;
y = abs (x [1]);
int 指数= 1;
(我= 2,< = n;我+ +)
如果 (abs (x[我])< y)
{
y = abs (x[我]);
指数=我;
}
返回 指数;
}
int invshipley ( [250][250], int n)
{
int i, j, k, precision_no = 6;
(k = 1; k < = n, k + +)
{
(我= 1,< = n;我+ +)
(j = 1; < = n; j + +)
{
如果 (我k = = | | j = = k)
继续 ;
[我][j] =[我][j] -([我][k] * [k] [j]) / [k] [k];
}
(我= 1,< = n;我+ +)
{ 如果 (我= = k)
继续 ;
[我][k] =(1 *[我][k]) / [k] [k];
}
(j = 1; < = n; j + +)
{ 如果 (j = = k)
继续 ;
[k] [j] = (-1.0 * [k] [j]) / [k] [k];
}
[k] [k] = (-1.0 / [k] [k]);
}
(我= 1,< = n;我+ +)
(j = 1; < = n; j + +)
[我][j] = - 1.0 *[我][j];
返回 0;
}
int main ()
{
int i j l, from_bus to_bus, k, no_iterations, no_buses, no_lines,临时,precision_no = 4, no_PQ, no_pv, no_DG, linedata [120] [3], no_tie;
宽容、base_V base_VA, r, x, J [250] [250], delP [250], delV[250],稳索,Vmag,普洛斯,p, Qloss,小组,转换频率;
复杂的< > z, Z_base SL [120], SG[120],[120][120],宏大[120]、[120],[120],SLtotal, line_z [120], Sload;
字符串的评论;
fstream fp;
w0π= 3.141592654 w = 1.0, = 1.0;
w0 = 2 *π* 60;
创DG [120];
加载LD [120];
fp.open ( “islandip.txt” ),ios::;
如果 (fp.is_open ())
{
getline (fp、评论);
《外交政策》> > no_buses;
《外交政策》> > no_lines;
《外交政策》> >宽容;
《外交政策》> > no_iterations;
《外交政策》> > base_V;
《外交政策》> > base_VA;
《外交政策》> > no_DG;
《外交政策》> > no_tie;
getline (fp、评论);
getline (fp、评论);
Z_base = (base_V * base_V) / base_VA;
(我= 1,< = no_lines;我+ +)
{
《外交政策》> >温度;
《外交政策》> > from_bus;
《外交政策》> > to_bus;
《外交政策》> > r;
《外交政策》> > x;
复杂z = < > (r (w0/1000.0) * x);
line_z[我]= z;
[from_bus] [to_bus] = Y [from_bus] [to_bus] - Z_base / z;
[from_bus] [from_bus] = Y [from_bus] [from_bus] + Z_base / z;
[to_bus] [to_bus] = Y [to_bus] [to_bus] + Z_base / z;
[to_bus] [from_bus] = Y [from_bus] [to_bus];
linedata[我][1]= from_bus;
linedata[我][2]= to_bus;
}
getline (fp、评论);
getline (fp、评论);
(我= 1,< = no_buses;我+ +)
{
fp j > >;
《外交政策》> > r;
《外交政策》> > x;
《外交政策》> >温度;
如果 (temp = = 1)
{
LD [j] .alpha = 1.51;
LD [j]度量资产= 3.4;
}
如果 (temp = = 2)
{
LD [j] .alpha = 0.18;
LD [j]度量资产= 6.0;
}
如果 (temp = = 3)
{
LD [j] .alpha = 0.92;
LD [j]度量资产= 4.04;
}
LD [j] .Pl0 = r * 1000 / base_VA;
LD [j] .Ql0 = x * 1000 / base_VA;
}
(我= 1,< = no_buses;我+ +)
Sload + = SL[我];
getline (fp、评论);
getline (fp、评论);
(我= 1,< = no_DG;我+ +)
{
《外交政策》> >温度;
《外交政策》> > r;
DG(临时).mp = r;
《外交政策》> > x;
DG .nq = x(临时);
《外交政策》> > x;
DG .Qmax = x(临时);
DG(临时).isDG = 1;
《外交政策》> > r;
DG(临时).V0 = r;
fp > > DG .type(临时);
}
getline (fp、评论);
getline (fp、评论);
(我= 1,< = no_buses;我+ +)
getline (fp、评论);
getline (fp、评论);
(我= 2,< = (no_pv + 1);我+ +)
{
《外交政策》> > p;
《外交政策》> > Vmag;
V[我]=极地(Vmag, 0.0);
SL[我]=(复杂的< (p > 0)) / (base_VA);
}
}
其他的
{cout < < “无法打开文件\ n” ;
返回 0;
}
fp.close ();
fp.open ( “nrlfop.txt” ),ios::;
V [1] = 1.0 + 0我 ;
(我= 2,< = no_buses;我+ +)
V(我)= 1。+ 0我 ;
(k = 1; k < = no_iterations; k + +)
{
/ / Ybus
(我= 1,< = no_buses;我+ +)
(j = 1; < = no_buses; j + +)
复杂Y[我][j] = < > (0,0);
(我= 1,< = no_lines;我+ +)
{
from_bus = linedata[我][1];
to_bus = linedata[我][2];
r =实际(line_z[我]);
x =图像放大(line_z[我]);
复杂z = < > (r, w * x);
[from_bus] [to_bus] = Y [from_bus] [to_bus] - Z_base / z;
[from_bus] [from_bus] = Y [from_bus] [from_bus] + Z_base / z;
[to_bus] [to_bus] = Y [to_bus] [to_bus] + Z_base / z;
[to_bus] [from_bus] = Y [from_bus] [to_bus];
}
(我= 1,< = no_buses;我+ +)
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 1)
{
r = (1 / DG[我].mp) * (DG[我].w0-w);
x = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
}
如果 (DG[我].type = = 2)
{
x = (1 / DG[我].mp) * (DG[我].w0 + w);
r = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
}
如果 (DG[我].type = = 3)
{
a、b;
= (1 / DG[我].mp) * (DG[我].w0-w);
b = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
r = (a + b) / 2.0;
x = (b) / 2.0;
}
DG[我].qlim = 0;
如果 (x > DG[我].Qmax)
{
x = DG[我].Qmax;
DG[我].qlim = 1;
}
如果 (x < - DG[我].Qmax)
{
x = - DG[我].Qmax;
DG[我].qlim = 1;
}
SG复杂[我]= < > (r, x);
}
Sload = 0 + 0我 ;
(我= 1,< = no_buses;我+ +)
{
r = LD[我].Pl0 *(战俘(abs (V[我])、LD[我].alpha)) * (1.0 + LD[我].kpf * (w - 1.0));
x = LD[我].Ql0 *(战俘(abs (V[我])、LD[我]度量))* (1.0 + LD[我].kqf * (w - 1.0));
SL复杂[我]= < > (r, x);
Sload + = SL[我];
}
(我= 1,< = no_buses;我+ +)
(j = 1; < = no_buses; j + +)
J[我][J] = 0;
(我= 1,< = no_buses;我+ +)
{复杂< > temp = 0;
(j = 1; < = no_buses; j + +)
临时+ V = Y[我][j] * [j];
我[我]= temp;
}
(我= 1,< = no_buses;我+ +)
公司拥有[我]= (V[我]*连词(我[我]));
/ / J11
(我= 2,< = no_buses;我+ +)
(j = 2, < = no_buses; j + +)
{
如果 (我= = j)
J(张)(J - 1) = - (图像放大(宏大[我])+ abs (V[我])* abs (V[我])*图像放大(Y[我][我]));
其他的
J(张)(J - 1) = - [我](abs (V) * abs (V [j]) * abs (Y[我][j]) *罪(arg (Y[我][j]) + arg (V [j]) - arg (V(我))));
}
/ / J21
(我= 2,< = no_buses;我+ +)
(j = 2, < = no_buses; j + +)
如果 (我= = j)
J[我2 + no_buses] [J - 1] =实际(宏大[我])- abs (V[我])* abs (V[我])*实际(Y[我][我]);
其他的
J[我2 + no_buses] [J - 1] = abs (V(我))* abs (V [J]) * abs (Y[我][J]) * cos (arg (Y[我][J]) + arg (V [J]) - arg (V(我)));
/ /纺纱,
(我= 2,< = no_buses;我+ +)
(j = 2, < = no_buses; j + +)
如果 (我= = j)
{
J(张)[j2 + no_buses] =实际(宏大[我])+ abs (V[我])* abs (V[我])*实际(Y[我][我])+真实(SL[我])* LD[我].alpha;
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 2)
J(张)[j2 + no_buses] + = abs (V[我])/ DG[我].nq;
如果 (DG[我].type = = 3)
J(张)[j2 + no_buses] + = 0.5 * abs (V[我])/ DG[我].nq;
}
}
其他的
J(张)[j2 + no_buses] = abs (V[我])* abs (V [J]) * abs (Y[我][J]) * cos (arg (Y[我][J]) + arg (V [J]) - arg (V(我)));
/ / J22
(我= 2,< = no_buses;我+ +)
(j = 2, < = no_buses; j + +)
如果 (我= = j)
{
J[我2 + no_buses] [j2 + no_buses] =图像放大(宏大[我])- abs (V[我])* abs (V[我])*图像放大(Y[我][我])+ LD[我]*度量图像放大(SL[我]);
如果 (DG[我].isDG&& (DG[我].qlim = = 0))
{
如果 (DG[我].type = = 1)
J[我2 + no_buses] [j2 + no_buses] + = (1 / DG[我].nq) * abs (V[我]);
如果 (DG[我].type = = 3)
J[我2 + no_buses] [j2 + no_buses] + = (0.5 / DG[我].nq) * abs (V(我));
}
}
其他的
J[我2 + no_buses] [j2 + no_buses] = - abs (V(我))* abs (V [j]) * abs (Y[我][j]) *罪(arg (Y[我][j]) + arg (V [j]) - arg (V(我)));
/ / J13
j = 2 * no_buses - 1;
(我= 2,< = no_buses;我+ +)
{
复杂的< > temp = 0 + 0我 ;
(l = 1; l < = no_buses; l + +)
{
如果 (abs (Y[我][l]))
{
r =真正的(复杂的< > (-1.0,0)/ Y[我][l]);
临时+ = (V - V[我][l]) * (Y[我][l] / w) *(复杂的< > (1,0)+ Y[我][l] *复杂< > (r, 0)) *连词(V(我));
}
}
复杂的< > Yii = 0 + 0我 ;
int z;
(z = 1; z < = no_buses; z + +)
Yii + = Y[我][z];
如果 (abs (Yii))
{
r =真正的(复杂的< > (1.0,0)/ Yii);
temp - = V(我)* (Yii / w) *(复杂的< < >(1,0)+复杂 > (r, 0) * Yii) *连词(V(我));
}
J(张)[J] =真正的(临时)+ LD[我].Pl0 *战俘(abs (V[我])、LD[我].alpha) * LD[我].kpf;
J[我2 + no_buses] [J] = - 图像放大(临时)+ LD[我].Ql0 *战俘(abs (V[我])、LD[我]度量)* LD[我].kqf;
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 1)
J(张)[J] + = (1 / DG[我].mp);
如果 (DG[我].type = = 2)
J[我2 + no_buses] [J] - = (1 / DG[我].mp);
如果 (DG[我].type = = 3)
{
J(张)[J] + = (0.5 / DG[我].mp);
J[我2 + no_buses] [J] - = (0.5 / DG[我].mp);
}
}
}
/ / J14
j = 2 * no_buses;
(我= 2,< = no_buses;我+ +)
{
J(张)[J] = abs (V[我])* abs (V [1]) * abs (Y[我][1])* cos (arg (Y[我][1])+ arg (V [1]) - arg (V(我))); [我]/ / abs (V) * abs (Y[我][1])* cos (arg (V[我])- arg (Y[我][1]));
}
/ / J24
j = 2 * no_buses;
(我= 2,< = no_buses;我+ +)
{
J[我2 + no_buses] [J] = - abs (V(我))* abs (V [1]) * abs (Y[我][1])*罪(arg (Y[我][1])+ arg (V [1]) - arg (V(我))); [我]/ / abs (V) * abs (Y[我][1])*罪(arg (V[我])- arg (Y[我][1]));
}
/ / J31
(j = 2, < = no_buses; j + +)
J [2 * no_buses - 1] [J - 1) = - (abs (V [1]) * abs (V [j]) * abs (Y [1] [j]) *罪(arg (Y [1] [j]) + arg (V [j]) - arg (V [1])));
/ / J32
(j = 2, < = no_buses; j + +)
{
J [2 * no_buses - 1] [j2 + no_buses] = abs (V [1]) * abs (V [J]) * abs (Y [1] [J]) * cos (arg (Y [1] [J]) + arg (V [J]) - arg (V [1]));;
}
/ / J41
我= 2 * no_buses;
(j = 2, < = no_buses; j + +)
{
J[我][J - 1) = - abs (V [1]) * abs (V [j]) * abs (Y [1] [j]) * cos (arg (Y [1] [j]) + arg (V [j]) - arg (V [1]));;
}
/ / J42
我= 2 * no_buses;
(j = 2, < = no_buses; j + +)
{
J[我][j2 + no_buses] = - abs (V [1]) * abs (V [j]) * abs (Y [1] [j]) *罪(arg (Y [1] [j]) + arg (V [j]) - arg (V [1]));;
}
/ / J33 & J43
i = 1;
{
复杂的< > temp = 0 + 0我 ;
(l = 1; l < = no_buses; l + +)
{
如果 (abs (Y[我][l]))
{
r =真正的(复杂的< > (-1.0,0)/ Y[我][l]);
临时+ = (V - V[我][l]) * (Y[我][l] / w) *(复杂的< > (1,0)+ Y[我][l] *复杂< > (r, 0)) *连词(V(我));
}
}
复杂的< > Yii = 0 + 0我 ;
int z;
(z = 1; z < = no_buses; z + +)
Yii + = Y[我][z];
如果 (abs (Yii))
{
r =真正的(复杂的< > (1.0,0)/ Yii);
temp - = V(我)* (Yii / w) *(复杂的< < >(1,0)+复杂 > (r, 0) * Yii) *连词(V(我));
}
* no_buses - 1 J [2] [2 * no_buses - 1) =真正的(临时)+ LD[我].Pl0 *战俘(abs (V[我])、LD[我].alpha) * LD[我].kpf * w;
J [2 * no_buses] [2 * no_buses - 1) = - 图像放大(临时)+ LD[我].Ql0 *战俘(abs (V[我])、LD[我]度量)* LD[我].kqf * w;
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 1)
* no_buses - 1 J [2] [2 * no_buses - 1) + = (1 / DG[我].mp);
如果 (DG[我].type = = 2)
J [2 * no_buses] [2 * no_buses - 1] = (1 / DG[我].mp);
如果 (DG[我].type = = 3)
{
* no_buses - 1 J [2] [2 * no_buses - 1) + = (0.5 / DG[我].mp);
J [2 * no_buses] [2 * no_buses - 1] = (0.5 / DG[我].mp);
}
}
}
/ / J34
i = 1;
J (2 * no_buses - 1) * no_buses[2] =实际(宏大[我])+ abs (V[我])* abs (V[我])*实际(Y[我][我])+真实(SL[我])* LD[我].alpha;
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 2)
J (2 * no_buses - 1) + (2 * no_buses) = abs (V[我])/ DG[我].nq;
如果 (DG[我].type = = 3)
J (2 * no_buses - 1) + (2 * no_buses) = 0.5 * abs (V[我])/ DG[我].nq;
}
/ / J44
i = 1;
j = 1;
J [2 * no_buses] [2 * no_buses] =图像放大(宏大[我])- abs (V[我])* abs (V[我])*图像放大(Y[我][我]);
如果 (DG[我].isDG&& (DG[我].qlim = = 0))
{
如果 (DG[我].type = = 1)
J [2 * no_buses] [2 * no_buses] + = (1 / DG[我].nq) * abs (V[我]);
如果 (DG[我].type = = 3)
J [2 * no_buses] [2 * no_buses] + = (0.5 / DG[我].nq) * abs (V(我));
}
invshipley (J, 2 * no_buses);
(我= 2,< = no_buses;我+ +)
delP(张) = - (真正的(宏大[我])+ (SL[我])地(SG[我]));
(我= no_buses; < = 2 * (no_buses - 1);我+ +)
delP[我] = - (图像放大(宏大[i-no_buses + 2]) +图像放大(SL [i-no_buses + 2])——图像放大(SG (i-no_buses + 2)));
普洛斯= 0;
(我= 1,< = no_buses;我+ +)
(j = 1; < = no_buses; j + +)
普洛斯+ =实际(Y[我][j] * (V[我]*连词(V [j]) + V [j] *连词(V(我))));
普洛斯=普洛斯* 0.5;
Qloss = 0;
(我= 1,< = no_buses;我+ +)
(j = 1; < = no_buses; j + +)
Qloss - =图像放大(Y[我][j] * (V[我]*连词(V [j]) + V [j] *连词(V(我))));
Qloss = Qloss * 0.5;
i = 1;
delP (2 * no_buses - 1) = - (真正的(宏大[我])+ (SL[我])地(SG[我]));
delP (2 * no_buses) = - (图像放大(宏大[我])+图像放大(SL[我])——图像放大(SG[我]));
(我= 1,< = 2 * (no_buses);我+ +)
{
temp = 0;
(j = 1; < = 2 * (no_buses); j + +)
临时+ = J[我][J] * delP [J];
delV[我]= temp;
}
(我= 1,< = (no_buses - 1);我+ +)
{
张索= arg (V (i + 1)) + delV[我];
Vmag = abs (V (i + 1)) * (1.0 + delV [+ no_buses - 1]);
V (i + 1) =极地(Vmag稳索);
}
w + = delV (2 * no_buses - 1);
Vmag = abs (V [1]) * (1.0 + delV [2 * no_buses]);
V[1] =极地(Vmag, 0.0);
如果 (宽容> max (delP (2 * no_buses)))
打破 ;
}
《外交政策》< < std::固定的< < std::设置精度(precision_no);
如果 (k < = no_iterations)
《外交政策》< < “\ n \ nSolution聚合后” k < < < < “迭代\ n” ;
其他的
《外交政策》< < “\ n \ nSolution没有收敛\ n” ;
小组= 0;
转换频率= 0;
《外交政策》< < “DG_bus \ tPdg \ tQdg \ n” ;
(我= 1,< = no_buses;我+ +)
如果 (DG[我].isDG)
{
如果 (DG[我].type = = 1)
{
r = (1 / DG[我].mp) * (DG[我].w0-w);
x = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
}
如果 (DG[我].type = = 2)
{
x = (1 / DG[我].mp) * (DG[我].w0 + w);
r = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
}
如果 (DG[我].type = = 3)
{
a、b;
= (1 / DG[我].mp) * (DG[我].w0-w);
b = (1 / DG[我].nq) * (DG[我].V0-abs (V(我)));
r = (a + b) / 2.0;
x = (b) / 2.0;
}
DG[我].qlim = 0;
如果 (x > DG[我].Qmax)
{
x = DG[我].Qmax;
DG[我].qlim = 1;
}
如果 (x < - DG[我].Qmax)
{
x = - DG[我].Qmax;
DG[我].qlim = 1;
}
转换频率+ = x;
小组+ = r;
我《外交政策》< < < < “t \” < < < < “t \” < < x < < “\ n” ;
}
《外交政策》< < “t \ nBus_no \ \ tVoltage(级)\ t \混乱(度)\ n” ;
《外交政策》< < “____________________________________________________________ \ n” ;
(我= 1,< = no_buses;我+ +)
我《外交政策》< < < < “\ \ t” < < abs (V[我])< < “t \ t \ t \ \” < < arg (V(我))*(180 /π)< < “\ n” ;
《外交政策》< < “____________________________________________________________ \ n” ;
《外交政策》< < “\ nScal \ tSL \ n” ;
(我= 1,< = no_buses;我+ +)
《外交政策》< <宏大[我]< < “t \” < < < < SL [i] “\ n” ;
SLtotal =总和(宏大、no_buses);
普洛斯=实际(SLtotal);
《外交政策》< < " \ nPG = " < <小组* base_VA < < “W \ tQG = " < <转换频率* base_VA < < " VAR \ nTotal P损失= " < <真实(SLtotal) * base_VA < < “W \ t \ tTotal问损失= " < <图像放大(SLtotal) * base_VA < < “VAR \ n” ;
《外交政策》< < std::固定的< < std::设置精度(6);
《外交政策》< < “w = " < < w < < endl;
《外交政策》< < “\ n \ nVoltage最低at总线” < < min (V, no_buses);
fp.close ();
返回 0;
}
3评论
Kamilu撒努斯
Kamilu撒努斯 2022年8月28日
@沃尔特·罗伯逊,非常感谢

登录置评。

类别

找到更多的在MATLAB编码器帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!