Mathematica中如何绘制模块内定义的函数二维图像
SS拓扑谐振电路效率Mathematica绘图代码修正
原代码问题排查
原代码存在以下可导致运行失败或结果错误的问题:
- 变量赋值顺序错误:
C1、C2的计算语句写在L1、L2赋值之前,计算时会调用未定义的电感值 - 缺失参数定义:效率表达式中用到的负载电阻
RL未赋值 - 语法笔误:
C22为C2^2的书写错误,M [d]2为M[d]^2的书写错误;互感M的定义语法不符合Mathematica局部函数规则,易造成全局变量污染 - 互感计算的参数未做局部隔离,易和全局变量产生冲突
修正后可运行代码
Eff[d_, f_] := Module[ {C1, C2, L1, L2, R1, R2, Rs, Ro, a, b, w, mu, RL, M, eff, fr, Vi, N1, N2}, (* 基础固定参数赋值 *) L1 = L2 = 14*10^-6; fr = 270*10^3; Ro = R1 = R2 = Rs = 0.2; RL = 10; (* 负载电阻测试值,可根据实际需求修改 *) a = b = 0.5; mu = 4*Pi*10^-7; Vi = 100; N1 = N2 = 100; (* 角频率与补偿电容计算,如需固定谐振点电容可将w替换为2*Pi*fr *) w = 2*Pi*f; C1 = 1/(L1*w^2); C2 = 1/(L2*w^2); (* 局部定义同轴圆形线圈互感计算函数 *) M[dist_] := Module[{k = Sqrt[(4*a*b)/((a + b)^2 + dist^2)]}, N1*N2*mu*Sqrt[a*b]*2/k*((1 - k^2/2)*EllipticK[k^2] - EllipticE[k^2]) ]; (* 修正笔误后的效率表达式 *) eff = (C2^2*M[d]^2*Ro*w^4)/( R1 + Rs + C2*(-2*L2 + C2*(R2 + RL)^2)*(R1 + Rs)*w^2 + C2^2*(M[d]^2*(R2 + RL) + L2^2*(R1 + Rs))*w^4 ) ] (* 绘制线圈间距0.1m时,100kHz~100MHz区间的效率随频率变化曲线 *) Plot[Eff[0.1, f], {f, 100*10^3, 100*10^6}, PlotRange -> All, AxesLabel -> {"频率f/Hz", "传输效率"}, PlotStyle -> Thick]
运行说明
直接在Mathematica中运行上述代码即可生成对应二维效率曲线,如需调整线圈参数、负载值、扫频范围,直接修改对应位置的赋值即可。如果需要固定谐振补偿电容为270kHz谐振点的定值,将C1、C2计算式中的w替换为2*Pi*fr即可。
内容的提问来源于stack exchange,提问作者Mr Vee
相关产品推荐
相关产品推荐

