求满足给定数值limit的最小调和级数n的值

本文介绍了一种使用C++编程语言解决级调和级数超越方程的算法,通过用户输入限制值,计算并输出满足条件的最小n值及对应的级数总和,特别强调了数据类型转换的重要性。

求满足下面式子的最小n值,其中 limit有键盘输入

1+1/2+1/3+…+1/n>limit,输出需要计算的项数以及计算到该级调和级数的值。
例如:输入:2
输出:4 2.20833

#include <iostream>
using namespace std;
int main()
{
   int a;
   int i=1;
   int flag=1;
   float sum=0;
   
   cin>>a;
   while(flag==1)
   {
       sum=sum+(1.0/i);
       i++;
       if(sum>a)
       flag=0;
       else
        flag=1;
   }
   
   cout<<i-1<<" "<<sum<<endl;
   return 0;
}


第一次在while循环中在while,写成了1/i,导致程序异常,主要是因为int类型的自动转型所导致的数据缺少,后面改为1.0/i就解决了这一问题

import numpy as np import matplotlib.pyplot as plt # 第一部分:p-级数(p=2)的收敛分析 def p_series_convergence(): """分析p=2时交错p级数的收敛情况""" print("1. 设置参数:") p = 2 k = np.arange(1, 1001) # 从1到1000的整数(避免n=0) print(f" p = {p}") print(f" k = [0, 1, 2, ..., 1000] (共1001个整数)") print("\n2. 计算级数的每一项:") print(r" aₙ = (-1)^{n+1}/n^p") p_series = [(-1)**(n+1) / n**p for n in k] print("\n3. 计算部分和和误差:") print(r" G_k = ∑_{n=1}^k (-1)^{n+1}/n^p") cumulative_sum = np.cumsum(p_series) # 部分和 G_k # 精确极限 π²/12 infinite_sum = np.pi**2 / 12 print(f" 精确 G = π²/12 ≈ {infinite_sum:.6f}") # 计算绝对误差 errors = np.abs(cumulative_sum - infinite_sum) final_error = errors[-1] print(f" 当k=1000时,误差 |G_{1000} - G| = {final_error:.6f}") # 4. 绘图 plt.figure(figsize=(12, 6)) plt.plot(k, cumulative_sum, 'b-', label='Finite Sum') plt.axhline(y=infinite_sum, color='r', linestyle='--', label=f'Infinite Sum ($\pi^2/12 \\approx {infinite_sum:.6f}$)') plt.xlabel('Number of Terms (k)') plt.ylabel('Partial Sum') plt.title('Convergence of Alternating p-Series ($p=2$)') plt.legend() plt.grid(True) plt.savefig('p_series_convergence.png', dpi=300) print("\n4. 已生成收敛图: p_series_convergence.png") print(" a) 蓝线: k对应的部分和G_k") print(" b) 红线: 极限π²/12") return final_error # 第二部分:交错级数 ∑_{n=2}^∞ (-1)^{n+1}·ln(n)/n 的分析 def log_series_convergence(): """分析交错级数 ∑(-1)^{n+1}·ln(n)/n 的收敛情况""" n_vals = np.arange(2, 1001) # n从2开始到1000 print("\n5. 计算交错级数的每一项:") print(r" cₙ = (-1)^{n+1}·ln(n)/n") c_series = [(-1)**(n+1) * np.log(n) / n for n in n_vals] # 计算部分和 cumulative_sum = np.cumsum(c_series) approx_infinite_sum = cumulative_sum[-1] print("\n6. 绘图和分析敛散性:") plt.figure(figsize=(12, 6)) plt.plot(n_vals, cumulative_sum, 'g-', label='Finite Sum') plt.axhline(y=approx_infinite_sum, color='m', linestyle='--', label=f'Approximated Infinite Sum ($\\approx {approx_infinite_sum:.6f}$)') plt.xlabel('Number of Terms (n)') plt.ylabel('Partial Sum') plt.title('Convergence of Alternating Series $\\sum_{n=2}^{\\infty} (-1)^{n+1}\\frac{\\ln n}{n}$') plt.legend() plt.grid(True) plt.savefig('log_series_convergence.png', dpi=300) print(" 已生成收敛图: log_series_convergence.png") print(" a) 绿线: n对应的部分和") print(" b) 品红线: k=1000时的部分和(作为无穷和的近似)") # 敛散性分析 abs_terms = np.log(n_vals) / n_vals derivative = (1 - np.log(n_vals)) / n_vals**2 decreasing = np.all(derivative < 0) # 从n=2开始检查单调性 limit_zero = abs_terms[-1] < 1e-3 print("\n 敛散性讨论:") print(f" - 绝对项 |cₙ| = ln(n)/n 单调递减: {'是' if decreasing else '否'}") print(f" - lim n→∞ ln(n)/n = 0: {'是' if limit_zero else '否'}") if decreasing and limit_zero: print(" → 根据交错级数判别法,该级数收敛") else: print(" → 级数发散或需要进一步验证") # 检查绝对收敛性 abs_sum = np.sum(np.abs(c_series)) if abs_sum > 1e6: # 简单判断发散 print(f" - 绝对级数和: {abs_sum:.2f}(发散)") print(" → 级数条件收敛(非绝对收敛)") else: print(" → 级数绝对收敛") return approx_infinite_sum # 主程序 if __name__ == "__main__": print("="*80) print("p级数收敛分析 (p=2)") print("="*80) p_series_convergence() print("\n" + "="*80) print("交错级数 ∑_{n=2}^∞ (-1)^{n+1}·ln(n)/n 分析") print("="*80) log_series_convergence() 不需要定义这么多函数,简化一下代码
最新发布
11-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值