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

写在前面:

题目如下:

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

最后的运行结果如下:

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

写在后面:

相关推荐
过期动态几秒前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
Sharewinfo_BJ2 分钟前
Power BI 5月重磅更新:8大新功能全面提升数据分析效率
大数据·人工智能·数据分析
weixin_468466853 分钟前
机器学习与深度学习新手区分指南
人工智能·python·深度学习·机器学习·计算机视觉·ai·机器视觉
AI算法沐枫4 分钟前
基于YOLO26深度学习的【果园荔枝检测与计数】系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
开发语言·人工智能·python·深度学习·qt·学习·机器学习
希望永不加班4 分钟前
SpringBoot 服务注册与发现:Nacos/Consul/Eureka
java·spring boot·eureka·consul·java-consul
仙俊红6 分钟前
spring有多个对象时如何注入
java·后端·spring
玖玥拾7 分钟前
C/C++ 基础笔记(一)
c语言·c++·笔记
专注VB编程开发20年8 分钟前
B4A (Basic4Android) Process_Globals(应用全局)和 Globals(类中公用变量)
java·开发语言
weixin_468466859 分钟前
大语言模型原理新手入门指南
人工智能·python·算法·语言模型·自然语言处理·transformer·注意力机制
小a杰.9 分钟前
PTO ISA 指令架构 - PTO虚拟指令集架构解析
java·开发语言·架构