数值计算实验_完整的列表计算程序,计算lnx导数,3种方法计算调和级数

数值计算实验

1.计算lnx的导数(c++)

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
double ln(int x){
//    double E=0.4e-4;
    double h=0.32;
    for(int i=0;i<20;i++){//不断/2.0,使h趋近于0,但注意循环次数不要太大,否则输出结果会乱码,因为计算机的精度也是有限的
        h/=2.0;
    }
    return log((x+h)/x)/h;

}
int main()
{
    int m;
    scanf("%d",&m);
    double x[100];
    for(int i=0;i<m;i++){
        scanf("%lf",&x[i]);
    }
    for(int i=0;i<m;i++){
        printf("%.2f\n",ln(x[i]));
    }
    return 0;
}

2.调和级数求和(c++)

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
//#include<bits/stdc++.h>
using namespace std;
double sumHSDL(int h){
    double sum=0;
    for(int i=1;i<=h;i++){
        sum+=1.0/i;
//        cout<<sum<<endl;
    }
//    cout<<"sum="<<sum;
    return sum;
}
double sumHSDR(int h){
    double sum=0;
//    cout<<"h="<<h<<endl;
    for(int i=h;i>=1;i--){
//不可以1/i,否则小数部分会被丢弃,必须1.0/i
        sum+=1.0/i;
    }
    return sum;
}

int main()
{
   int m;
   cin>>m;
   vector<int> k;
    int a;
   for(int i=0;i<m;i++){
    cin>>a;
    k.push_back(a);
   }
   for(int i=0;i<m;i++){
//    cout<<setprecision(15)<<sumHSDL(k[i])<<" ";
//    cout<<setprecision(15)<<sumHSDR(k[i])<<endl;
        printf("%.14f ",sumHSDL(k[i]));
        printf("%.14f\n",sumHSDR(k[i]));
   }
   return 0;

}

程序1.01完整的列表计算程序(Java)

import javax.sound.midi.SoundbankResource;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import static java.lang.Math.log;


public class ListCal101 {
    private static final int MN = 51;//数组长度
    private static int RN = 0;//迭代次数
    private static double EPS = 0.4e-4;//控制精度
    private static List<Double> H = new ArrayList<>(MN);
    private static List<Double> DTF = new ArrayList<>(MN);
    private static List<Double> DQF = new ArrayList<>(MN);
    private static List<Double> ERR = new ArrayList<>(MN);
    private static double X0 = 2.0;
    private static double H0 = 0.32;

    public static double deltF(double x, double h) {
        return Math.log((x + h) / x);
    }

    public static void operation() {
        int k;
        H.add(H0);
        DTF.add(deltF(X0, H.get(0)));
        DQF.add(DTF.get(0) / H.get(0));
        ERR.add(1.0);
        for (k = 1; k < MN; k++) {
            H.add(H.get(k - 1) / 2.0);
            DTF.add(deltF(X0, H.get(k)));
            DQF.add(DTF.get(k) / H.get(k));
            ERR.add(Math.abs(DQF.get(k) - DQF.get(k - 1)));
            if (ERR.get(k) < EPS)
                break;
        }
        RN = k + 1;
    }

    public static void showTable() {
        System.out.println("===============================================================");
        System.out.println("\t\tk\t\tH[k]\t\tDTF[K]\t\tDQF[k]\t\tERR[k]");
        System.out.println("---------------------------------------------------------------");
        for (int k = 0; k < RN; k++) {
//            输出宽度,精度
            System.out.println(String.format("%2d \t%10.6f \t%12.8f \t%12.8f \t%12.4e", k, H.get(k), DTF.get(k), DQF.get(k), ERR.get(k)));
        }
        System.out.println("---------------------------------------------------------------");
        System.out.println(String.format("ANS=%12.8e", DQF.get(RN - 1)));
        System.out.println("===============================================================");
    }

    public static void formProblem() {
        System.out.println("Please Enter x0:");
        Scanner scanner = new Scanner(System.in);
        X0 = scanner.nextDouble();
        System.out.println("Please Enter h0:");
        H0 = scanner.nextDouble();

    }

    public static void main(String[] args) {
        ListCal101.formProblem();
        ListCal101.operation();
        ListCal101.showTable();
    }
}

程序2.01分析计算机输出结果的有效数值位数(Java)

import javax.swing.*;


public class EffectiveNum201 {
//    private static final double PI = 3.1415926535897932;
//    private static final double PI = 3.14159265358;
    private static final double PI = 3.14159;
    private static double deltx = 0.25 * PI * 1.0e-8;
    private static double x = 0.5 * PI - deltx;
    private static double y1 = Math.sin(deltx);
    private static double y2 = Math.cos(x);
    private static double y3 = Math.cos(deltx);
    private static double y4 = Math.sin(x);

    public static void display() {
        System.out.println(String.format("PI =%22.15e", PI));
        System.out.println(String.format("y1 =%22.15e", y1));
        System.out.println(String.format("y2 =%22.15e", y2));
        System.out.println(String.format("y3 =%22.15e", y3));
        System.out.println(String.format("y4 =%22.15e", y4));
    }

    public static void main(String[] args) {
        EffectiveNum201.display();
    }

}

程序2.06三种方法对调和级数求前N项和 (Java)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class CalHS206 {
    private static final int MN = 12;
    private static final int RN = 10;
    private static final List<Long> N = new ArrayList<>(Arrays.asList(
            10L, 100L,
            1000L, 10000L,
            100000L, 110000L,
            1000000L, 1100000L,
            10000000L, 11000000L
    ));

    private static List<Float> HSF = new ArrayList<>(MN);
    private static List<Float> HSB = new ArrayList<>(MN);
    private static List<Double> HSD = new ArrayList<>(MN);
    public static float sumHSF(long n) {
        long k;
        float y = 0.0f;
        for (k = 1; k <= n; k++) {
            y += 1.0 / k;
        }
        return y;
    }

    public static float sumHSB(long n){
        long k;
        float y=0.0f;
        for (k = n; k >= 1; k--) {
            y+=1.0/k;
        }
        return y;
    }

    public static double sumHSD(long n){
        long k;
        double y=0.0;
        for (k = n; k >= 1; k--) {
            y+=1.0/k;
        }
        return y;
    }

    public static void operation(){
        int k;
        for (k = 0; k < RN; k++) {
            HSF.add(sumHSF(N.get(k)));
            HSB.add(sumHSB(N.get(k)));
            HSD.add(sumHSD(N.get(k)));
        }
    }

    public static void showTable(){
        System.out.println("=====================================================");
        System.out.println("\t\tN[k]\t\tHSF[K]\t\tHSB[k]\t\tHSD[k]");
        System.out.println("-----------------------------------------------------");
        for (int k = 0; k < RN; k++) {
//            输出宽度,精度
            System.out.println(String.format("%2d \t%10d \t%10.6f \t%10.6f \t%12.8f",k,N.get(k),HSF.get(k),HSB.get(k),HSD.get(k)));
        }
        System.out.println("=====================================================");
    }

    public static void main(String[] args) {
        CalHS206.operation();
        CalHS206.showTable();
    }
}

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值