Проблема с библиотекой math.h в geany
Добавлено: 18 дек 2020, 21:51
Geany не видит библиотеку math.h, соответственно, компилятор воспринимает все математические функции как ошибки. Как подключить библиотеку?
ДаDimmension писал(а): ↑19 дек 2020, 16:22Простите, не понял, исходник чего - текст программы, которую не могу скомпилировать?
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double pi=3.141592653589;
double A2, A3, A4, A5, A6, A7, A8, A9, A10;
double eps, r0;
int N;
double a31=0.075, a32=0.225,
a41=44.0/45.0, a42=-56.0/15.0, a43=32.0/9.0,
a51=19372.0/6561.0, a52=-25360.0/2187.0, a53=64448.0/6561.0, a54=-212.0/729.0,
a61=9017.0/3168.0, a62=-355.0/33.0, a63=46732.0/5247.0, a64=49.0/176.0, a65=-5103.0/18656.0,
a71=35.0/384.0, a73=500.0/1113.0, a74=125.0/192.0, a75=-2187.0/6784.0, a76=11.0/84.0;
double b21=5179.0/57600.0, b23=7571.0/16695.0, b24=0.6140625, b25=-92097.0/339200.0, b26=187.0/2100.0, b27=0.025;
/* Dorman-Prince algorithm */
double DoPrin(double t0, double tf, double dx0, double dz0, double x0, double z0, double a, double q, double ph0){
FILE *fp; //creating file for writing data
if((fp=fopen("Quad_traect_2.7.dat", "w"))==NULL)
{
perror("Quad_traect_2.7.dat");
return 1;
}
double t; // running time
double x; // 1-st variable
double y; // 2-d variable
double dx; // 3-rd variable
double dy; // 4-th variable
double dx1, dx2, dy1, dy2, x1, x2, y1, y2;
float R1, R2, R3, R4, al0, al1, al2, al3, al4;
double dFx3, dFy3, dFx4, dFy4, dFx5, dFy5, dFx6, dFy6, dFx7, dFy7, dFx8, dFy8, dFx9, dFy9, dFx10, dFy10;
double wwx, wwy;
double F01, F21, F31, F41, F51, F61, F71;
double F02, F22, F32, F42, F52, F62, F72;
double F03, F23, F33, F43, F53, F63, F73;
double F04, F24, F34, F44, F54, F64, F74;
double Nt=tf*pi; //finish time
int n=1; // step calculator
float h=0.1; // initial step
x=x0; x1=x0; x2=x0;
y=z0; y1=z0; y2=z0;
dx=dx0; dx1=dx0; dx2=dx0;
dy=dz0; dy1=dz0; dy2=dz0;
t=t0;
N=1;
printf("t= %lf x= %lf y= %lf step= %lf\n",t/pi,x,y,h);
fprintf(fp, "%lf %lf %lf\n",t/pi,x,y);
while(t<=Nt)
{
int k=0;
/* derivatives for spatial harmonics */
dFx3=3*x*x-3*y*y;
dFy3=-6*x*y;
dFx4=4*pow(x,3)-12*x*y*y;
dFy4=-12*x*x*y+4*pow(y,3);
dFx5=5*pow(x,4)-30*x*x*y*y+5*pow(y,4);
dFy5=-20*pow(x,3)*y+20*x*pow(y,3);
dFx6=6*pow(x,5)-60*pow(x,3)*y*y*+30*x*pow(y,4);
dFy6=-30*pow(x,4)*y+60*x*x*pow(y,3)-6*pow(y,5);
dFx7=7*pow(x,6)-105*pow(x,4)*y*y+105*x*x*pow(y,4)-7*pow(y,6);
dFy7=-42*pow(x,5)*y+140*pow(x,3)*pow(y,3)-42*x*pow(y,5);
dFx8=8*pow(x,7)-168*pow(x,5)*y*y+280*pow(x,3)*pow(y,4)-56*x*pow(y,6);
dFy8=-56*pow(x,6)*y+280*pow(x,4)*pow(y,3)-168*x*x*pow(y,5)+8*pow(y,7);
dFx9=9*pow(x,8)-252*pow(x,6)*y*y+630*pow(x,4)*pow(y,4)-252*x*x*pow(y,6)+9*pow(y,8);
dFy9=-72*pow(x,7)*y+504*pow(x,5)*pow(y,3)-504*pow(x,3)*pow(y,5)+72*x*pow(y,7);
dFx10=10*pow(x,9)-360*pow(x,7)*y*y+1260*pow(x,5)*pow(y,4)-840*pow(x,3)*pow(y,6)+90*x*pow(y,8);
dFy10=-90*pow(x,8)*y+840*pow(x,6)*pow(y,3)-1260*pow(x,4)*pow(y,5)+360*x*x*pow(y,7)-10*pow(y,9);
wwx=A3*dFx3/A2+A4*dFx4/(A2*A2)+A5*dFx5/pow(A2,3)+A6*dFx6/pow(A2,4)+A7*dFx7/pow(A2,5)+A8*dFx8/pow(A2,6)+A9*dFx9/pow(A2,7)+A10*dFx10/pow(A2,8);
wwy=A3*dFy3/A2+A4*dFy4/(A2*A2)+A5*dFy5/pow(A2,3)+A6*dFy6/pow(A2,4)+A7*dFy7/pow(A2,5)+A8*dFy8/pow(A2,6)+A9*dFy9/pow(A2,7)+A10*dFy10/pow(A2,8);
la1:
if(k>10) goto la2;
F01=-(a+2*q*cos(2*(t-ph0)))*(x+0.5*wwx); //integrated function 1
F02=(a+2*q*cos(2*(t-ph0)))*(y-0.5*wwy); //integrated function 2
F03=dx; //integrated function 3
F04=dy; //integrated function 4
F21=-(a+2*q*cos(2*(t+h/5.0-ph0)))*(x+h*F03/5.0+0.5*wwx);
F22=(a+2*q*cos(2*(t+h/5.0-ph0)))*(y+h*F04/5.0-0.5*wwy);
F23=dx+h*F01/5.0;
F24=dy+h*F02/5.0;
F31=-(a+2*q*cos(2*(t+0.3*h-ph0)))*(x+h*(a31*F03+a32*F23)+0.5*wwx);
F32=(a+2*q*cos(2*(t+0.3*h-ph0)))*(y+h*(a31*F04+a32*F24)-0.5*wwy);
F33=dx+h*(a31*F01+a32*F21);
F34=dy+h*(a31*F02+a32*F22);
F41=-(a+2*q*cos(2*(t+0.8*h-ph0)))*(x+h*(a41*F03+a42*F23+a43*F33)+0.5*wwx);
F42=(a+2*q*cos(2*(t+0.8*h-ph0)))*(y+h*(a41*F04+a42*F24+a43*F34)-0.5*wwy);
F43=dx+h*(a41*F01+a42*F21+a43*F31);
F44=dy+h*(a41*F02+a42*F22+a43*F32);
F51=-(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(x+h*(a51*F03+a52*F23+a53*F33+a54*F43)+0.5*wwx);
F52=(a+2*q*cos(2*(t+8.0*h/9.0-ph0)))*(y+h*(a51*F04+a52*F24+a53*F34+a54*F44)-0.5*wwy);
F53=dx+h*(a51*F01+a52*F21+a53*F31+a54*F41);
F54=dy+h*(a51*F02+a52*F22+a53*F32+a54*F42);
F61=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a61*F03+a62*F23+a63*F33+a64*F43+a65*F53)+0.5*wwx);
F62=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a61*F04+a62*F24+a63*F34+a64*F44+a65*F54)-0.5*wwy);
F63=dx+h*(a61*F01+a62*F21+a63*F31+a64*F41+a65*F51);
F64=dy+h*(a61*F02+a62*F22+a63*F32+a64*F42+a65*F52);
F71=-(a+2*q*cos(2*(t+h-ph0)))*(x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63)+0.5*wwx);
F72=(a+2*q*cos(2*(t+h-ph0)))*(y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64)-0.5*wwy);
F73=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
F74=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);
dx1=dx+h*(a71*F01+a73*F31+a74*F41+a75*F51+a76*F61);
dx2=dx+h*(b21*F01+b23*F31+b24*F41+b25*F51+b26*F61+b27*F71);
dy1=dy+h*(a71*F02+a73*F32+a74*F42+a75*F52+a76*F62);
dy2=dy+h*(b21*F02+b23*F32+b24*F42+b25*F52+b26*F62+b27*F72);
x1=x+h*(a71*F03+a73*F33+a74*F43+a75*F53+a76*F63);
x2=x+h*(b21*F03+b23*F33+b24*F43+b25*F53+b26*F63+b27*F73);
y1=y+h*(a71*F04+a73*F34+a74*F44+a75*F54+a76*F64);
y2=y+h*(b21*F04+b23*F34+b24*F44+b25*F54+b26*F64+b27*F74);
R1=fabs(dx2-dx1);
R2=fabs(dy2-dy1);
R3=fabs(x2-x1);
R4=fabs(y2-y1);
if(R1>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R2>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R3>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R4>=eps) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmin(fmin(al1,al2),fmin(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
else
if(R1<eps/64.0)
if(R2<eps/64)
if(R3<eps/64)
if(R4<eps/64) {
al1=sqrt(sqrt(eps/R1));
al2=sqrt(sqrt(eps/R2));
al3=sqrt(sqrt(eps/R3));
al4=sqrt(sqrt(eps/R4));
al0=fmax(fmax(al1,al2),fmax(al3,al4));
h=0.95*al0*h;
k++;
goto la1;
}
if(sqrt(x2*x2+y2*y2)>r0)
break;
la2:
x=x2;
y=y2;
dx=dx2;
dy=dy2;
t=(float)t+h;
n++;
printf("t= %lf x= %lf y= %lf h= %lf\n",t/pi,x,y,h);
fprintf(fp, "%lf %lf %lf\n",t/pi,x,y);
}
if (t<Nt) N=0;
if (t>2*Nt) N=0;
printf("n= %d N= %d\n",n,N);
return N;
}
/* Main program */
int main(){
/* multipole amplitudes */
A2=1.0;
A3=0.0;
A4=0.0;
A5=0.0;
A6=0.0;
A7=0.0;
A8=0.0;
A9=0.0;
A10=0.0;
double t0=0.0; //initial time
double tf=50.0; //finish time in periods HF field
double x0=0.5; //initial value of x-coordinate
double z0=0.5; //initial value y-coordinate
double dx0=0.0; //initial value x-projection of velocity
double dz0=0.0; //initial value y-projection of velocity
double ph0=0.0*pi; //initial phase
eps=1.0E-6; //accuracy
r0=1.14; //radius of field
double q=0.7; //q-parameter
double a=0.224; //a-parameter
DoPrin(t0, tf, dx0, dz0, x0, z0, a, q, ph0);
return 0;
}
Не сказал бы, что из предложенной вам ссылки http://pogugli.com/?360237 это предлагают все советы. Мне, например, бросилось в глаза ещё 2 совета (спойлер). Я не профи, но м.б. наведёт на мысли.Dimmension писал(а): ↑19 дек 2020, 06:26но все советы сводятся к добавлению -lm к команде компиляции в терминале
Код: Выделить всё
gcc qwe.cpp -lm -o qwe
Не могу сказать точно, но очень похоже.и вот прямо это поставилось?
Я тоже не профи, и просто не понял, что нужно делать.Я не профи, но м.б. наведёт на мысли.