Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include "spline.h"
- #define C_M 44.094
- #define C_R 0.083144
- #define C_T 370
- int n; // number of nodes
- double *dataP, *dataD; // data arrays
- double *c; // service array for spline()
- void readData() {
- FILE *f = fopen("data.dat", "r");
- if (!f) {
- printf("Ошибка чтения файла данных data.dat!\n");
- exit(1);
- }
- fscanf(f, "%d", &n);
- dataP = (double *)malloc(sizeof(double) * n);
- dataD = (double *)malloc(sizeof(double) * n);
- c = (double *)malloc(sizeof(double) * n * 3);
- for (int i = 0; i < n; i++) {
- fscanf(f, "%lf", (dataP + i));
- fscanf(f, "%lf", (dataD + i));
- }
- fclose(f);
- }
- double f(double p, double d) {
- return p * C_M / (d * C_R * C_T);
- }
- int main(int argc, char *argv[]) {
- double *z;
- FILE *fout;
- readData();
- // way #1
- spline(n, dataP, dataD, c);
- fout = fopen("way1.dat", "w");
- for (double p = 0.1; p <= 0.9; p += 0.1)
- fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
- for (double p = 1.0; p < 10.0; p += 1.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
- for (double p = 10.0; p < 100.0; p += 10.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
- for (double p = 100.0; p <= 600.0; p += 50.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
- fclose(fout);
- // way #2
- z = (double *)malloc(sizeof(double) * n);
- for (int i = 0; i < n; i++)
- *(z + i) = f(*(dataP + i), *(dataD + i));
- spline(n, dataP, z, c);
- fout = fopen("way2.dat", "w");
- for (double p = 0.1; p <= 0.9; p += 0.1)
- fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
- for (double p = 1.0; p < 10.0; p += 1.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
- for (double p = 10.0; p < 100.0; p += 10.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
- for (double p = 100.0; p <= 600.0; p += 50.0)
- fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
- fclose(fout);
- free(dataP);
- free(dataD);
- free(c);
- free(z);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment