Este script de Perl se modifica de la versión de matrices paralelas @ikegami para incluir datos de prueba.
En ejecución, falla con este mensaje de error:
“El programa no puede iniciarse porque falta gsl.dll en su computadora. Intente reinstalar el programa para solucionar el problema ".
Sin embargo, cuando un programa en C ejecuta PolyFit, se ejecuta sin errores. El código fuente sigue el siguiente script de perl.
gsl.dll está presente en el mismo directorio que PolyFitGSL.dll, D: / prjct / model / code / SRS1 / binaries /:

#  @ikegami parallel arrays version
use 5.014;
use strict;
use warnings;
use feature qw( state );
use Config  qw( %Config );
use Win32::API qw( );
use constant PTR_SIZE => $Config{ptrsize}; use constant PTR_PACK_FORMAT => PTR_SIZE == 8 ? 'Q' : PTR_SIZE == 4 ? 'L' : die("Unrecognized ptrsize\n"); use constant PTR_WIN32API_TYPE => PTR_SIZE == 8 ? 'DWORD64' : PTR_SIZE == 4 ? 'DWORD32' : die("Unrecognized ptrsize\n"); # local definitions my $fitorder = 3;
my @XVals = (1,2,3,4,5,6,7,8,9,10);
my @YVals = (12.36,12.32,12.31,12.37,12.44,12.44,12.5,12.46,12.48,12.51);
Win32::API::Type->typedef('uintptr_t' => PTR_WIN32API_TYPE);
my $dll = 'D:/prjct/model/code/SRS1/binaries/PolyFitGSL'; sub get_buffer_addr { unpack(PTR_PACK_FORMAT, pack('P', $_[0])) }
sub poly_fit {
   my ($xvals, $yvals, $fitorder) = @_; @$xvals == @$yvals or croak("Mismatch in the number of X vals and Y vals"); state $PolyFit;
   if (!$PolyFit) { my $adjusted_proto = '
         int __declspec PolyFit(
            int numPts,
            uintptr_t xVals,
            uintptr_t yVals,
            int fitOrder,
            uintptr_t coef,
            uintptr_t fitVals,
            uintptr_t rSquared
         )
      ';
      
      $PolyFit = Win32::API::More->new($dll, $adjusted_proto) or die("Can't link to PolyFit: $^E\n");
     }
     
   my $n = @$xvals;
   my $xVals = pack("d$n",                 @$xvals); my $yVals     = pack("d$n", @$yvals);
   my $coef = pack('d'.( $fitorder + 1 ), ( 0 )x( $fitorder + 1 )); my $fit_vals  = pack("d$n", ( 0 )x( $n ));
   my $r_squared = pack('d', 0); my $rv = $PolyFit->Call( $n,
      get_buffer_addr($xvals), get_buffer_addr($yvals),
      $fitorder, get_buffer_addr($coef),
      get_buffer_addr($fit_vals), get_buffer_addr($r_squared),
   );
   # I'm assuming the return value indicates whether the call was successful or not?
   return if !$rv; } my ($coef, $fitVals, $r_squared) = poly_fit(
   \@XVals,
   \@YVals,
   $fitorder,
)
   or die("Error");
     
 
    Cuando se proporciona un archivo de datos de entrada, este programa C se ejecuta correctamente, sin errores al ejecutar PolyFit
