我最开始是从python入手的,它本身就是一种面对对象编程的语言。matlab也支持这样的编程方式或是方法。再一次提一下 我的好友叮叮当当,他一直坚持不断地学习开拓自己的知识面和相关技能,很优秀的一个人。这个matlab面对对象编程的方法也是他介绍引入我们实验室的。
既然他都这么竭力推荐了,咱也不要辜负别人好心是不是,这里先记录一下我借助他给的class类编写的一个简单的功能(无穷大平面算电流产生的磁场)。之后我会逐一从简单例子入手,慢慢更新matlab的class编写功能。这篇博客算是做个预告,也督促自己学习面对对象的编程方式。
classdef sc_B < handle
properties
p %几何图形输入
angles
f %保角变换对象
I %电流大小
Iw %电流w坐标
Iz %电流z坐标
ow %待求解点w坐标
oz %待求解点z坐标
L %z平面上下板之间的距离
Lmax %z上板坐标
Lmin %z下板坐标
L1 %电流到下板距离
L2 %电流到上板距离
Bz %z平面中待求解点磁密
Bw %w平面中待求解点磁密
end
methods
function obj = sc_B(p,angles,I,Iw)
obj.p=p;
obj.angles=angles;
obj.I=I;
obj.Iw=Iw;
obj.f=crrectmap(obj.p,obj.angles); %矩形z变换域
end
function cal_sc(obj)
%计算变换后的坐标
obj.Iz=obj.f.evalinv(obj.Iw);
obj.oz=obj.f.evalinv(obj.ow);
obj.L=max(imag(obj.f.prevertex))-min(imag(obj.f.prevertex));
obj.Lmax=max(imag(obj.f.prevertex));
obj.Lmin=min(imag(obj.f.prevertex));
obj.L1=imag(obj.Iz)-obj.Lmin;
obj.L2=abs(imag(obj.Iz)-obj.Lmax);
end
% function cal_Bz(obj)
% obj.Bz=0;
% mu0=4*pi*1e-7;
% for n=-1:1 %镜像法
% %毕奥萨伐定律
% obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-obj.Iz+n*obj.L*1i).^2).*(obj.oz-obj.Iz+n*obj.L*1i)*1i;
% end
% % for n=2:3 %镜像法
% % n=2;
% % 毕奥萨伐定律
% % obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-obj.Iz+n*obj.L*1i).^2).*(obj.oz-obj.Iz+n*obj.L*1i)*1i;
% % end
% end %镜像法在电流不位于中点时失效,需要重新编写
function cal_Bz(obj)
obj.Bz=0;
mu0=4*pi*1e-7;
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-obj.Iz).^2).*(obj.oz-obj.Iz)*1i;
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-obj.Iz+2*obj.L1*1i).^2).*(obj.oz-obj.Iz+2*obj.L1*1i)*1i;
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-obj.Iz-2*obj.L2*1i).^2).*(obj.oz-obj.Iz-2*obj.L2*1i)*1i;
Item1=obj.Iz+2*obj.L2*1i; %起始对称电流坐标 上板
for n=1:10
if mod(n,2)==1
dis=abs(imag(Item1)-obj.Lmin);
Item1=Item1-2*dis*1i; %更新电流位置
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-Item1).^2).*(obj.oz-Item1)*1i;
else
dis=abs(obj.Lmax-imag(Item1));
Item1=Item1+2*dis*1i;
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-Item1).^2).*(obj.oz-Item1)*1i;
end
end
Item2=obj.Iz-2*obj.L1*1i; %起始对称电流坐标 下板
for n=1:10
if mod(n,2)==1
dis=abs(obj.Lmax-imag(Item2));
Item2=Item2+2*dis*1i;
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-Item2).^2).*(obj.oz-Item2)*1i;
else
dis=abs(imag(Item2)-obj.Lmin);
Item2=Item2-2*dis*1i; %更新电流位置
obj.Bz=obj.Bz+mu0*obj.I./(2*pi*abs(obj.oz-Item2).^2).*(obj.oz-Item2)*1i;
end
end
end
function cal_Bw(obj)
obj.cal_Bz;
obj.Bw=obj.Bz./conj(obj.f.evaldiff(obj.oz));
end
end
end