Advertisement
Guest User

xd1

a guest
May 30th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3.  
  4. typedef struct VALORES_CASOS
  5. {
  6. char tipo_de_funcao[10];
  7. int n_tipos;
  8. float pontos_fornecidos[2][100];
  9. int n_pontos;
  10. }v;
  11.  
  12. void IMPRIME_VETOR(float v[],int n)
  13. {
  14. int i;
  15. printf("\n\n(");
  16. for(i=0;i<n;i++)
  17. {
  18. printf("%lf, ", v[i]);
  19.  
  20. }
  21. printf(")\n\n");
  22. }
  23.  
  24. void IMPRIME_MATRIZ(float Matriz[][11], int n_linhas, int n_colunas)
  25. {
  26. int i, j;
  27. printf("\n\n");
  28. for (i=0; i<n_linhas; i++)
  29. {
  30. for (j=0; j<n_colunas; j++)
  31. {
  32. printf("%lf ", Matriz [i][j]);
  33. }
  34. printf("\n");
  35. }
  36. }
  37.  
  38. float SOMATORIO_MULTIPLICACAO (float vetor1 [], float vetor2[], int n)
  39. {
  40. int i;
  41. float soma = 0;
  42.  
  43. for(i=0; i<n; i++)
  44. {
  45. soma += vetor1[i]*vetor2[i];
  46. }
  47. return soma;
  48. }
  49.  
  50. float RESOLVE_SISTEMA (float SISTEMA[10][11], int v, float RESOLUCAO[])
  51. {
  52. int i=0, j=0, k=0;
  53. float Matriz_L[10][11], Matriz_U[10][11], COLUNA_Y[10], soma=0.0;
  54.  
  55. for(i=0; i<v; i++)
  56. IMPRIME_MATRIZ(SISTEMA, v, v);
  57. {
  58. for(j=0;j<v;j++)
  59. {
  60.  
  61. soma = 0.0;
  62. if (i>=j)
  63. {
  64. for (k=0; k<j; k++)
  65. {
  66. soma += Matriz_L[i][k]*Matriz_U[k][j];
  67. }
  68. Matriz_L[i][j] = SISTEMA[i][j] - soma;
  69. if (i==j)
  70. Matriz_U[i][j]=1;
  71. if (i<j)
  72. Matriz_U[i][j]=0.0;
  73. }
  74. if (i<j)
  75. {
  76. for(k=0; k<i; k++)
  77. {
  78. soma+= Matriz_L[i][k]*Matriz_U[k][j];
  79. }
  80.  
  81. Matriz_L[i][j]=0.0;
  82. Matriz_U[i][j] = (SISTEMA[i][j] - soma)/Matriz_L[i][i];
  83. }
  84. }
  85. }
  86. soma=0.0;
  87.  
  88. for (i=0; i<v; i++)
  89. {
  90. COLUNA_Y[i]=0.0;
  91. }
  92.  
  93. for (i=0; i<v; i++)
  94. {
  95. RESOLUCAO[i]=0.0;
  96. }
  97. for(i=0; i<v; i++)
  98. {
  99. soma=0.0;
  100. for (j=0;j<v;j++)for (j=0;j<v;j++)
  101.  
  102. if(i!=j)
  103. {
  104.  
  105. soma += COLUNA_Y[j]*Matriz_L[i][j];
  106. printf("%lf ", soma);
  107. }
  108.  
  109. COLUNA_Y[i] = (SISTEMA[i][v] - soma)/Matriz_L[i][i];
  110. printf(" \n%lf - %lf / %lf = %lf, iteracao: %d\n\n",SISTEMA[i][v], soma, Matriz_L[i][i], COLUNA_Y[i], i);
  111. }
  112.  
  113.  
  114. for(i=v-1;i>=0;i=i-1)
  115. {
  116. soma = 0.0;
  117. for (j=0;j<v;j++)
  118. {
  119. if(i!=j)
  120. {
  121. soma += RESOLUCAO[j]*Matriz_U[i][j];
  122. }
  123. }
  124.  
  125. RESOLUCAO[i] = (COLUNA_Y[i] - soma)/Matriz_U[i][i];
  126.  
  127. }
  128. }
  129.  
  130. void AJUSTAMENTO (VALORES_CASOS v, float SISTEMA[10][11])
  131. {
  132. int i, j;
  133. IMPRIME_VETOR(v.pontos_fornecidos[0], v.n_pontos);
  134. float g_i[10][100], f_x[100];
  135. for(i=0; i<v.n_tipos; i++)
  136. {
  137. if(v.tipo_de_funcao[i]=='a')
  138. {
  139. for (j=0; j<v.n_pontos; j++)
  140. {
  141. g_i[i][j] = sin(v.pontos_fornecidos[0][j]);
  142. }
  143. }
  144.  
  145. if(v.tipo_de_funcao[i]=='b')
  146. {
  147. for (j=0; j<v.n_pontos; j++)
  148. {
  149. g_i[i][j] = cos(v.pontos_fornecidos[0][j]);
  150. }
  151. }
  152.  
  153. if(v.tipo_de_funcao[i]=='c')
  154. {
  155. for (j=0; j<v.n_pontos; j++)
  156. {
  157. g_i[i][j] = log(v.pontos_fornecidos[0][j]);
  158. }
  159. }
  160.  
  161. if(v.tipo_de_funcao[i]=='d')
  162. {
  163. for (j=0; j<v.n_pontos; j++)
  164. {
  165. g_i[i][j] = exp(v.pontos_fornecidos[0][j]);
  166. }
  167. }
  168.  
  169. if(v.tipo_de_funcao[i]=='e')
  170. {
  171. for (j=0; j<v.n_pontos; j++)
  172. {
  173. g_i[i][j] = pow((v.pontos_fornecidos[0][j]), 5);
  174. }
  175. }
  176.  
  177.  
  178. if(v.tipo_de_funcao[i]=='f')
  179. {
  180. for (j=0; j<v.n_pontos; j++)
  181. {
  182. g_i[i][j] = pow((v.pontos_fornecidos[0][j]), 4);
  183. }
  184. }
  185.  
  186.  
  187. if(v.tipo_de_funcao[i]=='g')
  188. {
  189. for (j=0; j<v.n_pontos; j++)
  190. {
  191. g_i[i][j] = pow((v.pontos_fornecidos[0][j]), 3);
  192. }
  193. }
  194.  
  195.  
  196. if(v.tipo_de_funcao[i]=='h')
  197. {
  198. for (j=0; j<v.n_pontos; j++)
  199. {
  200. g_i[i][j] = pow((v.pontos_fornecidos[0][j]), 2);
  201. }
  202. }
  203.  
  204.  
  205. if(v.tipo_de_funcao[i]=='i')
  206. {for (j=0; j<v.n_pontos; j++)
  207. {
  208.  
  209. g_i[i][j] = v.pontos_fornecidos[0][j];
  210.  
  211. }
  212. }
  213.  
  214.  
  215. if(v.tipo_de_funcao[i]=='j')
  216. {
  217. for (j=0; j<v.n_pontos; j++)
  218. {
  219. g_i[i][j] = 1;
  220. }
  221. }
  222.  
  223. }
  224. for (i=0; i<v.n_tipos; i++)
  225.  
  226. {
  227.  
  228. for (j=0; j<v.n_tipos; j++)
  229. {
  230. SISTEMA[i][j] = SOMATORIO_MULTIPLICACAO (g_i[i], g_i[j], v.n_pontos);
  231. }
  232.  
  233. SISTEMA[i][v.n_tipos] = SOMATORIO_MULTIPLICACAO(v.pontos_fornecidos[1], g_i[i], v.n_pontos);
  234. }
  235. }
  236.  
  237.  
  238. main()
  239. {
  240. float SISTEMA[10][11], SOLUCAO[10], teste[10][11];
  241.  
  242. VALORES_CASOS v[100];
  243.  
  244. int t,i, j, n_casos;
  245.  
  246. FILE* ENTRADA;
  247. FILE* SAIDA;
  248.  
  249. SAIDA = fopen("saida.txt", "w");
  250. ENTRADA = fopen("entrada.txt", "r");
  251.  
  252. if (ENTRADA == NULL)
  253. printf("erro");
  254.  
  255. fscanf(ENTRADA,"%d", &n_casos);
  256.  
  257. for (i=0; i < n_casos; i++)
  258. {
  259.  
  260. fscanf(ENTRADA,"%d\n", &v[i].n_pontos);
  261. for (j=0; j<v[i].n_pontos; j++)
  262. {
  263.  
  264. fscanf(ENTRADA,"%f, %f;",&v[i].pontos_fornecidos[0][j], &v[0].pontos_fornecidos[1][j]);
  265. printf("\n----%lf, %lf-----\n", v[i].pontos_fornecidos[0][j], v[i].pontos_fornecidos[1][j]);
  266.  
  267.  
  268. }
  269.  
  270. fscanf(ENTRADA,"%d",&v[i].n_tipos);
  271.  
  272. for(j=0; j<v[i].n_tipos; j++)
  273. {
  274. fscanf(ENTRADA,"%c + ",&v[i].tipo_de_funcao[j]);
  275. printf("\n----%c-----\n", v[i].tipo_de_funcao[j]);
  276. }
  277.  
  278. AJUSTAMENTO(v[i], SISTEMA);
  279. RESOLVE_SISTEMA(SISTEMA, v[i].n_pontos, SOLUCAO);
  280.  
  281. fprintf(SAIDA, "\nCaso %d\n\t", i);
  282.  
  283. for (j=0; j<v[i].n_pontos; j++)
  284. {
  285. fprintf(SAIDA,"%.5f, ", SOLUCAO[i]);
  286. }
  287. fprintf(SAIDA,"%.5f", "\b\b.\n");
  288. }
  289. ENTRADA = NULL;
  290. SAIDA = NULL;
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement