人工智能通识实践教程 课件 第5章-3 从计算到算法_第1页
人工智能通识实践教程 课件 第5章-3 从计算到算法_第2页
人工智能通识实践教程 课件 第5章-3 从计算到算法_第3页
人工智能通识实践教程 课件 第5章-3 从计算到算法_第4页
人工智能通识实践教程 课件 第5章-3 从计算到算法_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验要求(1)理解和应用条件语句(if)、循环语句(while、for)、break语句(2)通过编程实现经典的迭代算法,强化对迭代结构的理解和应用(3)理解并应用穷举法的基本原理,在具体问题中通过遍历所有可能的组合或情况找到符合条件的解。【例5-4】绩点计算。绩点(GradePointAverage,GPA)是衡量学生学习成绩的一种标准化指标。4.0分制A对应绩点4.0B对应绩点3.0C对应绩点2.0D对应绩点1.0F对应绩点0设课程1:学分3,成绩B(对应课程绩点3.0)课程2:学分4,成绩A(对应课程绩点4.0)课程3:学分2,成绩C(对应课程绩点2.0)计算GPA课程1的加权绩点:3×3.0=9.0课程2的加权绩点:4×4.0=16.0课程3的加权绩点:2×2.0=4.0总绩点=9.0+16.0+4.0=29.0总学分=3+4+2=9GPA=29.0÷9=3.22#获取课程数量num_courses=int(input("输入课程数量:"))

total_credits=0

#总学分total_points=0

#总绩点

#获取每门课程的学分和成绩foriinrange(num_courses):

print(f"\n请输入第{i+1}门课程信息:")

credits=float(input("学分:"))

#课程学分

grade=input("成绩(A,B,C,D,E):").upper()

#课程成绩,转为大写英文字母

#根据课程成绩计算课程绩点

ifgrade=='A':

grade_point=4.0

elifgrade=='B':

grade_point=3.0

elifgrade=='C':

grade_point=2.0

elifgrade=='D':

grade_point=1.0

elifgrade=='F':

grade_point=0.0

else:

print("无效成绩输入!")

grade_point=0.0

#如果输入的课程成绩无效,直接赋值为0

#计算该课程的加权绩点

total_credits+=credits

total_points+=credits*grade_point

#计算GPAgpa=total_points/total_creditsprint(f"GPA:{gpa:.2f}")实验任务从键盘输入两个整数,求它们的和、差、积、商、a和b的余数、a的b次方。输入一个用户的体重和身高,计算BMI指数,并指出其体质类型。编写一个猜数的游戏,由计算机给出一个1~100范围内被猜的整数,当用户猜了一个数后,通过比较给出“大了”、“小了”或“猜对了”提示,在猜对的情况下输出用户猜数的次数。要求最多允许用户猜8次。输出九九乘法表。迭代法迭代算法是一种通过重复计算逐步逼近解的算法,广泛应用于优化、数值计算和机器学习等领域。【例5-5】二分法求解非线性方程。非线性方程的根(或解)是指满足某个非线性方程的x值,也就是使方程f(x)=0的解,其中f(x)是一个非线性函数。二分法:通过不断缩小区间,从而逐步逼近方程解的数值计算方法。适用于求解连续函数的零点(f(x)=0)问题。f(b)f(a)

abxyy=f(x)根【例5-5】二分法求解非线性方程。(1)选择区间。首先选择一个闭区间[a,b],并且保证f(a)和f(b)的符号不同,即f(a)·f(b)<0。根据连续性理论,这意味着在区间内必定存在解能够令f(x)=0。(2)计算中点。计算区间的中点(半宽度)。(3)判断符号。如果f(m)=0,那么m就是方程的解;如果f(a)·f(m)<0,那么解在区间[a,m]内,更新右端点b=m;如果f(b)·f(m)<0,那么解在区间[m,b]内,更新左端点a=m。重复以上步骤,继续缩小区间,直到函数值足够接近0,或者区间的中点小于设定的精度阈值。deff(x):

#示例方程:x^3-x-2=0

returnx**3-x-2

#设置区间[a,b]a=1

#区间左端点b=2

#区间右端点epsilon=1e-6

#精度阈值

#检查区间端点符号是否不同iff(a)*f(b)>0:

print("f(a)和f(b)必须符号不同,否则无法继续计算")else:

#二分法求解

#二分法求解

while(b-a)/2>epsilon:#半区间长度不够小,继续迭代

#计算中点

m=(a+b)/2

f_m=f(m)

#在中点是解的情况下结束二分法

ifabs(f_m)<epsilon:

break

#根据符号选择新的区间

iff(a)*f_m<0:

b=m

else:

a=m

#返回最终的中点作为方程的解solution=(a+b)/2print(f"方程的解为:{solution}")f(b)f(a)

abxyy=f(x)根【例5-5】二分法求解非线性方程。牛顿迭代法:用于求解方程f(x)=0的数值方法,它通过从一个初始猜测点出发,逐步迭代来逼近方程的解。(1)从初始猜测值出发。牛顿法从一个初始猜测值x0开始,这个值通常是方程解的大致估计,通过不断更新当前的猜测值,逐步逼近实际的解。(2)用切线代替函数。牛顿法的核心思想是利用函数在当前猜测点的切线来近似函数本身。具体来说,假设已经知道某一点xi处的函数值f(xi)和导数f′(xi),通过该点的切线找到下一个猜测点xi+1。(3)不断更新猜测值。在每次迭代中,计算出新的点xi+1,并将其作为下一次迭代的起点。随着迭代次数的增加,新的猜测值逐渐逼近实际的解。x0xyy=f(x)根x1x2#需要求解的方程f(x)=0deff(x):

#示例方程:x^3-x-2=0

returnx**3-x-2

#f(x)的导数deff_prime(x):

#f'(x)=3*x^2-1

return3*x**2-1

x0=1.5

#初始猜测值epsilon=1e-6

#精度要求max_iter=100

#最大迭代次数(防止死循环)

x=x0

#猜测值foriter_countinrange(max_iter)

:

fx=f(x)

f_prime_x=f_prime(x)

#计算新的解

x_new=x-fx/f_prime_x

#检查是否满足精度要求

ifabs(x_new-x)<epsilonorabs(f(x_new))<epsilon:

print(f"方程的解为:{x_new}")

break

#更新x为新的近似值

x=x_newelse:

#不是通过break语句离开循环,达到最大迭代次数仍未收敛

print("牛顿法未能收敛,无法找到解.")x0xyy=f(x)根x1x2实验任务输入一个数字,分别使用穷举法、二分法和牛顿迭代法求其平方根,并对时间性能进行对比。输入两个正整数,求它们的最大公约数。输入一个整数,求它的数字根。数字根是一个通过将数字的各个位置上的数字相加,直到得到一个单一数字的过程。简单来说,就是将一个正整数的所有位数相加,然后重复这个过程,直到结果是个位数为止。例如,数字9876的数字根为39+8+7+6=303+0=3穷举法穷举法是一种通过列举所有可能的解并逐一进行验证的算法,适用于解空间较小或没有明显规律可依赖的场景。它的实现简单直观,通过遍历所有解来确保不会漏掉任何一个可能的解,但效率较低,特别是解空间较大时,可能导致高昂的计算成本。穷举法适用于小规模问题、验证性问题或组合优化问题的简化版。在解空间有限的情况下,穷举法能够确保找到最优解或所有符合要求的解,但是其时间复杂度较高,通常为指数级别。【例5-7】取小球方案。一个不透明的袋子中装有若干个红、橙、黄、绿、蓝5种颜色的小球,每次随意摸出3个小球,输出3个小球颜色都不一样的所有可能的方案。要点避免相同的组合出现(“红、黄、蓝”和“黄、红、蓝”是相同的组合/)方法:使用嵌套循环时,在每层循环中限制下一个小球颜色的选择范围,确保每次选出的颜色是不同的,并且每次都能生成唯一的组合。#定义5种颜色colors=['红','橙','黄','绿','蓝']

#使用3层嵌套循环生成所有3种不同颜色的组合foriinrange(len(colors)):

#第1层循环,选择第1种颜色

forjinrange(i+1,len(colors)):

#第2层循环,选择第2种颜色

forkinrange(j+1,len(colors)):

#第3层循环,选择第3种颜色

#输出每个符合条件的组合

print(colors[i],colors[j],colors[k])红橙黄红橙绿红橙蓝红黄绿红黄蓝红绿蓝橙黄绿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论