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

写在前面:

题目如下:

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

最后的运行结果如下:

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

写在后面:

相关推荐
Derek_Smart1 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
曲幽2 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
NE_STOP2 小时前
MyBatis-mybatis入门与增删改查
java
肆忆_3 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
孟陬5 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌5 小时前
一站式了解四种限流算法
java·后端·go
华仔啊6 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java
敏编程6 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪7 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain