rename muller and add hw2

This commit is contained in:
2025-09-24 15:27:41 +09:00
parent 6cd6ab2b01
commit 71d3f7ca2b
3 changed files with 47 additions and 3 deletions

View File

@@ -1,20 +1,35 @@
#include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "muller.h"
#include "nr.h" #include "nr.h"
#include "rtmuller.h"
void dbessj0(float x, float *y, float *dy) { void dbessj0(float x, float *y, float *dy) {
*y = bessj0(x); *y = bessj0(x);
*dy = -bessj1(x); *dy = -bessj1(x);
} }
float test_func(float x) {
return x * sin(x) - 1;
}
float test_func_derivative(float x) {
return sin(x) + x * cos(x);
}
void test_funcd(float x, float *y, float *dy) {
*y = test_func(x);
*dy = test_func_derivative(x);
}
int main() { int main() {
/* /*
1. using zbrak, find all possible intervals with roots. 1. using zbrak, find all possible intervals with roots.
2. and use routines and enumerate all roots. 2. and use routines and enumerate all roots.
*/ */
printf("=== A Program that find bessj0 roots in [1, 10] ===\n");
printf("--------------------------------\n");
float a = 1.0, b = 10.0; float a = 1.0, b = 10.0;
float xacc = 0.000001; float xacc = 0.000001;
@@ -94,6 +109,35 @@ int main() {
free(roots_newt); free(roots_newt);
free(roots_newtsafe); free(roots_newtsafe);
free(roots_muller); free(roots_muller);
printf("\n");
printf("=== Solve one interesting nonlinear equation ===\n");
printf(": using the routine of rtsafe.c in NR in C\n");
printf("--------------------------------\n");
n = 21;
xb1 = calloc(sizeof(float), n);
xb2 = calloc(sizeof(float), n);
nb = 0;
zbrak(test_func, a, b, n, xb1, xb2, &nb);
float *roots_interesting = calloc(sizeof(float), nb);
for (i = 0; i < nb; i++) {
float l = xb1[i + 1];
float r = xb2[i + 1];
roots_interesting[i] = rtsafe(test_funcd, l, r, xacc);
}
printf("I want to find roots of `x * sin(x) - 1`\n");
printf("roots: ");
for (i = 0; i < nb; i++) {
printf("%f ", roots_interesting[i]);
}
printf("\n");
free(xb1);
free(xb2);
free(roots_interesting);
return 0; return 0;
} }

View File

@@ -1,6 +1,6 @@
#include "nrutil.h" #include "nrutil.h"
#include "rtmuller.h" #include "muller.h"
#include <math.h> #include <math.h>
float rtmuller(float (*func)(float), float x1, float x2, float xacc) { float rtmuller(float (*func)(float), float x1, float x2, float xacc) {