20224103《Python程序设计入门》实验四报告

2201_75514094 2023-05-31 13:07:13


课程:《Python程序设计入门》
班级: 2241
姓名: lyt

学号:20224103
实验教师:WZQ
实验日期:2023年5月20日
必修/选修: 专选课

一、实验内容
在简单计算机的基础上突发奇想,融合复习很头疼的数学部分,加入了线性代数之中的矩阵与行列式计算以及概率论之中的数学期望与方差计算,从而达到实验应用化,更好的备考

二、实验过程与结果
1.下载引入数据库之中的numpy ,sympy, Matrix以用于线性代数与概率论的计算

 

img

img

 

 

2.编写简单部分

分别使用add,substract,multiply,divide,square公式,完成加减乘除与平方的计算

img

 

3.使用while,if,continue,break实现计算的进行与循环与退出

img

 

4.根据引入的函数,编写矩阵与期望方差部分

 

img

 

 

5.运行起来发现太麻烦了,重新编写了代码,制作了选择栏,简化了运算过程与输入过程,改为分别输入

 

img

img

 

6.附上源代码:

def add(a, b):

    return a + b

 

def substract(a, b):

    return a - b

 

def multiply(a, b):

    return a * b

 

def divide(a, b):

    return a / b

 

def square(a):

    return a ** 2

 

def calculate_mean(numbers):

    s = sum(numbers)

    n = len(numbers)

    mean = s / n

    return mean

 

def calculate_variance(numbers):

    mean = calculate_mean(numbers)

    differences = [x - mean for x in numbers]

    sq_differences = [d ** 2 for d in differences]

    variance = sum(sq_differences) / len(numbers)

    return variance

 

print("欢迎使用计算器!可以进行加、减、乘、除、平方、数学期望和方差的计算。在进行数学期望和方差计算时,请输入数字列表,以逗号分隔。")

