Ik heb een programma geschreven en dit zou een file "abc.txt" moeten aanmaken en hierin de waarden van H, M_1 en M_2 moeten schrijven. Het programma schrijft deze waarden correct weg, maar voor M_1 en M_2 geeft hij telkens 0.1740 (wat overeenkomt met phi_1_min = 0 en phi_2_min =0-. Dit zou niet mogen, dus ik vermoed dat er een ergens een foutje in men programma zit. Ik denk dat phi_1_min en phi_2_min ergens nul wordt gesteld voor het wordt weggeschreven. Ik heb er al uren op zitten zoeken maar kan de fout niet vinden. Iemand een idee?
Alvast heel hard bedankt!
PS: De code van het programma:
Alvast heel hard bedankt!
PS: De code van het programma:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "stdafx.h"
#include <ctype.h>
#define PI 4.0*atan(1.0);
void opslagen( double a , double b , double c);
int main(){
// Alle constanten en variabelen definiëren. Erachter staan telkens de eenheden waarin het uitgedrukt is.
// M_sat en de koppeling constanten hangen af van de temperatuur, ze zijn allemaal aangenomen bij O Kelvin.
double mu_0 = 0.000001256637062; // Wb/(A*m)
double H = -20.00; // T
double t1 = 0.0000000015; // m
double t2 = 0.0000000015; // m
double M_sat = 0.1740; // T (waarde voor Fe)
double phi_1 = 0; // radialen
double phi_2 = 0; // radialen
double phi_h = 0.2*PI; // radialen
double K = 0.5 * mu_0 * M_sat * M_sat; // J/m
double J_1 = 0.00005; // J/(m^2)
double J_2 = 0.000175; // J/(m^2)
double E ; // J
double E_min; // J
double phi_1_min = 0; // radialen
double phi_2_min = 0; // radialen
double M_1; // T
double M_2; // T
// Variabelen zonder fysische betekenis
double alpha = H;
// Waarden geven
while( H >= alpha && (-1)*alpha >= H){
E = mu_0*M_sat*H*(t1*cos(phi_1 - phi_h) + t2*cos(phi_2 - phi_h)) + K*t1*pow(cos(phi_1),2)*pow(sin(phi_1),2) + K*t2*pow(cos(phi_2) , 2)*pow(sin(phi_2) ,2) - J_1*cos(phi_1 - phi_2) - J_2*pow(cos(phi_1 - phi_2) ,2);
E_min = E;
while( phi_1 <= 6.28318530717958647692528676656 ){
while ( phi_2 <= 6.28318530717958647692528676656 ){
if(E < E_min){
E_min = E;
phi_1_min = phi_1;
phi_2_min = phi_2;
phi_2 = phi_2 + (3.14159265358979323846264338328/1800);
}
else{
phi_2 = phi_2 + (3.14159265358979323846264338328/1800);
}
}
phi_2 = 0;
phi_1 = phi_1 + (3.14159265358979323846264338328/1800);
}
// Nu heb je phi_1_min en phi_2_min voor H
// Nu moeten we de magnetisaties berekenen en vervolgens opslaan
M_1 = M_sat*cos(phi_1_min);
M_2 = M_sat*cos(phi_2_min);
opslagen( H , M_1 , M_2);
//Alle "tellers" resetten voor we aan de volgende H beginnen
phi_1 = 0;
phi_2 = 0;
H = H + 0.1;
}
}
void opslagen( double a , double b , double c){
// a is het magneetveld, b is M_1 en c is M_2
// declaraties
FILE *f;
// De file moet eerst geopend worden. Indien de file nog niet bestaat dan wordt die automatische aangemaakt.
f = fopen("abc.txt" , "a" );
// Wegschrijven van de gegevens
fprintf(f, "%f\t" , a);
fprintf(f, "%f\t" , b);
fprintf(f, "%f\n" , c);
// De file moet nog gesloten worden
fclose(f);
}