用python随机生成100组区间,用0.618法和抛物线法计算
3条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-03-13 20:10关注
m0_69473531 晚上好🌙🌙🌙
本答案参考ChatGPT-3.5解决方案:
- 导入必要的库
import numpy as np import random
- 生成100组随机区间
intervals = [] for _ in range(100): start = random.randint(0, 100) end = random.randint(start, 100) intervals.append((start, end))
- 定义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
- 定义抛物线法函数
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
- 定义目标函数(示例使用二次函数)
def target_func(x): return 2 * x**2 - 3 * x + 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)
希望以上解决方案对你有帮助。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 基础的图像处理问题求解答
- ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
- ¥15 idea做图书管理系统,要求如下
- ¥15 最短路径分配法——多路径分配
- ¥15 SQL server 2022安装程序(英语)无法卸载
- ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
- ¥15 求一个nao机器人跳舞的程序
- ¥15 anaconda下载后spyder内无法正常运行
- ¥20 统计PDF文件指定词语的出现的页码
- ¥50 分析一个亿级消息接收处理策略的问题?