lang-C
// PolyFitFileData.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <stdlib.h>
#include "..\PolyFitGSL\PolyFitGSL.h"
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int ReadSingleColDataFile(const char* filename, int numPts, int numHeaderRows, double* data)
{
    int i;
    double curNum;
    char line[32];
    FILE* fPtr;
    fopen_s(&fPtr, filename, "r");
    if (fPtr == NULL)
    {
        return 1;
    }
    for (i = 0; i < (numPts + numHeaderRows); i++)
    {
        if (fgets(line, 32, fPtr) != NULL)
        {
            if (i >= numHeaderRows)
            {
                curNum = strtod(line, NULL);
                data[i - numHeaderRows] = curNum;
            }
        }
    }
    return 0;
}
int main(int argc, char** argv)
{
    int i, n, resFit, lineNum;
    double* xVals;
    double* yVals;
    double* coef;
    double* estYVals;
    double* rSquared;
    FILE* fptr;
    int fitOrder=1;
    if (argc != 5)
    {
        printf_s("Pass in 4 args: \n(1) number of points \n(2) filename with data (Y values only, one per line, one header line)\n(3) Fit order\n(4) Output Filename (or empty string for none)");
        exit(-1);
    }
    if (fopen_s(&fptr, argv[2], "r") != 0) {
        printf("Error! opening input file");
        // Program exits if file pointer returns NULL.
        exit(-16);
    }
    n = atoi(argv[1]);
    fitOrder = atoi(argv[3]);
    xVals = (double*)malloc(n * sizeof(double));
    yVals = (double*)malloc(n * sizeof(double));
    if (fptr != NULL) {
        char line[100];
        lineNum = 0;
        while ((fgets(line, sizeof line, fptr) != NULL) && lineNum < (n + 1)) /* read a line from a file */ {
            if (lineNum > 0)
            {
                //then parse string and add double to list
                yVals[lineNum - 1] = atof(line);
                xVals[lineNum - 1] = (double)lineNum;
            }
            lineNum++;
        }
        fclose(fptr);
    }
    else {
        return -22;
    }
    coef = (double*)malloc((fitOrder + 1) * sizeof(double));
    estYVals = (double*)malloc(n * sizeof(double));
    rSquared = (double*)malloc(sizeof(double));
    resFit = PolyFit(n, xVals, yVals, fitOrder, coef, estYVals, rSquared);
    //I can print out results to file now here, or to screen....
    printf_s("Completed fit.  Result from PolyFit function was %d.\n", resFit);
    printf_s("Fit order: %d\n", fitOrder);
    printf_s("RSquared: %f\n", *rSquared);
    printf_s("Coefficients:\n");
    for (i = 0; i < fitOrder + 1; i++)
    {
        printf_s("[x%d] %f\n", i, coef[i]);
    }
    printf_s("%d Data points (x,y,yFit):\n", n);
    for (i = 0; i < n; i++)
    {
        printf_s("%f\t%f\t%f\n", xVals[i], yVals[i], estYVals[i]);
    }
    //if you pass in empty string "" then assume that you don't want to write to disk
    fptr = NULL;
    if (strlen(argv[4]) > 2)
    {
        if (fopen_s(&fptr, argv[4], "w") != 0) {
            printf("Error! opening file for output");
            // Program exits if file pointer returns NULL.
            exit(-16);
        }
        fprintf_s(fptr,"Fit order: %d\n", fitOrder);
        fprintf_s(fptr, "RSquared: %f\n", *rSquared);
        fprintf_s(fptr, "Coefficients:\n");
        for (i = 0; i < fitOrder + 1; i++)
        {
            fprintf_s(fptr, "[x%d] %f\n", i, coef[i]);
        }
        fprintf_s(fptr, "%d Data points (x,y,yFit):\n", n);
        for (i = 0; i < n; i++)
        {
            fprintf_s(fptr, "%f\t%f\t%f\n", xVals[i], yVals[i], estYVals[i]);
        }
        fclose(fptr);
    }
    free(coef);
    free(estYVals);
    free(rSquared);
    free(xVals);
    free(yVals);
    return 0;
}
                        Este no es un problema de Perl por decir; se trata de que Windows sepa dónde encontrar sus archivos DLL. Consulte Orden de búsqueda de la biblioteca de vínculos dinámicos .
El directorio en el que reside el script y, por lo tanto, la DLL se puede obtener utilizando
use FindBin qw( $RealBin );
 
     Entre otras soluciones, encontrará cambiar el directorio actual a ese directorio
