简单迭代法求单根的近似值

写在前面:

题目如下:

求方程- x - 1=0在1.5附近的根,要求精度为,

采用计算公式

1、x =

2、x =

3、x =

4、x =

5、x =

6、x =

C/C++ 版本:

cpp 复制代码
#include<iostream>
#include<cmath>
#include<iomanip>

#define int long long 
#define exp  1E-7

using namespace std;



double picard(double x){
//	return 1/(x*x-1);
//	return cbrt(x+1);
//	return sqrt(1+1/x);
	return x - (pow(x,3)-x-1)*1.0/(3*pow(x,2)-1);
}

void solve(){
	double x0,x1;
	int maxi;
	// 精度要求 
//	cin>>exp;
	// 迭代初值
	cin>>x1;
	// 最大迭代次数 
	cin>>maxi;
	for(int i =0;i<maxi;i++){
		x0 = x1;
		x1 = picard(x0);
		cout<<fixed<<setprecision(9)<<"x0:"<<x0<<"  "<<"x1:"<<x1<<"\n";
		if(fabs(x1-x0)<=exp){
			cout<<setprecision(8)<<"方程根为:"<<x1<<"\n";
			cout<<"迭代次数为"<<i+1<<"\n"; 
			return ;
		}
	}
	
	cout<<"迭代次数超过上限"<<"\n";
	
	
	 
	
}

signed main(){
	int _=1;
	while(_--){
		solve();
	}
	
	return 0;
}

Python版本:

python 复制代码
import math

def picard(x):
    return 1.0 / (x ** 4) + 3  # 修复:使用x**4而不是pow(x,4)

def solve():
    EXP = 1e-6
    
    try:
        # 迭代初值
        x1 = float(input("请输入迭代初值: "))
        # 最大迭代次数
        maxi = int(input("请输入最大迭代次数: "))
    except ValueError:
        print("输入格式错误,请输入数字")
        return
    
    for i in range(maxi):
        x0 = x1
        x1 = picard(x0)
        print(f"第{i+1}次迭代: x = {x1}")  # 添加调试信息
        if abs(x1 - x0) <= EXP:
            print(f"方程根为:{x1}")
            print(f"迭代次数为:{i + 1}")
            return
    
    print("迭代次数超过上限")

def main():
    _ = 1
    while _ > 0:
        solve()
        _ -= 1

if __name__ == "__main__":
    main()

Java版本:

java 复制代码
import java.util.Scanner;

public class Main {
    private static final double EXP = 1e-6;
    
    public static double picard(double x) {
        return 1.0 / Math.pow(x, 4) + 3;
    }
    
    public static void solve() {
        Scanner scanner = new Scanner(System.in);
        
        try {
            System.out.print("请输入迭代初值: ");
            double x1 = scanner.nextDouble();
            System.out.print("请输入最大迭代次数: ");
            int maxi = scanner.nextInt();
            
            for (int i = 0; i < maxi; i++) {
                double x0 = x1;
                x1 = picard(x0);
                System.out.println("第" + (i + 1) + "次迭代: x = " + x1);  // 添加调试信息
                if (Math.abs(x1 - x0) <= EXP) {
                    System.out.println("方程根为:" + x1);
                    System.out.println("迭代次数为:" + (i + 1));
                    return;
                }
            }
            
            System.out.println("迭代次数超过上限");
            
        } catch (Exception e) {
            System.out.println("输入格式错误,请输入数字");
        }
    }
    
    public static void main(String[] args) {
        int count = 1;  // 避免使用_作为变量名
        while (count > 0) {
            solve();
            count--;
        }
    }
}

最后的运行结果如下:

叮!您的技术外卖已送达,记得给个五星好评(点赞)哦~ 关注我,解锁更多"好吃不胖"的技术干货!

写在后面:

相关推荐
qq_12498707532 小时前
基于springboot的疾病预防系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·毕业设计
hyswl6662 小时前
2025年开发小程序公司推荐
python·小程序
咚咚王者2 小时前
人工智能之数据分析 numpy:第十五章 项目实践
人工智能·数据分析·numpy
火星数据-Tina2 小时前
低成本搭建体育数据中台:一套 API 如何同时支撑比分网与 App?
java·前端·websocket
lcu1112 小时前
Java 学习38:ArrayList 类
java
独行soc2 小时前
2025年渗透测试面试题总结-258(题目+回答)
网络·python·安全·web安全·渗透测试·安全狮
q***2513 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
筱顾大牛3 小时前
IDEA使用Gitee来创建远程仓库
java·gitee·intellij-idea
程序员小远3 小时前
Appium-移动端自动测试框架详解
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例