Advertisement
Tertius

numerico 2

Oct 26th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <math.h>
  5.  
  6. double tabela(int n, double *g0,double *g1, double *num2, double *u)
  7. {
  8.     int i, j;
  9.     double matriz[2][2];
  10.     double resultado[2];
  11.  
  12.     for(i = 0; i < 2; i++)
  13.     {
  14.         resultado[i] = 0;
  15.         for(j = 0; j < 2; j++)
  16.         {
  17.             matriz[i][j] = 0;
  18.         }
  19.     }
  20.     //definir a nossa matriz
  21.  
  22.     for(i = 0; i < n; i++)
  23.     {
  24.         matriz[0][0] = matriz[0][0] + g0[i]*g0[i];
  25.         matriz[1][1] = matriz[1][1] + g1[i]*g1[i];
  26.         matriz[0][1] = matriz[0][1] + g0[i]*g1[i];
  27.         matriz[1][0] = matriz[0][1];
  28.         resultado[0] = resultado[0] + num2[i]*g0[i];
  29.         resultado[1] = resultado[1] + num2[i]*g1[i];
  30.     }
  31.     //pivotação parcial e eliminacao de gauss para definir o a e b
  32.  
  33.     if(matriz[1][0] != 0)
  34.     {
  35.         matriz[1][1] = matriz[1][1] - matriz[0][1]*matriz[1][0]/(matriz[0][0]);
  36.         resultado[1] = resultado[1] - resultado[0]*matriz[1][0]/matriz[0][0];
  37.         matriz[1][0] = 0;
  38.     }
  39.  
  40.  
  41.     u[1] = resultado[1]/matriz[1][1];
  42.     u[0] = (resultado[0] - u[1]*matriz[0][1])/matriz[0][0];
  43. }
  44.  
  45. double funcao1(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  46. {
  47.     int i;
  48.     int j = 0;
  49.     int k = 0;
  50.     int w = 0;
  51.     double px = 0;
  52.     double residuo;
  53.  
  54.     for(i = 0; i < n; i++)
  55.     {
  56.         g0[i] = 1;
  57.         g1[i] = num1[i];
  58.     }
  59.  
  60.     tabela(n, g0, g1, num2, u);
  61.     //residuo
  62.     for(i = 0; i < n; i++)
  63.     {
  64.         px = px + pow((u[1]*num1[i] + u[0] - num2[i]), 2);
  65.     }
  66.     residuo = px;
  67.     printf("%lf", u[0]);
  68.     while(fabs(u[0]) < 1)
  69.     {
  70.         u[0] = u[0]*10;
  71.         j--;
  72.     }
  73.     while(fabs(u[1]) < 1)
  74.     {
  75.         u[1] = u[1]*10;
  76.         k--;
  77.     }
  78.     while(fabs(px) < 1)
  79.     {
  80.         px = px*10;
  81.         w--;
  82.     }
  83.     while(fabs(u[0]) > 10)
  84.     {
  85.         u[0] = u[0]/10;
  86.         j++;
  87.     }
  88.     while(fabs(u[1]) > 10)
  89.     {
  90.         u[1] = u[1]/10;
  91.         k++;
  92.     }
  93.     while(fabs(px) > 10)
  94.     {
  95.         px = px/10;
  96.         w++;
  97.     }
  98.     printf("\nf_{1}(x) =  %.4lfE%d*x + %.4lfE%d           %.4lfE%d", u[1],k, u[0],j, px, w);
  99.  
  100.     return residuo;
  101. }
  102.  
  103. double funcao2(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  104. {
  105.     int i;
  106.     int j = 0;
  107.     int k = 0;
  108.     int w = 0;
  109.     double px = 0;
  110.     double residuo;
  111.  
  112.     for(i = 0; i < n; i++)
  113.     {
  114.         g0[i] = num1[i];
  115.         g1[i] = num1[i]*num1[i];
  116.     }
  117.     tabela(n, g0, g1, num2, u);
  118.     //residuo
  119.     for(i = 0; i < n; i++)
  120.     {
  121.         px = px + pow((u[1]*num1[i]*num1[i] + u[0]*num1[i] - num2[i]), 2);
  122.     }
  123.     residuo = px;
  124.     while(fabs(u[0]) < 1)
  125.     {
  126.         u[0] = u[0]*10;
  127.         j--;
  128.     }
  129.     while(fabs(u[1]) < 1)
  130.     {
  131.         u[1] = u[1]*10;
  132.         k--;
  133.     }
  134.     while(fabs(px) < 1)
  135.     {
  136.         px = px*10;
  137.         w--;
  138.     }
  139.     while(fabs(u[0]) > 10)
  140.     {
  141.         u[0] = u[0]/10;
  142.         j++;
  143.     }
  144.     while(fabs(u[1]) > 10)
  145.     {
  146.         u[1] = u[1]/10;
  147.         k++;
  148.     }
  149.     while(fabs(px) > 10)
  150.     {
  151.         px = px/10;
  152.         w++;
  153.     }
  154.     printf("\nf_{2}(x) =  %.4lfE%d*x^2 + %.4lfE%d*x        %.4lfE%d", u[1], k, u[0], j, px, w);
  155.  
  156.     return residuo;
  157. }
  158.  
  159. double funcao3(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  160. {
  161.     int i;
  162.     int j = 0;
  163.     int k = 0;
  164.     int w = 0;
  165.     double px = 0;
  166.     double residuo;
  167.  
  168.     for(i = 0; i < n; i++)
  169.     {
  170.         g0[i] = num1[i];
  171.         g1[i] = num1[i]*num1[i]*num1[i];
  172.     }
  173.     tabela(n, g0, g1, num2, u);
  174.     //residuo
  175.     for(i = 0; i < n; i++)
  176.     {
  177.         px = px + pow((u[1]*num1[i]*num1[i]*num1[i] + u[0]*num1[i] - num2[i]), 2);
  178.     }
  179.     residuo = px;
  180.     while(fabs(u[0]) < 1)
  181.     {
  182.         u[0] = u[0]*10;
  183.         j--;
  184.     }
  185.     while(fabs(u[1]) < 1)
  186.     {
  187.         u[1] = u[1]*10;
  188.         k--;
  189.     }
  190.     while(fabs(px) < 1)
  191.     {
  192.         px = px*10;
  193.         w--;
  194.     }
  195.     while(fabs(u[0]) > 10)
  196.     {
  197.         u[0] = u[0]/10;
  198.         j++;
  199.     }
  200.     while(fabs(u[1]) > 10)
  201.     {
  202.         u[1] = u[1]/10;
  203.         k++;
  204.     }
  205.     while(fabs(px) > 10)
  206.     {
  207.         px = px/10;
  208.         w++;
  209.     }
  210.     printf("\nf_{3}(x) =  %.4lfE%d*x^3 + %.4lfE%d*x       %.4lfE%d", u[1], k, u[0], j, px, w);
  211.  
  212.     return residuo;
  213. }
  214.  
  215. double funcao4(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  216. {
  217.     int i;
  218.     int j = 0;
  219.     int k = 0;
  220.     int w = 0;
  221.     double px = 0;
  222.     double residuo;
  223.  
  224.     for(i = 0; i < n; i++)
  225.     {
  226.         g0[i] = num1[i]*num1[i];
  227.         g1[i] = num1[i]*num1[i]*num1[i];
  228.     }
  229.     tabela(n, g0, g1, num2, u);
  230.     //residuo
  231.     for(i = 0; i < n; i++)
  232.     {
  233.         px = px + pow((u[1]*num1[i]*num1[i]*num1[i] + u[0]*num1[i]*num1[i] - num2[i]), 2);
  234.     }
  235.     residuo = px;
  236.     while(fabs(u[0]) < 1)
  237.     {
  238.         u[0] = u[0]*10;
  239.         j--;
  240.     }
  241.     while(fabs(u[1]) < 1)
  242.     {
  243.         u[1] = u[1]*10;
  244.         k--;
  245.     }
  246.     while(fabs(px) < 1)
  247.     {
  248.         px = px*10;
  249.         w--;
  250.     }
  251.     while(fabs(u[0]) > 10)
  252.     {
  253.         u[0] = u[0]/10;
  254.         j++;
  255.     }
  256.     while(fabs(u[1]) > 10)
  257.     {
  258.         u[1] = u[1]/10;
  259.         k++;
  260.     }
  261.     while(fabs(px) > 10)
  262.     {
  263.         px = px/10;
  264.         w++;
  265.     }
  266.     printf("\nf_{4}(x) =  %.4lfE%d*x^3 + %.4lfE%d*x^2     %.4lfE%d", u[1], k, u[0], j, px, w);
  267.  
  268.     return residuo;
  269. }
  270.  
  271. double funcao5(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  272. {
  273.     int i;
  274.     int k = 0;
  275.     int j = 0;
  276.     int w = 0;
  277.     double px = 0;
  278.     double residuo;
  279.  
  280.     for(i = 0; i < n; i++)
  281.     {
  282.         g0[i] = num1[i];
  283.         g1[i] = 1;
  284.         num2[i] = log(num2[i]);
  285.     }
  286.     tabela(n, g0, g1, num2, u);
  287.     for(i = 0; i < n; i++)
  288.     {
  289.         num2[i] = exp(num2[i]);
  290.     }
  291.  
  292.     u[1] = exp(u[1]);
  293.     //residuo
  294.     for(i = 0; i < n; i++)
  295.     {
  296.         px = px + pow((u[1]*exp(u[0]*num1[i]) - num2[i]), 2);
  297.     }
  298.     residuo = px;
  299.     while(fabs(u[0]) < 1)
  300.     {
  301.         u[0] = u[0]*10;
  302.         j--;
  303.     }
  304.     while(fabs(u[1]) < 1)
  305.     {
  306.         u[1] = u[1]*10;
  307.         k--;
  308.     }
  309.     while(fabs(px) < 1)
  310.     {
  311.         px = px*10;
  312.         w--;
  313.     }
  314.     while(fabs(u[0]) > 10)
  315.     {
  316.         u[0] = u[0]/10;
  317.         j++;
  318.     }
  319.     while(fabs(u[1]) > 10)
  320.     {
  321.         u[1] = u[1]/10;
  322.         k++;
  323.     }
  324.     while(fabs(px) > 10)
  325.     {
  326.         px = px/10;
  327.         w++;
  328.     }
  329.     printf("\nf_{5}(x) =  %.4lfE%dexp(%.4lfE%d*x)          %.4lfE%d", u[1], k, u[0], j, px, w);
  330.  
  331.     return residuo;
  332. }
  333.  
  334. double funcao6(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  335. {
  336.     int i;
  337.     int k = 0;
  338.     int j = 0;
  339.     int w = 0;
  340.     double px = 0;
  341.     double residuo;
  342.  
  343.     for(i = 0; i < n; i++)
  344.     {
  345.         g0[i] = log(num1[i]);
  346.         g1[i] = 1;
  347.         num2[i] = log(num2[i]);
  348.     }
  349.     tabela(n, g0, g1, num2, u);
  350.     u[1] = exp(u[1]);
  351.  
  352.     for(i = 0; i < n; i++)
  353.     {
  354.         num2[i] = exp(num2[i]);
  355.     }
  356.     // residuo
  357.     for(i = 0; i < n; i++)
  358.     {
  359.         px = px + pow((u[1]*pow(num1[i], u[0]) - num2[i]), 2);
  360.     }
  361.     residuo = px;
  362.     while(fabs(u[0]) < 1)
  363.     {
  364.         u[0] = u[0]*10;
  365.         j--;
  366.     }
  367.     while(fabs(u[1]) < 1)
  368.     {
  369.         u[1] = u[1]*10;
  370.         k--;
  371.     }
  372.     while(fabs(px) < 1)
  373.     {
  374.         px = px*10;
  375.         w--;
  376.     }
  377.     while(fabs(u[0]) > 10)
  378.     {
  379.         u[0] = u[0]/10;
  380.         j++;
  381.     }
  382.     while(fabs(u[1]) > 10)
  383.     {
  384.         u[1] = u[1]/10;
  385.         k++;
  386.     }
  387.     while(fabs(px) > 10)
  388.     {
  389.         px = px/10;
  390.         w++;
  391.     }
  392.     printf("\nf_{6}(x) =  %.4lfE%d*x^(%.4lfE%d)            %.4lfE%d", u[1], k, u[0], j, px, w);
  393.  
  394.     return residuo;
  395. }
  396.  
  397. double funcao7(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  398. {
  399.     int i;
  400.     int k = 0;
  401.     int j = 0;
  402.     int w = 0;
  403.     double px = 0;
  404.     double residuo;
  405.  
  406.     for(i = 0; i < n; i++)
  407.     {
  408.         g0[i] = 1/num1[i];
  409.         g1[i] = log(num1[i]);
  410.     }
  411.     tabela(n, g0, g1, num2, u);
  412.  
  413.     // residuo
  414.     for(i = 0; i < n; i++)
  415.     {
  416.         px = px + pow((u[1]*log(num1[i]) + u[0]/num1[i] - num2[i]), 2);
  417.     }
  418.     residuo = px;
  419.     while(fabs(u[0]) < 1)
  420.     {
  421.         u[0] = u[0]*10;
  422.         j--;
  423.     }
  424.     while(fabs(u[1]) < 1)
  425.     {
  426.         u[1] = u[1]*10;
  427.         k--;
  428.     }
  429.     while(fabs(px) < 1)
  430.     {
  431.         px = px*10;
  432.         w--;
  433.     }
  434.     while(fabs(u[0]) > 10)
  435.     {
  436.         u[0] = u[0]/10;
  437.         j++;
  438.     }
  439.     while(fabs(u[1]) > 10)
  440.     {
  441.         u[1] = u[1]/10;
  442.         k++;
  443.     }
  444.     while(fabs(px) > 10)
  445.     {
  446.         px = px/10;
  447.         w++;
  448.     }
  449.     printf("\nf_{7}(x) =  %.4lfE%dln(x) + %.4lfE%d/x     %.4lfE%d", u[1], k, u[0], j, px, w);
  450.  
  451.     return residuo;
  452. }
  453.  
  454. double funcao8(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  455. {
  456.     int i;
  457.     int k = 0;
  458.     int j = 0;
  459.     int w = 0;
  460.     double px = 0;
  461.     double residuo;
  462.  
  463.     for(i = 0; i < n; i++)
  464.     {
  465.         g0[i] = 1/num1[i];
  466.         g1[i] = num1[i];
  467.     }
  468.     tabela(n, g0, g1, num2, u);
  469.  
  470.     // residuo
  471.     for(i = 0; i < n; i++)
  472.     {
  473.         px = px + pow((u[1]*num1[i] + u[0]/num1[i] - num2[i]), 2);
  474.     }
  475.     residuo = px;
  476.     while(fabs(u[0]) < 1)
  477.     {
  478.         u[0] = u[0]*10;
  479.         j--;
  480.     }
  481.     while(fabs(u[1]) < 1)
  482.     {
  483.         u[1] = u[1]*10;
  484.         k--;
  485.     }
  486.     while(fabs(px) < 1)
  487.     {
  488.         px = px*10;
  489.         w--;
  490.     }
  491.     while(fabs(u[0]) > 10)
  492.     {
  493.         u[0] = u[0]/10;
  494.         j++;
  495.     }
  496.     while(fabs(u[1]) > 10)
  497.     {
  498.         u[1] = u[1]/10;
  499.         k++;
  500.     }
  501.     while(fabs(px) > 10)
  502.     {
  503.         px = px/10;
  504.         w++;
  505.     }
  506.     printf("\nf_{8}(x) =  %.4lfE%d*x + %.4lfE%d/x         %.4lfE%d", u[1], k, u[0], j, px, w);
  507.  
  508.     return residuo;
  509. }
  510.  
  511. double funcao9(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  512. {
  513.     int i;
  514.     int k = 0;
  515.     int j = 0;
  516.     int w = 0;
  517.     double px = 0;
  518.     double residuo;
  519.  
  520.     for(i = 0; i < n; i++)
  521.     {
  522.         g0[i] = num1[i];
  523.         g1[i] = cos(num1[i]);
  524.     }
  525.     tabela(n, g0, g1, num2, u);
  526.  
  527.     //residuo
  528.     for(i = 0; i < n; i++)
  529.     {
  530.         px = px + pow((u[1]*cos(num1[i]) + u[0]*num1[i] - num2[i]), 2);
  531.     }
  532.     residuo = px;
  533.     while(fabs(u[0]) < 1)
  534.     {
  535.         u[0] = u[0]*10;
  536.         j--;
  537.     }
  538.     while(fabs(u[1]) < 1)
  539.     {
  540.         u[1] = u[1]*10;
  541.         k--;
  542.     }
  543.     while(fabs(px) < 1)
  544.     {
  545.         px = px*10;
  546.         w--;
  547.     }
  548.     while(fabs(u[0]) > 10)
  549.     {
  550.         u[0] = u[0]/10;
  551.         j++;
  552.     }
  553.     while(fabs(u[1]) > 10)
  554.     {
  555.         u[1] = u[1]/10;
  556.         k++;
  557.     }
  558.     while(fabs(px) > 10)
  559.     {
  560.         px = px/10;
  561.         w++;
  562.     }
  563.     printf("\nf_{9}(x) =  %.4lfE%dcos(x) + %.4lfE%d*x      %.4lfE%d", u[1], k, u[0], j, px, w);
  564.  
  565.     return residuo;
  566. }
  567.  
  568. double funcao10(int n, double *g0,double *g1, double *num1, double *num2, double *u)
  569. {
  570.     int i;
  571.     int k = 0;
  572.     int j = 0;
  573.     int w = 0;
  574.     double px = 0;
  575.     double residuo;
  576.  
  577.     for(i = 0; i < n; i++)
  578.     {
  579.         g0[i] = exp(num1[i]);
  580.         g1[i] = sin(num1[i]);
  581.     }
  582.     tabela(n, g0, g1, num2, u);
  583.  
  584.     //residuo
  585.     for(i = 0; i < n; i++)
  586.     {
  587.         px = px + pow((1/(u[1]*sin(num1[i]) + u[0]*exp(num1[i])) - num2[i]), 2);
  588.     }
  589.     residuo = px;
  590.     while(fabs(u[0]) < 1)
  591.     {
  592.         u[0] = u[0]*10;
  593.         j--;
  594.     }
  595.     while(fabs(u[1]) < 1)
  596.     {
  597.         u[1] = u[1]*10;
  598.         k--;
  599.     }
  600.     while(fabs(px) < 1)
  601.     {
  602.         px = px*10;
  603.         w--;
  604.     }
  605.     while(fabs(u[0]) > 10)
  606.     {
  607.         u[0] = u[0]/10;
  608.         j++;
  609.     }
  610.     while(fabs(u[1]) > 10)
  611.     {
  612.         u[1] = u[1]/10;
  613.         k++;
  614.     }
  615.     while(fabs(px) > 10)
  616.     {
  617.         px = px/10;
  618.         w++;
  619.     }
  620.     printf("\nf_{10}(x) =  1/(%.4lfE%dsen(x) + %.4lfE%dexp(x))      %.4lfE%d", u[1], k, u[0], j, px, w);
  621.  
  622.     return residuo;
  623. }
  624.  
  625.  
  626. int main()
  627. {
  628.     FILE *entrada;
  629.     char nome_do_arquivo[20], iniciar_fechar, ponto;
  630.     int a, n, exp1, exp2, i, j;
  631.     double *num1;
  632.     double *num2;
  633.     double *g0;
  634.     double *g1;
  635.     double *u;
  636.     double *px;
  637.     int menor;
  638.     char c;
  639.  
  640.     do                                              /*menu inicial, "a" para selecionar o arquivo, "b" para fechar*/
  641.     {
  642.         printf("Digite 'a' ou 'b':\n a) Digitar o nome do arquivo de entrada para iniciar o programa.\n b) Fechar o programa.\n");
  643.         scanf("%c", &iniciar_fechar);
  644.     }
  645.     while (iniciar_fechar != 'a' && iniciar_fechar != 'b');
  646.  
  647.     if (iniciar_fechar == 'a')
  648.     {
  649.         printf("Digite o nome do arquivo(nomedoarquivo.txt):\n");
  650.         scanf("%s", nome_do_arquivo);
  651.         entrada = fopen(nome_do_arquivo, "r");
  652.         while (entrada == NULL)
  653.         {
  654.             printf("Tente novamente.\n");
  655.             scanf("%s", nome_do_arquivo);
  656.             entrada = fopen(nome_do_arquivo, "r");
  657.         }
  658.         fscanf(entrada, "%d", &n);
  659.         /*recebendo do arquivo o numero de funções*/
  660.         num1 = (double*)malloc(n*sizeof(double));
  661.         num2 = (double*)malloc(n*sizeof(double));
  662.         g0 = (double*)malloc(n*sizeof(double));
  663.         g1 = (double*)malloc(n*sizeof(double));
  664.         px = (double*)malloc(10*sizeof(double));
  665.         u = (double*)malloc(2*sizeof(double));
  666.         printf("numero de pontos avaliados sera: %d\n", n);
  667.         for (i = 0; i < n; i++)
  668.         {
  669.             fscanf(entrada, "%lf,%lf", &num1[i], &num2[i]);// recebendo numero 1
  670.         }
  671.         px[0] = funcao1(n, g0, g1, num1, num2, u);
  672.         px[1] = funcao2(n, g0, g1, num1, num2, u);
  673.         px[2] = funcao3(n, g0, g1, num1, num2, u);
  674.         px[3] = funcao4(n, g0, g1, num1, num2, u);
  675.         px[4] = funcao5(n, g0, g1, num1, num2, u);
  676.         px[5] = funcao6(n, g0, g1, num1, num2, u);
  677.         px[6] = funcao7(n, g0, g1, num1, num2, u);
  678.         px[7] = funcao8(n, g0, g1, num1, num2, u);
  679.         px[8] = funcao9(n, g0, g1, num1, num2, u);
  680.         px[9] = funcao10(n, g0, g1, num1, num2, u);
  681.         menor = 0;
  682.         for(i = 1; i < 10; i++)
  683.         {
  684.             if(fabs(px[i]) < fabs(px[menor]))
  685.             {
  686.                 menor = i;
  687.             }
  688.         }
  689.         menor++;
  690.         printf("\n\nA melhor funcao de ajustamento:");
  691.  
  692.         if(menor == 1)
  693.         {
  694.             px[0] = funcao1(n, g0, g1, num1, num2, u);
  695.         }
  696.         else if(menor == 2)
  697.         {
  698.             px[0] = funcao2(n, g0, g1, num1, num2, u);
  699.         }
  700.         else if(menor == 3)
  701.         {
  702.             px[0] = funcao3(n, g0, g1, num1, num2, u);
  703.         }
  704.         else if(menor == 4)
  705.         {
  706.             px[0] = funcao4(n, g0, g1, num1, num2, u);
  707.         }
  708.         else if(menor == 5)
  709.         {
  710.             px[0] = funcao5(n, g0, g1, num1, num2, u);
  711.         }
  712.         else if(menor == 6)
  713.         {
  714.             px[0] = funcao6(n, g0, g1, num1, num2, u);
  715.         }
  716.         else if(menor == 7)
  717.         {
  718.             px[0] = funcao7(n, g0, g1, num1, num2, u);
  719.         }
  720.         else if(menor == 8)
  721.         {
  722.             px[0] = funcao8(n, g0, g1, num1, num2, u);
  723.         }
  724.         else if(menor == 9)
  725.         {
  726.             px[0] = funcao9(n, g0, g1, num1, num2, u);
  727.         }
  728.         else if(menor == 10)
  729.         {
  730.             px[0] = funcao10(n, g0, g1, num1, num2, u);
  731.         }
  732.         printf("\n");
  733.     }
  734.     return 0;
  735. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement