离散数学上机实验报告

离散数学上机实验报告
离散数学上机实验报告

《离散数学》实验报告

学号:

班级:

实验一连结词逻辑运算

一.实验目的

实现二元合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验容

从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。要求对输入容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。

三.实验环境

使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。

四.实验过程

1.算法分析:

合取:p,q都为1的时候为1,其他为0

析取:p,q都为0的时候为0,其他为1

蕴含:p为1,q为0时为0,其他为1

等价:p,q同真同假

2.程序代码:

#include

int main()

{

int P,Q,a,b,c,d,p,q;

printf(" P的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

printf("\t%d",P);

}

printf("\n Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

printf("\t%d",Q);

}

printf("\n 非P的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(P==0)/*判断非P的值*/

p=1;

else

p=0;

printf("\t%d",p);

}

}

printf("\n 非Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(Q==1)/*判断非Q的值*/

q=0;

else

q=1;

printf("\t%d",q);

}

}

printf("\n P与Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(Q==0||P==0)/*判断P与Q的值*/

a=0;

else

a=1;

printf("\t%d",a);

}

}

printf("\n P或Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(Q==1||P==1)/*判断P或Q的值*/

b=1;

else

b=0;

printf("\t%d",b);

}

}

printf("\nP蕴含Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(P==1&&Q==0)/*判断P蕴含Q的值*/

c=0;

else

c=1;

printf("\t%d",c);

}

}

printf("\nP等价Q的值");

for(P=0;P<2;P++)

{

for(Q=0;Q<2;Q++)

{

if(P==Q)/*判断P等价Q的值*/

d=1;

else

d=0;

printf("\t%d",d);

}

}

printf("\n");

return 0;

}

3.实验数据及结果分析:

实验二关系的复合运算及逆运算

一.实验目的

熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。

二.实验容

利用矩阵求解有限集上的复合关系和逆关系。

三.实验过程

1.算法分析:

复合运算就将两个用矩阵表示的关系进行复合,即在第一个矩阵中寻找值为1的元素坐标(i ,j ),在第二个矩阵第j行寻找值为1的元素,若有,且坐标为(j ,k ),则产生的新的关系的矩阵中坐标为(i ,k )的元素值为1。

逆运算就是将用矩阵中值为1的元素坐标(i ,j)对调,产生新的关系的矩阵中坐标为(j ,i )的元素值为1。

2.程序代码:

//关系的复合运算

#include

using namespace std;

int main()

{

int a[100][100],b[100][100],c[100][100],i,j,k,n;

cout<<"请输入集合X中元素的个数:";

cin>>n;

cout<<"请输入关系矩阵Mr的格式:"<

for(i=0;i

{

for(j=0;j

cin>>a[i][j];

}

cout<<"请输入关系矩阵Ms的格式:"<

for(i=0;i

{

for(j=0;j

cin>>b[i][j];

}

for(i=0;i

{

for(j=0;j

if(a[i][j]==1)

for(k=0;k

if(b[j][k]==1)

c[i][k]=1;

}

for(i=0;i

{

for(j=0;j

if(c[i][j]!=1)

c[i][j]=0;

}

cout<

cout<<"关系矩阵Mr与Ms的复合运算结果是:"<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

return 0;

}

//关系的逆运算

#include

int main()

{

int a[100][100],b[100][100],n,i,j,index;

printf("请输入集合X中元素的个数:");

scanf("%d",&n);

printf("请输入关系矩阵Mr的格式:\n");

for(i=0;i

{

for(j=0;j

scanf("%d",&a[i][j]);

}

for(i=0;i

{

for(j=0;j

if(a[i][j]==1)

{

index=i;

i=j;

j=index;

b[i][j]=1;

}

}

for(i=0;i

{

for(j=0;j

if(b[i][j]!=1)

b[i][j]=0;

}

printf("\n关系矩阵M rc为:\n");

for(i=0;i

{

for(j=0;j

printf("%d ",b[i][j]);

printf("\n");

}

return 0;

}

3.实验数据及结果分析:

实验三关系的闭包运算

一.实验目的

熟悉关系的闭包运算,编程实现关系闭包运算算法。

二.实验容

利用矩阵求解有限集上给定关系的自反、对称和传递闭包。

三.实验过程

1.算法分析:

在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法);传递闭包则直接根据t(R)=R +。

2.程序代码:

#include

using namespace std;

void deliver(int x[100][100],int y[100][100],int n);

int main()

{

int i,j,n,R[100][100],r[100][100],s[100][100],t[100][100];

cout<<"请输入矩阵的阶:";

cin>>n;

cout<

for(i=0;i

{

for(j=0;j

cin>>R[i][j];

}

for(i=0;i

{

for(j=0;j

{

r[i][j]=R[i][j];

s[i][j]=R[i][j];

t[i][j]=R[i][j];

}

}

for(i=0;i

{

if(r[i][i]==0)

r[i][i]=1;

}

cout<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

for(i=0;i

{

for(j=0;j

{

if(s[i][j]==1||s[j][i]==1)

{

s[i][j]=1;

s[j][i]=1;

}

}

}

cout<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

deliver(t,R,n); //关于传递闭包的函数

return 0;

}

void deliver(int x[100][100],int y[100][100],int n)//关于传递闭包的函数

{

int i,j,k,m,z[100][100];

for(m=0;m

{

for(i=0;i

{

for(j=0;j

{

if(x[i][j]==1)

{

for(k=0;k

if(y[j][k]==1) //进行复合运算

z[i][k]=1;

}

}

}

for(i=0;i

{

for(j=0;j

if(z[i][j]!=1)

z[i][j]=0;

}

for(i=0;i

{

for(j=0;j

{

x[i][j]=x[i][j]+z[i][j]; //进行传递闭包运算}

}

for(i=0;i

{

for(j=0;j

if(x[i][j]!=0)

x[i][j]=1;

}

}

cout<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

}

3.实验数据及结果分析:

实验四图的矩阵表示

一.实验目的

熟悉图的矩阵表示方法——邻接矩阵、可达矩阵和关联矩阵。

二.实验容

利用邻接矩阵得到的可达矩阵来求解图的连通性质。

三.实验过程

1.算法分析:

可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。求解邻接矩阵 A1,A2,A3……A n可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。

2.程序代码:

#include

using namespace std;

void main()

{

int i,j,k,n,m,a[100][100],b[100][100],c[100][100],d[100][100];

cout<<"请输入矩阵阶数:";

cin>>n;

cout<<"请输入邻接矩阵a:"<

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

b[i][j]=a[i][j];

}

}

for(i=0;i

{

for(j=0;j

d[i][j]=0;

}

for(m=0;m

{

for(i=0;i

{

for(j=0;j

c[i][j]=0;

}

for(k=0;k

{

for(i=0;i

for(j=0;j

{

c[k][i]=c[k][i]+b[k][j]*a[j][i]; //矩阵的乘法运算}

}

for(i=0;i

{

for(j=0;j

{

b[i][j]=c[i][j];

d[i][j]=d[i][j]+b[i][j];

}

}

cout<<"m为"<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

}

for(i=0;i

{

for(j=0;j

if(d[i][j]!=0)

d[i][j]=1;

}

cout<<"可达矩阵d为:"<

for(i=0;i

{

for(j=0;j

cout<

cout<

}

}

3.实验数据及结果分析:

离散数学上机实验1

实验1 1实验内容 (1)求任意一个命题公式的真值表。 (2)利用真值表求任意一个命题公式的主范式。 (3)利用真值表进行逻辑推理。 注:(2)和(3)可在(1)的基础上完成。 2实验目的 真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。 本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。 3算法的主要思想 利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。 真值表中命题变元的取值具有如下规律:每列中0 和1 是交替出现的,且0 和1 连续出现的个数相同。n 个命题变元的每组赋值的生成算法可基于这种思想。 含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。 为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、蕴含和等价联结词分别用!、&、|、-、+来表示。 算符之间的优先关系如表1-1所示: 表1-1算符优先级

优先算法,我们采用两个工作栈。一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。算法的基本思想是: (1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素; (2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd (按字典序排列,同一个命题变元只出现一次); (3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND 栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。

离散数学实验报告

《离散数学》实验报告专业网络工程 班级 姓名 学号 授课教师 二 O 一六年十二月

目录 实验一联结词的运算 实验二根据矩阵的乘法求复合关系 实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现

实验一联结词的运算 一.实验目的 通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习与锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解与记忆命题连接词运算。 二.实验原理 (1) 非运算, 符号:? ,当P=T时 ,?P为F, 当P=F时 ,?P为T 。 (2) 合取, 符号: ∧ , 当且仅当P与Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。 (3) 析取, 符号: ∨ , 当且仅当P与Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。 (4) 异或, 符号: ▽ , 当且仅当P与Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。 (5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。 (6) 等价, 符号: ? , 当且仅当P,Q的真值不同时,命题P?Q的真值才为假;否 则,P→Q的真值为真。 三.实验内容 编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。四.算法程序 #include void main() { printf("请输入P、Q的真值\n"); int a,b; scanf("%d%d",&a,&b); int c,d; if(a==1) c=0; else c=1; if(b==1) d=0; else d=1; printf("非P、Q的结果为%d,%d\n",c,d);

数学建模实验报告

数学建模实验报告

一、实验目的 1、通过具体的题目实例,使学生理解数学建模的基本思想和方法,掌握 数学建模分析和解决的基本过程。 2、培养学生主动探索、努力进取的的学风,增强学生的应用意识和创新 能力,为今后从事科研工作打下初步的基础。 二、实验题目 (一)题目一 1、题目:电梯问题有r个人在一楼进入电梯,楼上有n层。设每个 乘客在任何一层楼出电梯的概率相同,试建立一个概率模型,求直 到电梯中的乘客下完时,电梯需停次数的数学期望。 2、问题分析 (1)由于每位乘客在任何一层楼出电梯的概率相同,且各种可能的情况众多且复杂,难于推导。所以选择采用计算机模拟的 方法,求得近似结果。 (2)通过增加试验次数,使近似解越来越接近真实情况。 3、模型建立 建立一个n*r的二维随机矩阵,该矩阵每列元素中只有一个为1,其余都为0,这代表每个乘客在对应的楼层下电梯(因为每 个乘客只会在某一层下,故没列只有一个1)。而每行中1的个数 代表在该楼层下的乘客的人数。 再建立一个有n个元素的一位数组,数组中只有0和1,其中1代表该层有人下,0代表该层没人下。 例如: 给定n=8;r=6(楼8层,乘了6个人),则建立的二维随机矩阵及与之相关的应建立的一维数组为: m = 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 c = 1 1 0 1 0 1 1 1 4、解决方法(MATLAB程序代码):

n=10;r=10;d=1000; a=0; for l=1:d m=full(sparse(randint(1,r,[1,n]),1:r,1,n,r)); c=zeros(n,1); for i=1:n for j=1:r if m(i,j)==1 c(j)=1; break; end continue; end end s=0; for x=1:n if c(x)==1 s=s+1; end continue; end a=a+s; end a/d 5、实验结果 ans = 6.5150 那么,当楼高11层,乘坐10人时,电梯需停次数的数学期望为6.5150。 (二)题目二 1、问题:某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6 千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千 克,工人20名,可获利9万元.今工厂共有原料60千克,工人 150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何 安排生产计划,即两种饮料各生产多少使获利最大.进一步讨 论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划. 2、问题分析 (1)题目中共有3个约束条件,分别来自原料量、工人数与甲饮料产量的限制。 (2)目标函数是求获利最大时的生产分配,应用MATLAB时要转换

离散数学实验报告

离散数学实验报告(实验ABC) 专业班级 学生姓名 学生学号 指导老师 完成时间

目录 第一章实验概述..................................... 错误!未定义书签。 实验目的....................................... 错误!未定义书签。 实验内容....................................... 错误!未定义书签。 实验环境....................................... 错误!未定义书签。第二章实验原理和实现过程........................... 错误!未定义书签。 实验原理....................................... 错误!未定义书签。 建立图的邻接矩阵,判断图是否连通 ............ 错误!未定义书签。 计算任意两个结点间的距离 ................... 错误!未定义书签。 对不连通的图输出其各个连通支 ................ 错误!未定义书签。 实验过程(算法描述)........................... 错误!未定义书签。 程序整体思路 ............................... 错误!未定义书签。 具体算法流程 ................................ 错误!未定义书签。第三章实验数据及结果分析........................... 错误!未定义书签。 建立图的邻接矩阵并判断图是否连通的功能测试及结果分析错误!未定义书签。 输入无向图的边 .............................. 错误!未定义书签。 建立图的连接矩阵 ............................ 错误!未定义书签。 其他功能的功能测试和结果分析................... 错误!未定义书签。 计算节点间的距离 ............................ 错误!未定义书签。 判断图的连通性 .............................. 错误!未定义书签。 输出图的连通支 .............................. 错误!未定义书签。 退出系统 .................................... 错误!未定义书签。第四章实验收获和心得体会........................... 错误!未定义书签。

(完整版)离散数学实验指导书及其答案

实验一命题逻辑公式化简 【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。 【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。 实验用例:用化简命题逻辑公式的方法设计一个 5 人表决开关电路,要求 3 人以上(含 3 人)同意则表决通过(表决开关亮)。 【实验原理和方法】 (1)写出5人表决开关电路真值表,从真值表得出5 人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。 (2)上面公式中的每一个联结词是一个开关元件,将它们定义成 C 语言中的函数。 (3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。 (4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。 参考代码: #include int vote(int a,int b,int c,int d,int e) { // 五人中任取三人的不同的取法有10种。 i f( a&&b&&c || a&&b&&d || a&&b&&e || a&&c&&d || a&&c&&e || a&&d&&e || b&&c&&d || b&&c&&e || b&&d&&e || c&&d&&e) return 1; else return 0; } void main() { i nt a,b,c,d,e; printf(" 请输入第五个人的表决值(0 或1,空格分开):"); scanf ("%d%d%d%d%d",&a,&b,&c,&d,&e); i f(vote(a,b,c,d,e)) printf(" 很好,表决通过!\n"); else printf(" 遗憾,表决没有通过!\n"); } // 注:联结词不定义成函数,否则太繁 实验二命题逻辑推理 【实验目的】加深对命题逻辑推理方法的理解。【实验内容】用命题逻辑推理的方法解决逻辑

数学建模实验报告

数学建模实验报告 实验一计算课本251页A矩阵的最大特征根和最大特征向量 1 实验目的 通过Wolfram Mathematica软件计算下列A矩阵的最大特征根和最大特征向量。 2 实验过程 本实验运用了Wolfram Mathematica软件计算,计算的代码如下:

3 实验结果分析 从代码的运行结果,可以得到最大特征根为5.07293,最大特征向量为 {{0.262281},{0.474395},{0.0544921},{0.0985336},{0.110298}},实验结果 与标准答案符合。

实验二求解食饵-捕食者模型方程的数值解 1实验目的 通过Wolfram Mathematica或MATLAB软件求解下列习题。 一个生物系统中有食饵和捕食者两种种群,设食饵的数量为x(t),捕食者为y(t),它们满足的方程组为x’(t)=(r-ay)x,y’(t)=-(d-bx)y,称该系统为食饵-捕食者模型。当r=1,d=0.5,a=0.1,b=0.02时,求满足初始条件x(0)=25,y(0)=2的方程的数值解。 2 实验过程 实验的代码如下 Wolfram Mathematica源代码: Clear[x,y] sol=NDSolve[{x'[t] (1-0.1y[t])x[t],y'[t] 0.02x[t]y[t]-0.5y[t],x[0 ] 25,y[0] 2},{x[t],y[t]},{t,0,100}] x[t_]=x[t]/.sol y[t_]=y[t]/.sol g1=Plot[x[t],{t,0,20},PlotStyle->RGBColor[1,0,0],PlotRange->{0,11 0}] g2=Plot[y[t],{t,0,20},PlotStyle->RGBColor[0,1,0],PlotRange->{0,40 }] g3=Plot[{x[t],y[t]},{t,0,20},PlotStyle→{RGBColor[1,0,0],RGBColor[ 0,1,0]},PlotRange->{0,110}] matlab源代码 function [ t,x ]=f ts=0:0.1:15; x0=[25,2]; [t,x]=ode45('shier',ts,x0); End function xdot=shier(t,x)

数学建模与数学实验报告

数学建模与数学实验报告 指导教师__郑克龙___ 成绩____________ 组员1:班级______________ 姓名______________ 学号_____________ 组员2:班级______________ 姓名______________ 学号______________ 实验1.(1)绘制函数cos(tan())y x π=的图像,将其程序及图形粘贴在此。 >> x=-pi:0.01:pi; >> y=cos(tan(pi*x)); >> plot(x,y) -4 -3 -2 -1 1 2 3 4 -1-0.8-0.6-0.4-0.200.20.40.60.8 1 (2)用surf,mesh 命令绘制曲面2 2 2z x y =+,将其程序及图形粘贴在此。(注:图形注意拖放,不要太大)(20分) >> [x,y]=meshgrid([-2:0.1:2]); >> z=2*x.^2+y.^2; >> surf(x,y,z)

-2 2 >> mesh(x,y,z) -2 2 实验2. 1、某校60名学生的一次考试成绩如下:

93 75 83 93 91 85 84 82 77 76 77 95 94 89 91 88 86 83 96 81 79 97 78 75 67 69 68 84 83 81 75 66 85 70 94 84 83 82 80 78 74 73 76 70 86 76 90 89 71 66 86 73 80 94 79 78 77 63 53 55 1)计算均值、标准差、极差、偏度、峰度,画出直方图;2)检验分布的正态性;3)若检验符合正态分布,估计正态分布的参数并检验参数. (20分) 1) >> a=[93 75 83 93 91 85 84 82 77 76 77 95 94 89 91 88 86 83 96 81 79 97 78 75 67 69 68 84 83 81 75 66 85 70 94 84 83 82 80 78 74 73 76 70 86 76 90 89 71 66 86 73 80 94 79 78 77 63 53 55]; >> pjz=mean(a) pjz = 80.1000 >> bzhc=std(a) bzhc = 9.7106 >> jc=max(a)-min(a) jc = 44 >> bar(a)

离散数学实验报告--四个实验!!!

《离散数学》 课程设计 学院计算机学院 学生姓名 学号 指导教师 评阅意见 提交日期 2011 年 11 月 25 日

引言 《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。 实验一、编程判断一个二元关系的性质(是否具有自反性、反自反性、对称性、反对称性和传递性) 一、前言引语:二元关系是离散数学中重要的内容。因为事物之间总是可以 根据需要确定相应的关系。从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。 二、数学原理:自反、对称、传递关系 设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R 就是A×B的一个合于R={(x,y)∈A×B|xRy}的子集合 设R是集合A上的二元关系: 自反关系:对任意的x∈A,都满足∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的?(?x)((x∈A)→(∈R))=1 对称关系:对任意的x,y∈A,如果∈R,那么∈R,则称关系R是对称的,或称R具有对称性,即R在A上是对称的? (?x)(?y)((x∈A)∧(y∈A)∧(∈R)→(∈R))=1 传递关系:对任意的x,y,z∈A,如果∈R且∈R,那么∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的? (?x)(?y)(?z)[(x∈A)∧(y∈A)∧(z∈A)∧((∈R)∧(∈R)→(∈R))]=1 三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数 组的运算来实现二元关系的判断。 图示:

数学建模实验报告

matlab 试验报告 姓名 学号 班级 问题:.(插值) 在某海域测得一些点(x,y)处的水深z 由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。 问题的分析和假设: 分析:本题利用插值法求出水深小于5英尺的区域,利用题中所给的数据,可以求出通过空间各点的三维曲面。随后,求出水深小于5英尺的范围。 基本假设:1表中的统计数据均真实可靠。 2矩形区域外的海域不对矩形海域造成影响。 符号规定:x ―――表示海域的横向位置 y ―――表示海域的纵向位置 z ―――表示海域的深度 建模: 1.输入插值基点数据。 2.在矩形区域(75,200)×(-50,150)作二维插值,运用三次插值法。 3.作海底曲面图。 4.作出水深小于5的海域范围,即z=5的等高线。 x y z 129 140 103.5 88 185.5 195 105 7.5 141.5 23 147 22.5 137.5 85.5 4 8 6 8 6 8 8 x y z 157.5 107.5 77 81 162 162 117.5 -6.5 -81 3 56.5 -66.5 84 -33.5 9 9 8 8 9 4 9

求解的Matlab程序代码: x=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5]; y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5]; z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9]; cx=75:0.5:200; cy=-50:0.5:150; cz=griddata(x,y,z,cx,cy','cubic'); meshz(cx,cy,cz),rotate3d xlabel('X'),ylabel('Y'),zlabel('Z') %pause figure(2),contour(cx,cy,cz,[-5 -5]);grid hold on plot(x,y,'+') xlabel('X'),ylabel('Y') 计算结果与问题分析讨论: 运行结果: Figure1:海底曲面图:

离散数学实验报告()

《离散数学》实验报告 专业网络工程 班级 姓名 学号 授课教师 二 O 一六年十二月

目录 实验一联结词的运算 实验二根据矩阵的乘法求复合关系 实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现

实验一联结词的运算 一.实验目的 通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。二.实验原理 (1) 非运算, 符号: ,当P=T时,P为F, 当P=F时,P为T 。 (2) 合取, 符号: ∧ , 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。 (3) 析取, 符号: ∨ , 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。 (4) 异或, 符号: ▽ , 当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。 (5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。 (6) 等价, 符号: ?, 当且仅当P,Q的真值不同时,命题P?Q的真值才为假;否则,P→Q的真值为真。 三.实验内容 编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。四.算法程序 #include void main() { printf("请输入P、Q的真值\n"); int a,b; scanf("%d%d",&a,&b); int c,d; if(a==1) c=0; else c=1; if(b==1) d=0;

离散数学上机实验报告

离散数学上机实验报告

————————————————————————————————作者:————————————————————————————————日期: ?

《离散数学》 实验报告 姓名: 学号: 班级: ? 实验一连结词逻辑运算 一.实验目的 实现二元合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验内容 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。 三.实验环境 使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。 四.实验过程 1.算法分析: 合取:p,q都为1的时候为1,其他为0 析取:p,q都为0的时候为0,其他为1 蕴含:p为1,q为0时为0,其他为1 等价:p,q同真同假 2.程序代码: #include intmain() { ?int P,Q,a,b,c,d,p,q; printf(" P的值"); for(P=0;P<2;P++) ?{ ?for(Q=0;Q<2;Q++) ??printf("\t%d",P); ?} printf("\n Q的值"); for(P=0;P<2;P++) ?{ ??for(Q=0;Q<2;Q++) ?printf("\t%d",Q); ?} printf("\n 非P的值"); for(P=0;P<2;P++) { ?for(Q=0;Q<2;Q++) ?{ ??if(P==0)/*判断非P的值*/ ???p=1; ??else ??p=0; ???printf("\t%d",p); ?} ?}

离散数学实验报告

大连民族学院 计算机科学与工程学院实验报告 实验题目:判断关系的性质 课程名称:离散数学 实验类型:□演示性□验证性□操作性□设计性□综合性 专业:班级:学生姓名:学号: 实验日期:年月日实验地点: 实验学时:实验成绩: 指导教师签字:年月日 实验报告正文部分(具体要求详见实验报告格式要求) 实验报告格式 [实验题目] 判断关系的性质 [实验目的] 使学生掌握利用计算机语言实现判断关系性质的基本方法。[实验环境] Microsoft Visual C++6.0 [实验原理] 实验内容与要求:对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。 通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。

图示: 程序源代码: #include #define N 4 main() { int i,j,k; int f,e,z; int M[N][N]; printf("判断R是否为自反关系、对称关系、是否可传递?\n"); printf("请输入一个4*4的矩阵。\n"); for(i=0;i

scanf("%d",&M[i][j]); for(i=0;i

离散数学上机实验报告

离 散 数 学 实 验 报 告 姓名: 学号: 班级:

离散数学实验报告 实验一真值计算 实验内容: 从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。用C语言实现。 实验源程序和运行结果如下: #include "" void main() { char p,q,t; int p1,q1; cout<<"输入p,q的真值(F或T)"<>p>>q; if(p=='F') p1=0; else p1=1; if(q=='F') q1=0; else q1=1;

.\n选择2计算对称闭包...\n选择3用R+计算传递闭包...\n选择4用washall 计算传递闭包...\n计算结束后选择0退出\n"); scanf("%d",&t); switch(t) { case 1: { for(i=0;i

for(i=0;i

离散数学实验报告

离散数学实验报告 姓名: 学号: 班级: 实验地点: 实验时间:

1 实验目的和要求 运用最小生成树思想和求最小生成树程序解决实际问题。实际问题描述如下: 八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km 。问从海岸经1号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)? 2 实验环境和工具 实验环境:Windows 7 旗舰版 工具:Dev-C++ 5.8.3 3 实验过程 3.1 算法流程图

3.2程序核心代码 //油管铺设问题Prim算法实现 #include #include using namespace std; #define MAXV 10 #define INF 32767 //INF表示∞ typedef int InfoType; typedef struct{ int no; //顶点编号 InfoType info; //顶点其他信息 } VertexType; //顶点类型 typedef struct{ //图的定义 float edges[MAXV][MAXV]; //邻接矩阵 int vexnum; //顶点数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型

/*输出邻接矩阵g*/ void DispMat(MGraph g){ int i,j; for (i=0;i

离散数学实验报告格式

《离散数学》实验报告 专业 班级 姓名 学号 授课教师 二 O 一六年十二月

目录 实验一联结词的运算 实验二根据矩阵的乘法求复合关系实验三利用算法求关系的传递闭包实验四图的可达矩阵实现

实验一联结词的运算 一.实验目的 通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。二.实验原理 (1) 非运算, 符号: ,当时,P为F, 当时,P为T 。 (2) 合取, 符号: ∧ , 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。 (3) 析取, 符号: ∨ , 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。 (4) 异或, 符号: ▽ , 当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。 (5) 蕴涵, 符号: → , 当且仅当P为为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。 (6) 等价, 符号: ?, 当且仅当的真值不同时,命题P?Q的真值才为假;否则,P→Q 的真值为真。 三.实验内容 编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。四.算法程序 <> () { ; ("请选择运算方式\n"); ("1.析取\n"); ("2.合取\n"); ("3.非\n"); ("4.蕴含\n"); ("5.等价\n");

m; (""); ( m>=1 m<=4 ) { ("请输入P Q的值\n"); (" " ); = 1; (m) { 1( ( >= 1)( < 4 ) ) { (0 0) ("P 析取Q = 0\n"); ("P 析取Q = 1\n"); ; (4) ; ("请输入P Q的值\n"); (" " ); } ; 2( ( >= 0)( < 4 ) ) { (1 1) ("P 合取Q = 1\n"); ("P 合取Q = 0\n"); ; (4) ; ("请输入P Q的值\n"); (" " ); } ; 3( ( >= 0)( < 4 ) ) { (0) ("非Q = 1\n"); ("非Q = 0\n");

离散数学关系性质的C++或C语言判断实验报告

1.【实验目的】 对称: 通过算法设计并编程实现对给定集合上的关系是否为对称关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断关系性质的方法 自反: 通过算法设计并编程实现对给定集合上的关系是否为自反关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断关系性质的方法。 2.【实验内容】 已知关系R 由关系矩阵M 给出,要求判断由M 表示的这个关系是否为对称关 系。假定R 的关系矩阵为:?????? ? ??=1234210330124321M 3.【实验要求】 C 语言编程实现 4.【算法描述】 对称: 从给定的关系矩阵来判断关系R 是否为对称是很容易的。若M (R 的关系矩阵)为对称矩阵,则R 是对称关系;若M 为反对称矩阵,则R 是反对称关系。因为R 为对称的是等价关系的必要条件,所以,本算法可以作为判等价关系算法的子程序给出。 算法实现: (1) 输入关系矩阵M (M 为n 阶方阵); (2) 判断对称性,对于i=2,3,….,n ;j=1,2,……,i-1,若存在m ij =m ji , 则R 是对称的; (3) 判断反对称性; (4) 判断既是对称的又是反对称的; (5) 判断既不是对称的又不是反对称的; (6) 输出判断结果。

自反: 从给定的关系矩阵来断判关系R是否为自反是很容易的。若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。本算法可以作为判等价关系算法的子程序给出。 算法实现 (1)输入关系矩阵M(M为n阶方阵)。 (2)判断自反性,对于i=1,2,….,n;若存在m =0,则R不是自反 ii =1,则R是自反的;否则R既不是自反关系也不是的;若存在m ii 反自反关系。 (3)输出判断结果。 源代码 #include void z(); void r(); void main() { int d; while(d) { printf("欢迎使用关系性质的判断系统\n\n 1. 对称关系的判断 2. 自反关系的判断\n\n请输入选项:"); scanf("%d",&d); switch(d){ case 1: r();break; case 2: z();break; case 0: break; }

离散数学上机实验报告

离散数学实验报告姓名: 学号: 专业:

实验一、真值运算 一、实验内容 从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值,并输出。 二、实验步骤 编写程序,将P,Q以不同真值带入,观察程序运行结果,调式程序。 三、实验代码 #include int main() { int p,q; char t; while(t) { printf("是否运算程序(y/n):\n"); scanf("%c",&t); if('y'==t) { printf("输入p,q的真值(0或1):"); scanf("%d%d",&p,&q); if((p!=1)&&(p!=0)) { printf("请重新输入p值");

scanf("%d",&q); } if((q!=1)&&(q!=0)) { printf("请重新输入q值"); scanf("%d",&q); } if(q==0&&p==0) { printf("﹁p=1\n"); printf("﹁q=1\n"); printf("p∧q=0\n"); printf("p∨q=0\n"); printf("p→q=1\n"); printf("p<->q=1\n"); } else if(p==0&&q==1) { printf("﹁p=1\n"); printf("﹁q=0\n"); printf("p∧q=0\n"); printf("p∨q=1\n"); printf("p→q=1\n");

printf("p<->q=0\n"); } else if(p==1&&q==0) { printf("﹁p=0\n"); printf("﹁q=1\n"); printf("p∧q=0\n"); printf("p∨q=1\n"); printf("p→q=0\n"); printf("p<->q=0\n"); } else if(p==1&&q==1) { printf("﹁p=0\n"); printf("﹁q=0\n"); printf("p∧q=1\n"); printf("p∨q=1\n"); printf("p→q=1\n"); printf("p<->q=1\n"); } continue; } if('n'==t)

数学建模实验报告

内江师范学院 中学数学建模 实验报告册 编制数学建模组审定牟廉明 专业: 班级:级班 学号: 姓名: 数学与信息科学学院 2016年3月 说明 1.学生在做实验之前必须要准备实验,主要包括预习与本次实验相关的理论知识,熟练与本次实验相关的软件操作,收集整理相关的实验参考资料,要求学生在做实验时能带上充足的参考资料;若准备不充分,则学生不得参加本次实验,不得书写实验报告; 2.要求学生要认真做实验,主要就是指不得迟到、早退与旷课,在做实验过程中要严格遵守实验室规章制度,认真完成实验内容,极积主动地向实验教师提问等;若学生无故旷课,则本次实验成绩不合格; 3.学生要认真工整地书写实验报告,实验报告的内容要紧扣实验的要求与目的,不得抄袭她人的实验报告; 4.实验成绩评定分为优秀、合格、不合格,实验只就是对学生的动手能力进

行考核,跟据所做的的情况酌情给分。根据实验准备、实验态度、实验报告的书写、实验报告的内容进行综合评定。

实验名称:数学规划模型(实验一)指导教师: 实验时数: 4 实验设备:安装了VC++、mathematica、matlab的计算机 实验日期:年月日实验地点: 实验目的: 掌握优化问题的建模思想与方法,熟悉优化问题的软件实现。 实验准备: 1.在开始本实验之前,请回顾教科书的相关内容; 2.需要一台准备安装Windows XP Professional操作系统与装有数学软件的计算机。 实验内容及要求 原料钢管每根17米,客户需求4米50根,6米20根,8米15根,如何下料最节省?若客户增加需求:5米10根,由于采用不同切割模式太多,会增加生产与管理成本,规定切割模式不能超过3种,如何下料最节省? 实验过程: 摘要:生活中我们常常遇到对原材料进行加工、切割、裁剪的问题,将原材料加工成所需大小的过程,称为原料下料问题。按工艺要求,确定下料方案,使用料最省,或利润最大就是典型的优化问题。以此次钢管下料问题我们采用数学中的线性规划模型、对模型进行了合理的理论证明与推导,然后借助于解决线性规划的专业软件Lingo 11、0对题目所提供的数据进行计算从而得出最优解。 关键词:钢管下料、线性规划、最优解 问题一 一、问题分析: (1)我们要分析应该怎样去切割才能满足客户的需要而且又能使得所用原料比较少; (2)我们要去确定应该怎样去切割才就是比较合理的,我们切割时要保证使用原料的较少 的前提下又能保证浪费得比较少; (3)由题意我们易得一根长为17米的原料钢管可以分别切割成如下6种情况(如表一): 表一:切割模式表 模式 4m钢管根数 6m钢管根数8m钢管根数余料/m 1 4 0 0 1 2 1 2 0 1 3 2 0 1 1 4 2 1 0 3 5 0 1 1 3 6 0 0 2 1

离散数学实验报告

《离散数学》 实验报告 题目 专业 学号 姓名 指导教师 提交日期

实验一五种连结词的逻辑运算 一.实验目的 用C语言实现两个命题变元的合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。 二.实验内容 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的的真值。要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。 三. 实验过程 1. 算法分析: 编程语言为c语言 合取/\:p,q都为1的时候为1,其他为0 析取\/:p,q都为0的时候为0,其他为1 蕴含->:p为1,q为0时为0,其他为1 等价<->:p,q同真同假 流程图

2. 程序代码: #include int main() { int p,q,i,t; printf("************************************************\n"); printf("*** ***\n"); printf(" 欢迎进入逻辑运算软件\n"); printf("*** ***\n"); printf("************************************************\n"); do{ printf("请输入p的值(0或1)"); scanf("%d",&p); if(p!=0&&p!=1) printf("输入有误"); }while(p!=0&&p!=1);

do{ printf("请输入q的值(0或1)"); scanf("%d",&q); if(q!=0&&q!=1) printf("输入有误"); }while(q!=0&&q!=1); do{ printf("请选择要进行的操作\n"); printf("1:合取\n2:析取\n3:蕴含\n4:等价\n"); scanf("%d",&i); switch(i){ case 1:{ if(p&&q) printf("合取运算:p/\q=1\n"); else printf("合取运算:p/\q=0\n"); break; } case 2:{ if(p||q) printf("析取运算:p\/q=1\n"); else printf("析取运算:p\/q=0\n"); break; } case 3:{ if(p&&!q) printf("蕴含:p->q=0\n"); else printf("蕴含:p->q=1\n"); break;} case 4:{ if((p&&q)||(!p&&!q)) printf("等价运算:p<->q=1\n"); else printf("等价运算:p<->q=0\n"); break; } }printf("是否继续运算1\\0\n"); scanf("%d",&t); }while(t); return 0; }

相关文档
最新文档