chdir($RealBin);
 
     y agregarlo al PATH
$ENV{PATH} = "$RealBin;$ENV{PATH}";
                            Jana Duggar ha sido abierta sobre su búsqueda del amor. Aquí está todo lo que ha dicho sobre el tema y su ventana de cinco años para el matrimonio.
La estrella de 'Outlander', Sam Heughan, reveló recientemente qué se llevará del set para recordar a Jamie Fraser, el papel que lo convirtió en una estrella.
'She Loves You' fue escrita en una hora, grabada en un día y fue la canción de The Beatles con una de las mejores interpretaciones de su carrera.
Dolly Parton y su abuela Bessie tenían una relación especial. La abuela Parton estaba muy enferma, pero eso no impidió que Dolly le hiciera una broma.
Puede que pienses que el roble o el nogal americano son maderas resistentes, pero cuando se trata de las maderas más duras del mundo, ni siquiera se acercan.
El océano rebosa belleza, pero también esconde algunas de las criaturas marinas más aterradoras del planeta. Muchos de estos animales acechan en las profundidades oceánicas, en el oscuro y opresivo mundo de alta presión del océano.
Si te enfrentas a monstruos hostiles o te preparas para combates PvP, conocer los mejores encantamientos para espadas en Minecraft puede darte una gran ventaja. Encantar espadas te permite infligir más daño, aumentar los objetos que sueltan los monstruos y prolongar la durabilidad de tu espada.
Cuando se habla de países socialistas, a menudo se imagina a la gente con un control estatal total y sin propiedad privada. Pero en la práctica, las economías socialistas varían enormemente.
                    “Children” lanza un cameo de renombre y algunas noticias devastadoras
                    Se dice que este RAV4 está en excelentes condiciones y preparado para un juego de sillas musicales.
                    Imágenes de drones capturaron a los bomberos que parecían tener dificultades para apagar el incendio.
                    Eyes of Wakanda se vincula directamente con la MCU, además de actualizaciones sobre X-Men '97, What If..., Daredevil y más.
El anillo de compromiso de Kate Middleton perteneció a la princesa Diana antes de que el príncipe William le propusiera matrimonio con él. Descubra todo lo que hay que saber sobre esta pieza histórica aquí.
John Cleese se casó con su esposa, Jennifer Wade, en 2012. Aquí encontrará todo lo que debe saber sobre la esposa de John Cleese, Jennifer Wade.
Patton Oswalt se casó con su esposa, la también actriz Meredith Salenger, en 2017. Aquí encontrará todo lo que debe saber sobre la esposa de Patton Oswalt, Meredith Salenger.
Aquí encontrará todo lo que debe saber sobre Lauren Scruggs Kennedy, la bloguera de moda y autora de best sellers del New York Times que espera su segundo hijo con la personalidad de televisión Jason Kennedy.
Me llama la atención De repente, como ocurre con tanta frecuencia Es el punto medio de nuevo <No, no el del Pacífico, tú, el del carnaval> Todos los titulares en voz alta...
                    En 2022, con el lanzamiento de GPT-3, la habilidad de escritura parece perder importancia. Con IA, las personas con mala escritura también pueden generar personal de calidad.
                    En el mundo acelerado y competitivo de hoy, la carrera de uno juega un papel importante en el crecimiento personal, la estabilidad financiera y la satisfacción general con la vida. Sin embargo, muchas personas se encuentran atrapadas en un ciclo implacable de estancamiento e insatisfacción, y su vida profesional se desvanece gradualmente.
                    La semana pasada noté un comunicado de prensa, enviado a través de PressGazette (un sitio web de noticias de los medios británicos). El artículo anunciaba que Acast, la empresa de publicidad y alojamiento de podcasts de Scandi, lideraría un consorcio de editores "probablemente los más influyentes" en podcasting.