代数系统实例枚举

1 设计任务

代数系统的性质证明及类别判定

2 设计内容

编写matlab代码,该代码需实现的功能模块包括:

① 验证上述集合及运算是否满足代数系统的封闭性要求,若满足,存储该代数系统,否则输出原因,并提示重新输入;

② 验证该系统是否满足代数系统的9个性质(结合律、交换律、单位元素、零元素、逆元素、分配律、吸收律、上下界、互补律),并输出结果;

③ 根据系统所满足的性质,判定该系统的类别(是否属于“半群、群、循环群、环、域、格、布尔代数”),并输出结果;

程序设计

图1 程序流程图

4 数据输入输出

4.1 输入

用户需要输入代数系统的元素集合、运算符个数以及定义在该集合上的运算。

  • 元素集合:用户需提供代数系统的基础元素集合,这应该是一个一维数组,例如:[0,1,2,4]。
  • 运算符个数:用户应指明在该元素集合上定义的运算符的总数。例如,如果用户打算定义1个运算符,则输入数字1。
  • 运算:对于集合上的每个运算,用户需要使用MATLAB的匿名函数[3]语法来定义。MATLAB的匿名函数是通过@(输入参数)这样的格式来创建的。例如,若要定义一个计算输入值平方的匿名函数f,应这样输入:@(a,b)(a+b).^2

4.2 输出

完成以上输入后,程序将按照既定流程图进行代数系统的验证,并执行以下三个模块:

  • 代数系统九大性质的验证:深入探究用户定义的运算符是否满足代数系统的九大性质,并记录相应的验证数据和结果。
  • 代数系统类别的判断:根据系统的性质,确定其所属的具体类别。
  • 结果展示:最后,程序将通过弹窗以直观、优雅的方式展示验证结果和系统类别。

5 测试

将其代入代码中测试:

可以发现系统提示不满足封闭性并要求重新输入,满足我们的预期要求。

接着我们再输入已经证明好的域的例子

定义一个集合为A={0,1,2,.....,10}定义两种运算

已证这两种运算与集合A构成域。将其代入代码中测试:

系统通过弹窗[6]的形式分别输出了运算1,运算2满足的性质最终通过性质判定出该代数系统是一个域,与我们事先证明的结果一致。

6 程序代码

主程序:

clc
clear
%% -----模块一:接收输入,并判断是否满足封闭性要求
%% 请输入集合:[1,2,3]
%% 请输入运算符个数:1
%% 请输入运算运算:@(x,y)abs(x)
fengbi=0;%当输入不满足封闭性时,要求重新输入
while fengbi==0 
    A=input('请输入集合:');
    numyun=input('请输入运算符个数:');
    f=cell(1,numyun);
    if isempty(A)
        fengbi=0;
        disp("集合为空,请重新输入")
    elseif isempty(numyun)||numyun<=0
        fengbi=0;
        disp("运算符个数为空,请重新输入")
    else
        for i=1:numyun
            f{i}=input('请输入运算运算:');
            fengbi=fengbixing(A,f{i});
            if fengbi==0
                disp("不满足封闭性请重新输入")
                break
            end
        end
    end
end
%% 判断是否为代数系统【1.集合A非空;2.运算符至少1个以上;3.满足封闭性】
disp('*******************     1     ********************        ');%################
disp('***************************************        ');%################
if (~isempty(A))&&(~isempty(f))&&(fengbi==1)
    disp("非空"); 
    disp("运算符至少1个以上");
    disp("满足封闭性");
    disp("这是一个代数系统")
end

%% -----模块二:9个性质的判断
%(1)为判断结果的存储建立空间
jiehe=zeros(1,numyun);
jiaohuan=zeros(1,numyun);
danwei=zeros(1,numyun);
lingyuansu=zeros(1,numyun);
m=size(A,2);
niyuansu=zeros(2,m);
fenpeilv=zeros(1,numyun);
xishoulv=zeros(1,numyun);
shangxiajie=zeros(1,numyun);
buyuansu=zeros(2,m);

%(2)调用子程序,进行性质的判断
disp('******************     2   *********************        ');%################
disp('***************************************        ');%################
Niyuansu=[ ];
for i=1:numyun
    disp(['运算',num2str(i),'情况如下:']);%################
    jiehe(i)=jiehexing(A,f{i});%结合律判断
    jiaohuan(i)=jiaohuanxing(A,f{i});%交换律判断
    danwei(i)=danweixing(A,f{i});%单位元素确定
    lingyuansu(i)=lingyuansuxing(A,f{i});%零元素确定
    niyuansu=niyuansuxing(A,f{i},danwei(i));%逆元素确定
    Niyuansu{1,i}=niyuansu;
end
disp('*******************     3     ********************        ');%################
disp('***************************************        ');%################
if  numyun==2
fenpeilv=fenpeilvxing(A,f{1},f{2});%分配律判断
xishoulv=xishoulvxing(A,f{1},f{2});%吸收律判断   
shangxiajie=shangxiajiexing(A,f{1},f{2});%上下界判断
buyuansu=buyuansuxing(A,f{1},f{2},danwei);%补元素确定
end
%% -----模块三:弹窗输出
disp('******************* 4 ******************** '); %################
disp('*************************************** '); %################
k = yujuxingzhi(jiehe, jiaohuan, danwei, lingyuansu, Niyuansu, numyun);
kk = yujuxingzhi2(fenpeilv, xishoulv, shangxiajie, buyuansu);
for i = 1:numyun
    disp(['运算', num2str(i), '情况如下:']); %################
    for j = 1:size(k, 1)-1
       l{i,j}=k{j, i};
    end
  r{i,1}=k{j+1 ,i};
   msgbox(['运算', num2str(i),l{i,:},r{i,1}]);
end
if numyun==2
    disp(['运算', num2str(1),num2str(2), '情况如下:']); %################
    for j = 1:size(kk, 1)-1
        x{i,j}=kk{j, i};
    end
    y{i,1}=kk{j+1 ,i};
%         msgbox([kk{j, 2},'运算', num2str(1),num2str(2)]);
msgbox(['运算', num2str(1),num2str(2),x{i,:},y{i,1}]);
    end

Leixing=Leibie(numyun, fengbi, jiehe, jiaohuan, danwei, lingyuansu, Niyuansu, fenpeilv, xishoulv, shangxiajie, buyuansu, A,f);
disp(['运算', num2str(1),num2str(2), '情况如下:']); %################
if isempty(Leixing)
    Leixing{1,1}="该代数系统不是半群、群、环、域、格、布尔代数中的任何一种";
end

        msgbox(Leixing);
    

分程序见上传资料(数量有点小多就不逐一上传了) 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺尸的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值