是否有可能将MATLAB代码转换为C代码?
71(30天)
显示旧的评论
我想把我的MATLAB代码C代码用于MATLAB以外的项目。
接受的答案
MathWorks支金宝app持团队
2011年6月29日
释放R2011a,我们有一个产品MATLAB®编码器™产生独立的从MATLAB®C和c++代码。生成的源代码是便携式和可读性。MATLAB编码器支持核心金宝appMATLAB语言特性的一个子集,包括程序控制结构、函数和矩阵运算。它可以生成墨西哥人功能,让你加速计算密集型的MATLAB代码和验证生成的代码的行为。
关于MATLAB编码器的更多信息,请参阅:
答案(1)
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;
}