m0_69473531 2024-03-13 20:10 采纳率: 78.6%
浏览 1
已结题

最优化方法用Python

用python随机生成100组区间,用0.618法和抛物线法计算

  • 写回答

3条回答 默认 最新

  • 关注

    m0_69473531 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    解决方案:

    1. 导入必要的库
    import numpy as np
    import random
    
    1. 生成100组随机区间
    intervals = []
    for _ in range(100):
        start = random.randint(0, 100)
        end = random.randint(start, 100)
        intervals.append((start, end))
    
    1. 定义0.618法函数
    def golden_section_search(intervals, func):
        alpha = 0.618  # 黄金分割比例
        epsilon = 0.0001  # 误差范围
    
        results = []
        for interval in intervals:
            a, b = interval
            x1 = a + (1 - alpha) * (b - a)
            x2 = a + alpha * (b - a)
    
            while abs(b - a) > epsilon:
                if func(x1) < func(x2):
                    b = x2
                    x2 = x1
                    x1 = a + (1 - alpha) * (b - a)
                else:
                    a = x1
                    x1 = x2
                    x2 = a + alpha * (b - a)
            results.append((a + b) / 2)
        
        return results
    
    1. 定义抛物线法函数
    def quadratic_interpolation(intervals, func):
        results = []
        for interval in intervals:
            a, b = interval
            x1 = a
            x2 = b
            x3 = (x1 + x2) / 2
    
            while abs((x3 - x1) / x3) >= 0.0001:
                f1 = func(x1)
                f2 = func(x2)
                f3 = func(x3)
    
                numerator = (x2**2 - x3**2) * f1 + (x3**2 - x1**2) * f2 + (x1**2 - x2**2) * f3
                denominator = (x2 - x3) * f1 + (x3 - x1) * f2 + (x1 - x2) * f3
    
                x = 1/2 * numerator / denominator
                fx = func(x)
    
                if x > x3:
                    if fx > f3:
                        x2 = x
                    else:
                        x1 = x3
                        x3 = x
                else:
                    if fx > f3:
                        x1 = x
                    else:
                        x2 = x3
                        x3 = x
            results.append(x3)
        
        return results
    
    1. 定义目标函数(示例使用二次函数)
    def target_func(x):
        return 2 * x**2 - 3 * x + 1
    
    1. 调用0.618法和抛物线法函数并打印结果
    results_0_618 = golden_section_search(intervals, target_func)
    results_parabolic = quadratic_interpolation(intervals, target_func)
    
    print("0.618法结果:", results_0_618)
    print("抛物线法结果:", results_parabolic)
    

    希望以上解决方案对你有帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 基础的图像处理问题求解答
  • ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
  • ¥15 idea做图书管理系统,要求如下
  • ¥15 最短路径分配法——多路径分配
  • ¥15 SQL server 2022安装程序(英语)无法卸载
  • ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
  • ¥15 求一个nao机器人跳舞的程序
  • ¥15 anaconda下载后spyder内无法正常运行
  • ¥20 统计PDF文件指定词语的出现的页码
  • ¥50 分析一个亿级消息接收处理策略的问题?