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

写在前面:

题目如下:

求方程- 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--;
        }
    }
}

最后的运行结果如下:

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

写在后面:

相关推荐
2301_7634724619 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威26 分钟前
macOS环境安装/卸载python实践笔记
笔记·python·macos
阿猿收手吧!36 分钟前
【C++】std::promise原理与实战解析
c++
TechWJ42 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
qq_12498707531 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha1 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.1 小时前
Day06——权限认证-项目集成
java
瑶山1 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy1 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法