implement hw2/rtmuller

This commit is contained in:
2025-09-24 14:41:57 +09:00
parent 5f279a0d74
commit 6cd6ab2b01
5 changed files with 68 additions and 3 deletions

View File

@@ -2,6 +2,7 @@
#include <stdlib.h>
#include "nr.h"
#include "rtmuller.h"
void dbessj0(float x, float *y, float *dy) {
*y = bessj0(x);
@@ -25,16 +26,17 @@ int main() {
int i;
zbrak(bessj0, a, b, n, xb1, xb2, &nb);
for (i = 1; i <= nb; i++) {
/* for (i = 1; i <= nb; i++) {
printf("[%f, %f]\n", xb1[i], xb2[i]);
}
} */
float *roots_bisect = calloc(sizeof(float), nb);
float *roots_linter = calloc(sizeof(float), nb);
float *roots_secant = calloc(sizeof(float), nb);
float *roots_newt = calloc(sizeof(float), nb);
float *roots_newtsafe = calloc(sizeof(float), nb);
float *roots_muller = calloc(sizeof(float), nb);
for (i = 0; i < nb; i++) {
float l = xb1[i + 1];
float r = xb2[i + 1];
@@ -43,6 +45,7 @@ int main() {
roots_secant[i] = rtsec(bessj0, l, r, xacc);
roots_newt[i] = rtnewt(dbessj0, l, r, xacc);
roots_newtsafe[i] = rtsafe(dbessj0, l, r, xacc);
roots_muller[i] = rtmuller(bessj0, l, r, xacc);
}
printf("besection roots: ");
@@ -75,6 +78,12 @@ int main() {
}
printf("\n");
printf("muller method roots: ");
for (i = 0; i < nb; i++) {
printf("%f ", roots_muller[i]);
}
printf("\n");
/* free */
free(xb1);
free(xb2);
@@ -83,6 +92,8 @@ int main() {
free(roots_linter);
free(roots_secant);
free(roots_newt);
free(roots_newtsafe);
free(roots_muller);
return 0;
}