数值计算实验
1.计算lnx的导数(c++)
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
double ln(int x){
double h=0.32;
for(int i=0;i<20;i++){
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>
using namespace std;
double sumHSDL(int h){
double sum=0;
for(int i=1;i<=h;i++){
sum+=1.0/i;
}
return sum;
}
double sumHSDR(int h){
double sum=0;
for(int i=h;i>=1;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++){
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.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();
}
}