while True:

    operation = input("请输入要执行的操作和相应的数字(如:+ 2 3)或者按 Q 退出:")

    if operation.lower() == 'q':

        break

    operation_list = operation.split()

    operator = operation_list[0]

    if operator == "+":

        result = add(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "-":

        result = substract(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "*":

        result = multiply(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "/":

        if float(operation_list[2]) == 0:

            print("除数不能为零!请重新输入")

            continue

        else:

            result = divide(float(operation_list[1]), float(operation_list[2]))

            print("计算结果为:", result)

    elif operator == "square":

        result = square(float(operation_list[1]))

        print("计算结果为:", result)

    elif operator == "mean":

        numbers = [float(x) for x in operation_list[1:]]

        result = calculate_mean(numbers)

        print("数学期望为:", result)

    elif operator == "variance":

        numbers = [float(x) for x in operation_list[1:]]

        result = calculate_variance(numbers)

        print("方差为:", result)

    else:

        print("非法的操作符,请重新输入!")

重写后:

import numpy as np

def basic_arithmetic_operation():
    print("请输入两个数字:")
    num1 = float(input("第一个数字:"))
    num2 = float(input("第二个数字:"))

    print("请选择要进行的运算符:")
    print("1.加")
    print("2.减")
    print("3.乘")
    print("4.除")

    choice = int(input("请选择您的选择(1/2/3/4): "))

    if choice == 1:
        result = num1 + num2
        print("结果为:", result)
    elif choice == 2:
        result = num1 - num2
        print("结果为:", result)
    elif choice == 3:
        result = num1 * num2
        print("结果为:", result)
    elif choice == 4:
        result = num1 / num2
        print("结果为:", result)
    else:
        print("无效的选择!")

def matrix_operation():
    print("请输入矩阵长度和宽度:")
    rows = int(input("矩阵长度:"))
    cols = int(input("矩阵宽度:"))
    print("请分别输入矩阵1中的所有元素:")
    matrix1 = np.zeros((rows, cols))
    for i in range(rows):
        for j in range(cols):
            matrix1[i][j] = float(input())
    print("请分别输入矩阵2中的所有元素:")
    matrix2 = np.zeros((rows, cols))
    for i in range(rows):
        for j in range(cols):
            matrix2[i][j] = float(input())

    print("请选择要进行的运算符:")
    print("1.加")
    print("2.减")
    print("3.乘")

    choice = int(input("请选择您的选择(1/2/3): "))

    if choice == 1:
        result = np.add(matrix1, matrix2)
        print("结果为:")
        print(result)
    elif choice == 2:
        result = np.subtract(matrix1, matrix2)
        print("结果为:")
        print(result)
    elif choice == 3:
        result = np.dot(matrix1, matrix2)
        print("结果为:")
        print(result)
    else:
        print("无效的选择!")

def determinant_calculation():
    print("请输入矩阵的长度:")
    n = int(input("长度:"))

    print("请分别输入矩阵中的所有元素:")
    matrix = np.zeros((n, n))
    for i in range(n):
        for j in range(n):
            matrix[i][j] = float(input())

    result = np.linalg.det(matrix)
    print("结果为:", result)

def mathematical_expectation_and_variance_calculation():
    print("请以空格分隔,一行输入所有数值:")
    nums = list(map(float, input().split()))

    mean = np.mean(nums)
    variance = np.var(nums)

    print("平均数为:", mean)
    print("方差为:", variance)

def calculator():
    print("欢迎使用Python计算器!")
    print("请选择您要进行的运算:")
    print("1. 基本算术运算")
    print("2. 矩阵运算")
    print("3. 行列式计算")
    print("4. 数学期望和方差的计算")

    choice = int(input("请选择您想要使用的计算法则(1/2/3/4): "))

    if choice == 1:
        basic_arithmetic_operation()
    elif choice == 2:
        matrix_operation()
    elif choice == 3:
        determinant_calculation()
    elif choice == 4:
        mathematical_expectation_and_variance_calculation()
    else:
        print("无效的选择,请重新选择!")
        calculator()

calculator()
实验视频:
 ​

三、实验过程中的问题与解决过程
1.问题:计算输入非常复杂

解决过程:重新编写编码,改变输入方式,变为分别输入,降低修改时间成本,提升使用简洁度

2.问题:缺乏选择菜单,在计算时容易造成混乱

解决过程:加入选择栏,将基本算术运算,矩阵运算,行列式计算,数学期望和方差的计算分为四个部分

四、实验四感想体会

   选择什么题材让我感觉非常奔溃,但是我还是很想做一个计算器,从最开始的计算检验器,在猜数字基础上融合简单的运算,融合在实验一与实验二,但是发现,没什么用的样子,我就在想作为一名文科生,能不能真正的用好Python,正好在复习数学,灵光一现就想到了线性代数与概率论,于是我摆脱去网上寻找小游戏的路,更坚定的修改计算器。 在这个过程之中问了很多理科同学,他们也给了我很多可靠的建议,这才让我制作选择栏与分别输入变得简单了一点点。在制作完之后成就感十足,数学复习也可以用这个了,感觉太棒了!

五、课程总结
       不得不说,王老师真的太好啦!在上了大学之后,很少有这种认真做事情的感觉,可是在实验的过程之中实现了高效。第二件坚持的事情就是英语单词打卡!给我带来了很多启发。然后就是王老师做事情的态度,非常非常非常耐心,一次次的温习与指导,以至于真的学会了计算器怎么制作!

         最后是一些反思,没有好好的用好Python的教材,讲的非常生动,之后要花时间去学好这门技术!再次谢谢老师!

 

...全文
142 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文介绍了如何利用 GitHub Copilot 辅助进行程序调试与 Bug 分析,强调 Copilot 不仅可用于代码生成,更是强大的代码分析与调试工具。文章详细阐述了 Copilot 在调试复杂问题、老旧项目维护和难以复现 Bug 场景下的优势,提出了“先分析、再修改”的步流程:分析原因→评估风险→提出方案→修改代码,并推荐结合错误日志、用户操作等信息精准提问,提升 AI 回答质量。同时展示了如何通过 Copilot 增强调试能力,如自动加日志、异常保护、生成测试数据和性能分析。最后通过游戏拾取系统的实际案例,说明如何结构化描述问题以获得有效反馈。; 适合人群:具备一定开发经验,正在参与项目调试或维护工作的程序员,尤其是面对复杂逻辑、历史代码或难复现 Bug 的 1-3 年开发者;也适合希望提升 AI 协作能力的技术人员。; 使用场景及目标:①快速定位偶发性崩溃、数据异常等问题根源;②理解无文档或结构混乱的老代码模块;③优化调试流程,借助 AI 生成诊断建议、修复方案与测试用例;④构建更具健壮性的程序,提前发现潜在缺陷。; 阅读建议:学习者应结合自身项目中的真实问题,按照文中提供的结构化提问模板实践,逐步训练与 Copilot 的协作能力,重视问题描述的完整性与准确性,避免直接要求修改代码,优先通过分析提升对系统的理解。
内容概要:本文针对高精度电流控制下的永磁同步电机(PMSM)参数辨识难题,提出一种基于粒子群优化算法(PSO)的多参数辨识模型,并在Simulink环境中完成系统级仿真实现。研究旨在克服传统控制中因电机参数(如定子电阻、交直轴电感、永磁磁链等)随温度、负载变化而失配所导致的电流控制性能下降问题。通过构建以电流跟踪误差为核心的适应度函数,利用PSO算法全局寻优能力强的特点,实现对关键电机参数的在线或离线精确辨识。文中详述了PSO算法的实现机制、参数初始化策略、收敛判据设计以及与PMSM矢量控制系统的集成方法,验证了该方案在不同运行工况下的辨识精度、收敛速度与鲁棒性,显著提升了电流环的动态响应品质与稳态控制精度。; 适合人群:具备电机驱动控制、现代控制理论及优化算法基础,熟悉MATLAB/Simulink仿真平台,从事高性能PMSM控制系统研发的研究生、高校科研人员及自动化、电力电子领域的工程师;特别适合正在开展参数自适应、智能控制算法应用等相关课题的研究者。; 使用场景及目标:①应用于高端制造装备、电动汽车驱动系统、精密伺服系统等对电流控制精度要求严苛的场合;②解决实际工程中因电机温升、老化等因素引发的参数漂移问题,提升系统长期运行稳定性;③作为智能优化算法与电机控制深度融合的教学案例,帮助理解PSO在复杂非线性系统参数辨识中的应用逻辑与实现路径。; 阅读建议:建议读者结合提供的Simulink仿真模型进行复现实验,重点剖析PSO算法模块与电机控制模型的接口设计、适应度函数的构建原则及参数敏感性分析方法,可进一步尝试引入其他先进优化算法(如GWO、HHO)进行性能对比,以深入掌握不同智能算法在工程辨识问题中的适用性与优劣。

42

社区成员

发帖
与我相关
我的任务
社区描述
技术交流
教育电商 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