Matlab-面对对象编程-开端

我最开始是从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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值