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

写在前面:

题目如下:

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

最后的运行结果如下:

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

写在后面:

相关推荐
微学AI2 小时前
内网穿透的应用-服务器日志出现异常怎么办?Python监控、钉钉告警与远程处理教程
服务器·python·钉钉
麻瓜生活睁不开眼8 小时前
Android16修改全局桌面视图边框四直角显示为弧边圆角
android·java·深度学习
dear_bi_MyOnly8 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
2601_953720829 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
丈剑走天涯10 小时前
JDK 17 正式特性
java·开发语言
圣光SG10 小时前
Java操作题练习(七)
java·开发语言·算法
_Jimmy_11 小时前
Agent 溯源精度提升方案
人工智能·python·langchain
@航空母舰12 小时前
SpringBoot通过Map实现天然的策略模式
java·spring boot·后端
SamChan9012 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译
天天进步201512 小时前
Python全栈项目--智能办公自动化系统
开发语言·python